File Manager

Current Path : /webspace/www.promiel.be/html/modules/CGExtensions/lib/
Upload File :
Current File : //webspace/www.promiel.be/html/modules/CGExtensions/lib/class.cge_smarty_plugins.php

<?php
#BEGIN_LICENSE
#-------------------------------------------------------------------------
# Module: CGExtensions (c) 2008-2014 by Robert Campbell
#         (calguy1000@cmsmadesimple.org)
#  An addon module for CMS Made Simple to provide useful functions
#  and commonly used gui capabilities to other modules.
#
#-------------------------------------------------------------------------
# CMS - CMS Made Simple is (c) 2005 by Ted Kulp (wishy@cmsmadesimple.org)
# Visit our homepage at: http://www.cmsmadesimple.org
#
#-------------------------------------------------------------------------
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# However, as a special exception to the GPL, this software is distributed
# as an addon module to CMS Made Simple.  You may not use this software
# in any Non GPL version of CMS Made simple, or in any version of CMS
# Made simple that does not indicate clearly and obviously in its admin
# section that the site was built with CMS Made simple.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Or read it online: http://www.gnu.org/licenses/licenses.html#GPL
#
#-------------------------------------------------------------------------
#END_LICENSE

final class cge_smarty_plugins
{
    protected function __construct() {}

    static private $_cge_cache_keys;
    static private $_cge_cache_keystack;
    static private $_in_tab;

    /***
     * A smarty function for creating a list of state options
     */
    public static function smarty_function_cge_state_options($params,$smarty)
    {
        $db = \cge_utils::get_db();
        $obj = cge_utils::get_module('CGExtensions');

        $query = 'SELECT * FROM '.CGEXTENSIONS_TABLE_STATES.' ORDER BY sorting DESC,name ASC';
        $tmp = $db->GetAll($query);
        $output = '';
        if( isset($params['selectone']) ) $output .= '<option value="">'.trim($params['selectone'])."</option>\n";
        foreach( $tmp as $row ) {
            $output .= "<option value=\"{$row['code']}\"";
            if( isset($params['selected']) && $params['selected'] == $row['code'] ) $output .= ' selected="selected"';
            $output .= ">{$row['name']}</option>\n";
        }
        return $output;
    }

    /***
     * A smarty function for creating a list of country options
     */
    public static function smarty_function_cge_country_options($params,$smarty)
    {
        $db = \cge_utils::get_db();
        $obj = \cge_utils::get_module('CGExtensions');

        $query = 'SELECT * FROM '.CGEXTENSIONS_TABLE_COUNTRIES.' ORDER BY sorting DESC,name ASC';
        $tmp = $db->GetAll($query);
        $output = '';
        if( isset($params['selectone']) ) $output .= '<option value="">'.trim($params['selectone'])."</option>\n";
        foreach($tmp as $row) {
            $output .= "<option value=\"{$row['code']}\"";
            if( isset($params['selected']) && $params['selected'] == $row['code'] ) $output .= ' selected="selected"';
            $output .= ">{$row['name']}</option>\n";
        }
        return $output;
    }


    /*
     * A smarty plugin for displaying the current page url
     */
    public static function smarty_function_get_current_url($params, $smarty)
    {
        $url = cge_url::current_url();
        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$url);
            return;
        }
        return $url;
    }


    /*
     * A smarty function to output a yes/no dropdown.
     */
    public static function smarty_function_cge_yesno_options($params,$smarty)
    {
        $mod = cge_utils::get_module('CGExtensions');
        $name = '';
        $prefix = '';
        $selected = '';
        $out = '';
        $seltxt = '';
        $id = trim(cge_utils::get_param($params,'id'));
        $class = trim(cge_utils::get_param($params,'class'));


        if( isset($params['prefix']) ) $prefix = trim($params['prefix']);
        if( isset($params['name']) ) $name = trim($params['name']);
        if( isset($params['selected']) ) $selected = trim($params['selected']);
        if( !empty($name) ) {
            $out .= "<select name=\"{$prefix}{$name}\"";
            if( !empty($id) ) $out .= " id=\"{$id}\"";
            if( !empty($class) ) $out .= " class=\"{$class}\"";
            $out .= '>';
        }
        if( $selected == 1 ) $seltxt = ' selected="selected"';

        $out .= '<option value="1"'.$seltxt.'>'.$mod->Lang('yes').'</option>';
        $seltxt = '';
        if( $selected == 0 ) $seltxt = ' selected="selected"';
        $out .= '<option value="0"'.$seltxt.'>'.$mod->Lang('no').'</option>';
        if( !empty($name) ) $out .= "</select>";

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$out);
            return;
        }
        return $out;
    }


    /*
     * A smarty plugin for testing if a module is available.
     */
    public static function smarty_function_have_module($params, $smarty)
    {
        $name = '';
        $trythis = array('module','mod','m');
        foreach( $trythis as $one ) {
            if( isset($params[$one]) ) {
                $name = trim($params[$one]);
                break;
            }
        }
        if( empty($name) ) return;

        $tmp = cge_utils::get_module($name);
        $res = (is_object($tmp))?1:0;

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$res);
            return;
        }
        return $res;
    }


    /*
     * A smarty function for displaying an image
     */
    public static function smarty_function_cgimage($params, $smarty)
    {
        $obj = $smarty->get_template_vars('mod');
        if( !is_object($obj) )  $obj = cge_utils::get_module('CGExtensions');

        if( !isset($params['image']) ) return;

        $alt = trim($params['image']);
        if( isset($params['alt']) ) $alt = trim($params['alt']);
        $class = '';
        if( isset($params['class']) ) $class = trim($params['class']);
        $height = '';
        if( isset($params['width']) ) $width = trim($params['width']);
        $width = '';
        if( isset($params['height']) ) $height = trim($params['height']);

        //$obj->_load_main();
        $txt = $obj->DisplayImage(trim($params['image']),$alt,$class,$width,$height);

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$txt);
        }
        else {
            return $txt;
        }
    }


  /*
   * A smarty function for displaying a help image
   */
  public static function smarty_function_helptag($params, $smarty)
  {
    $obj = cge_utils::get_module('CGExtensions');

    $image = 'icons/system/info.gif';
    $alt = $obj->Lang('whatsthis');
    $width = '';
    $height = '';
    $class = 'help';

    if( !isset($params['key']) ) return;
    $key = trim($params['key']);

        $image = 'icons/system/info.gif';
        $alt = $obj->Lang('whatsthis');
        $width = '';
        $height = '';
        $class = 'help';

        if( !isset($params['key']) ) return;
        $key = trim($params['key']);

        if( isset($params['alt']) ) $alt = trim($params['alt']);
        if( isset($params['class']) ) $class = trim($params['class']);

        $img = $obj->DisplayImage($image,$alt,'',$width,$height);
        $txt = '<a href="#'.$key.'" class="'.$class.'">'.$img.'</a>';

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$txt);
            return;
        }
        return $txt;
    }

    /*
     * A smarty function for displaying a help image
     */
    public static function smarty_function_helphandler($params, $smarty)
    {
        $class = 'help';
        if( isset($params['class']) ) $class = trim($params['class']);

        $js = '<script type="text/javascript">$(document).ready(function(){
      $(\'a.'.$class.'\').click(function(){
        var v = $(this).attr(\'href\').substr(1);
        $(\'#\'+v).dialog();
        return false;
      });
    })</script>';

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$js);
            return;
        }
        return $js;
    }

    /*
     * A smarty function for outputting help text.
     */
    public static function smarty_function_helpcontent($params, $smarty)
    {
        if( !isset($params['key']) ) return;
        if( !isset($params['text']) ) return;

        $mod = cge_utils::get_module('CGExtensions');
        $title = $mod->Lang('help');
        $key = trim($params['key']);
        $text = trim($params['text']);
        if( isset($params['title']) ) $title = trim($params['title']);

        $out = '<div id="'.$key.'" title="'.$title.'" class="helpcontent">'.$text.'</div>';

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$out);
            return;
        }
        return $out;
    }

    public static function smarty_modifier_time_fmt($val,$show_hours = TRUE,$show_minutes = TRUE,$show_seconds = FALSE,$delimiter = ':')
    {
        $val = (int)$val;
        $arr = array();
        if( $show_hours ) $arr[] = sprintf('%02s',floor($val / 3600)); // hours
        if( $show_minutes ) $arr[] = sprintf('%02s',floor($val % 3600 / 60)); // minutes
        if( $show_seconds ) $arr[] = sprintf('%02s',floor($val % 60)); // seconds.
        $out = implode($delimiter,$arr);
        return $out;
    }

    public static function smarty_modifier_rfc_date($string)
    {
        if( !function_exists('__make_timestamp') ) {
            function __make_timestamp($string)
            {
                if(empty($string)) {
                    $time = time();
                } elseif (preg_match('/^\d{14}$/', $string)) {
                    $time = mktime(substr($string, 8, 2),substr($string, 10, 2),substr($string, 12, 2),
                                   substr($string, 4, 2),substr($string, 6, 2),substr($string, 0, 4));
                } elseif (is_numeric($string)) {
                    $time = (int)$string;
                } else {
                    $time = strtotime($string);
                    if ($time == -1 || $time === false) {
                        // strtotime() was not able to parse $string, use "now":
                        $time = time();
                    }
                }
                return $time;
            }
        }

        $timestamp = '';
        if( $string != '' ) {
            $timestamp = __make_timestamp($string);
        }
        else {
            return;
        }

        $txt = date('r',$timestamp);
        return $txt;
    }


    public static function smarty_modifier_cge_entity_decode($string)
    {
        return html_entity_decode($string,ENT_QUOTES);
    }


    /*
     * A smarty block plugin for displaying an error using
     * a template.  i.e {error}blah blah blah{/error}
     *
     */
    public static function blockDisplayError($params,$content,$smarty,$repeat)
    {
        $txt = '';
        if( trim($content) != '' ) {
            $errorclass = 'error';
            if( isset( $params['errorclass'] ) ) $errorclass = trim($params['errorclass']);
            $obj = cge_utils::get_module('CGExtensions');
            $txt = $obj->DisplayErrorMessage($content,$errorclass);
        }

        if( isset( $params['assign'] ) ) {
            $smarty->assign($params['assign'],$txt);
            return '';
        }
        return $txt;
    }


    public static function jsmin($params,$content,$smarty,$repeat)
    {
        require_once(dirname(__FILE__).'/jsmin.php');
        $txt = '';
        if( $content != '' ) $txt = JSMin::minify($content);

        if( isset( $params['assign'] ) ) {
            $smarty->assign($params['assign'],$txt);
            return;
        }
        return $txt;
    }


    /**
     * A smarty plugin to provide a text area
     */
    public static function smarty_function_cge_textarea($params, $smarty)
    {
        $name = '';
        $wysiwyg = false;
        $syntax = false;
        $content = '';
        $class= '';
        $id = '';
        $rows = 10;
        $cols = 80;
        $required = false;

        if( isset($params['prefix']) ) $name = trim($params['prefix']);
        if( isset($params['name']) ) $name .= trim($params['name']);
        if( isset($params['wysiwyg']) ) $wysiwyg = cge_utils::to_bool(cge_utils::get_param($params,'wysiwyg'));
        if( isset($params['syntax']) ) $syntax = cge_utils::to_bool(cge_utils::get_param($params,'syntax'));
        if( isset($params['required']) ) $required = cge_utils::to_bool(cge_utils::get_param($params,'required'));
        if( isset($params['value']) ) $content = $params['value'];
        if( isset($params['content']) ) $content = $params['content'];
        if( isset($params['class']) ) $class = trim($params['class']);
        if( $name == '' ) return;

        if( $wysiwyg ) $syntax = false; // no syntax and wysiwyg at the same time.

        $id = trim(cge_utils::get_param($params,'id',$id));
        $rows = (int) cge_utils::get_param($params,'rows',$rows);
        $rows = max(1,$rows);
        $cols = (int) cge_utils::get_param($params,'cols',$cols);
        $cols = max(1,$cols);

        $addtext = '';
        if( isset($params['required']) ) {
            $required = cge_utils::to_bool($params['required']);
            if( $required && !$wysiwyg ) $addtext .= ' required';
        }

        $output = create_textarea($wysiwyg,$content,$name,$class,$id,'','',$cols,$rows,'',$syntax,$addtext);

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$output);
            return;
        }
        return $output;
    }


    /*---------------------------------------------------------
      array_to_assoc
      ---------------------------------------------------------*/
    static function smarty_function_str_to_assoc($params,$smarty)
    {
        $input = '';
        $delim1 = ',';
        $delim2 = '=';
        if( isset($params['input']) ) $input = trim($params['input']);
        if( isset($params['delim1']) ) $delim1 = trim($params['delim1']);
        if( isset($params['delim2']) ) $delim2 = trim($params['delim2']);

        if( $input == '' ) return;
        $tmp = cge_array::explode_with_key($input,$delim2,$delim1);

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$tmp);
            return;
        }
        return $tmp;
    }


    public static function cache_start($tag_arg,$smarty)
    {
        $output = '';
        if( !cms_cache_handler::can_cache() ) {
            $output = '{';
        }
        else {
            $bt = debug_backtrace();
            if( !is_array(self::$_cge_cache_keys) ) {
                self::$_cge_cache_keys = array();
                self::$_cge_cache_keystack = array();
            }
            $nn = '';
            while( $nn == '' || $nn < 100 ) {
                $keyr = 'v'.md5(serialize($bt).cms_utils::get_current_pageid().cge_url::current_url());
                $key = $keyr.$nn;
                if( !in_array($key,self::$_cge_cache_keys) ) break;
                if( $nn == '' ) $nn = 1;
                $nn = $nn++;
            }

            if( $key == '' ) return '{';
            self::$_cge_cache_keys[] = $key;
            self::$_cge_cache_keystack[] = $key;

            $output = "\$$key=cms_cache_handler::get_instance()->get('$key','cge_cache'); if(\$$key!=''){echo '<!--cge_cache-->'.\$$key;}else{ob_start();";
        }
        if( version_compare(CMS_VERSION,'1.11-alpha0') < 0 ) return $output;
        return '<?php '.$output.' ?>';
    }


    public static function cache_end($tag_arg,$smarty)
    {
        $output = '';
        if( !cms_cache_handler::can_cache() ) {
            $output = '}';
        }
        else {
            if( !is_array(self::$_cge_cache_keystack) || count(self::$_cge_cache_keystack) == 0 ) {
                throw new Exception('in /cge_cache smarty tag without existing cache data');
            }
            $key = array_pop(self::$_cge_cache_keystack);
            if( $key == '' ) throw new Exception('in /cge_cache with invalid key');

            $output = "\$$key=@ob_get_contents();@ob_end_clean();echo \$$key;cms_cache_handler::get_instance()->set('$key',\$$key,'cge_cache');}";
        }
        if( version_compare(CMS_VERSION,'1.11-alpha0') < 0 ) return $output;
        return '<?php '.$output.' ?>';
    }


    public static function cge_array_set($params,$smarty)
    {
        if( !(isset($params['array']) && isset($params['value'])) ) return; // no params, do nothing.
        $arr = get_parameter_value($params,'array');
        $key = get_parameter_value($params,'key');
        $val = get_parameter_value($params,'value');

        if( $arr == '' || $val == '' ) return;

        $data = array();
        if( cge_tmpdata::exists($arr) ) $data = cge_tmpdata::get($arr);
        if( !is_array($data) ) return;
        if( $key ) {
            $data[$key] = $val;
        }
        else {
            $data[] = $val;
        }
        cge_tmpdata::set($arr,$data);
    }


    public static function cge_array_pop($params,$smarty)
    {
        if( !isset($params['array']) ) return;
        $arr = get_parameter_value($params,'array');
        if( !$arr ) return;
        if( !cge_tmpdata::exists($arr) ) return;
        $data = cge_array::get($arr);
        if( !is_array($data) ) return;

        $ret = array_pop($data);
        cge_tmpdata::set($arr,$data);

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$ret);
            return;
        }

        return $ret;
    }


    public static function cge_array_erase($params,$smarty)
    {
        if( !isset($params['array']) || !isset($params['key']) ) {
            // no params, do nothing.
            return;
        }

        $arr = trim($params['array']);
        $key = trim($params['key']);
        if( $arr == '' || $key == '' ) return;
        if( !cge_tmpdata::exists($arr) ) return;

        $data = cge_tmpdata::get($arr);
        if( isset($data[$key]) ) unset($data[$key]);
        if( count(array_keys($data)) == 0 ) {
            cge_tmpdata::erase($arr);
            return;
        }
        cge_tmpdata::set($arr,$data);
    }


    public static function cge_array_get($params,$smarty)
    {
        if( !isset($params['array']) || !isset($params['key']) ) return; // no params, do nothing.
        $arr = trim($params['array']);
        $key = trim($params['key']);
        if( $arr == '' || $key == '' ) return;
        if( !cge_tmpdata::exists($arr) ) return;

        $data = cge_tmpdata::get($arr);
        if( isset($data[$key]) ) {
            $val = $data[$key];

            if( isset($params['assign']) ) {
                $smarty->assign(trim($params['assign']),$val);
                return;
            }

            return $val;
        }
    }


    public static function cge_array_getall($params,$smarty)
    {
        if( !isset($params['array']) ) return;

        $arr = trim($params['array']);
        if( $arr == '' ) return;
        if( !cge_tmpdata::exists($arr) ) return;
        $data = cge_tmpdata::get($arr);
        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$data);
            return;
        }

        return $data;
    }


    public static function cge_admin_error($params,$smarty)
    {
        global $CMS_ADMIN_PAGE;
        if( !isset($CMS_ADMIN_PAGE) ) return;
        if( !isset($params['error']) ) return;

        $mod = cge_utils::get_module('CGExtensions');
        $tmp = $mod->ShowErrors($params['error']);

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$tmp);
            return;
        }

        return $tmp;
    }


    public static function cge_isbot($params,$smarty)
    {
        $browser = cge_utils::get_browser();
        $robot = $browser->isRobot();

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$robot);
            return;
        }
        return $robot;
    }


    public static function cge_get_browser($params,$smarty)
    {
        $browser = cge_utils::get_browser();
        $res = $browser->getBrowser();

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$res);
            return;
        }
        return $res;
    }

    public static function cge_isie($params,$smarty)
    {
        $browser = cge_utils::get_browser();
        $res = $browser->getBrowser();
        $res = ($res == Browser::BROWSER_IE && !$browser->isMobile())?1:0;

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$res);
            return;
        }
        return $res;
    }


    public static function cge_is_smartphone($params,$smarty)
    {
        $browser = cge_utils::get_browser();
        $smartphone = $browser->isMobile();

        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$smartphone);
            return;
        }
        return $smartphone;
    }


    public static function cge_wysiwyg($params,$smarty)
    {
        if( !isset($params['wysiwyg']) ) $params['wysiwyg'] = 1;
        return self::smarty_function_cge_textarea($params,$smarty);
    }

    public static function smarty_modifier_createurl($input,$assume_root = TRUE)
    {
        $config = cmsms()->GetConfig();
        $tmp = strtolower($input);
        if( startswith($tmp,'ftp') || startswith($tmp,'http') ) return $input;
        if( startswith($input,'/') && $assume_root ) {
            // relative url...
            return $config['root_url'].$input;
        }

        $hostpart = substr($input,0,strpos($input,'/'));
        if( strpos($input,'.') === FALSE ) {
            // no dots in host part... it's a path without a starting /
            return $config['root_url'].$input;
        }

        // we don't care about the path stuff.
        return 'http://'.$input;
    }

    public static function cge_setlist($params,$smarty)
    {
        $name = get_parameter_value($params,'array');
        $name = get_parameter_value($params,'name',$name);
        $key = get_parameter_value($params,'key');
        $val = get_parameter_value($params,'value');

        $name = trim($name);
        $key = trim($key);
        if( !$name || !isset($params['value']) ) return;

        $parts = explode('.',$name);
        $data = array();
        if( !is_array($parts) || count($parts) == 0 ) return;
        if( $key ) $parts[] = $key;

        $smarty = cmsms()->GetSmarty();
        $name = $parts[0];
        $data = $smarty->get_template_vars($name);
        if( !$data ) $data = array();
        if( !is_array($data) ) $data = array($data);

        // {cge_setlist name='a.b.c.d' value='55'}
        $ref =& $data;
        $i = 0;
        for( $i = 1; $i < count($parts) - 1; $i++ ) {
            if( !isset($ref[$parts[$i]]) || !is_array($ref[$parts[$i]]) ) {
                if( $i < count($parts) - 1 ) $ref[$parts[$i]] = array();
            }
            $ref =& $ref[$parts[$i]];
        }

        // expect a list of values... may contain key/value pairs
        if( strpos($val,'::') === FALSE ) {
            $ref[$parts[$i]] = $val;
        }
        else {
            $tmp = cge_array::smart_explode($val,'||');
            if( is_array($tmp) && count($tmp) ) {
                $ref[$parts[$i]] = array();
                for( $j = 0; $j < count($tmp); $j++ ) {
                    $k = '';
                    $v = $tmp[$j];
                    if( strpos($v,'::') !== FALSE ) list($k,$v) = explode('::',$tmp[$j],2);
                    if( $k ) $k = trim(trim($k,'"'));
                    if( $v ) $v = trim(trim($v,'"'));
                    if( $k ) {
                        $ref[$parts[$i]][$k] = $v;
                    }
                    else {
                        $ref[$parts[$i]][] = $v;
                    }
                }
            }
        }

        // put the data back
        $smarty->assign($name,$data);
        // done.
    }

    public static function cge_unsetlist($params,$smarty)
    {
        $name = get_parameter_value($params,'array');
        $name = get_parameter_value($params,'name',$name);
        $key = get_parameter_value($params,'key');

        if( !$name || !$key ) return;
        $data = $smarty->get_template_vars($name);
        if( !$data ) return;
        if( !is_array($data) ) return;

        if( !isset($data[$key]) ) return;
        unset($data[$key]);
        $smarty->assign($name,$data);
        // done.
    }

    public static function cge_module_hint($params,$smarty)
    {
        if( !isset($params['module']) ) return;

        $module = trim($params['module']);
        $modobj = cms_utils::get_module($module);
        if( !is_object($modobj) ) return;

        $data = cms_utils::get_app_data('__MODULE_HINT__'.$module);
        if( !$data ) $data = array();

        // warning, no check here if the module understands the parameter.
        foreach( $params as $key => $value ) {
            if( $key == 'module' ) continue;
            $data[$key] = $value;
        }

        cms_utils::set_app_data('__MODULE_HINT__'.$module,$data);
    }

    public static function cge_start_tabs($params,$smarty)
    {
        $mod = cms_utils::get_module('CGExtensions');
        $out = $mod->StartTabHeaders();
        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }
        return $out;
    }

    public static function cge_end_tabs($params,$smarty)
    {
        $mod = cms_utils::get_module('CGExtensions');
        $out = '';
        if( self::$_in_tab ) {
            $out .= $mod->EndTab();
            self::$_in_tab = 0;
        }
        $out .= $mod->EndTabContent();
        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }
        return $out;
    }

    public static function cge_tabheader($params,$smarty)
    {
        if( !isset($params['name']) ) return;

        $name = trim($params['name']);
        $label = $name;
        if( isset($params['label']) ) $label = trim($params['label']);

        $modname = $smarty->get_template_vars('actionmodule');
        if( !$modname ) $modname = 'CGExtensions';
        $mod = cms_utils::get_module($modname);
        $out = $mod->SetTabHeader($name,$label);

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }
        return $out;
    }

    public static function cge_tabcontent_start($params,$smarty)
    {
        static $endtabheaders_sent = 0;

        if( !isset($params['name']) ) return;
        $parms2 = $smarty->get_template_vars('actionparams');
        if( !is_array($parms2) ) $parms2 = array();
        $mod = cms_utils::get_module('CGExtensions');

        $out = '';
        if( !$endtabheaders_sent ) {
            $out .= $mod->EndTabHeaders();
            $out .= $mod->StartTabContent();
            $endtabheaders_sent = 1;
        }

        if( self::$_in_tab ) {
            $out .= $mod->EndTab();
            self::$_in_tab = 0;
        }

        $out .= $mod->StartTab($params['name'],$parms2);
        self::$_in_tab = 1;

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }
        return $out;
    }

    public static function cge_tabcontent_end($params,$smarty)
    {
        static $endheader_sent = 0;
        $mod = cms_utils::get_module('CGExtensions');
        $out = $mod->EndTab();
        self::$_in_tab = 0;

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }
        return $out;
    }


    public static function cge_file_list($params,$smarty)
    {
        $config = cmsms()->GetConfig();
        $dir = '';
        $maxdepth = -1;
        $pattern = '*';
        $excludes = array('_*','.??*');
        $absolute = FALSE;
        $options = FALSE;
        $selected = null;
        $novalue = '';

        // handle the dir param
        if( isset($params['dir']) ) {
            $tmp = trim($params['dir']);
            $tmp2 = cms_join_path($config['uploads_path'],$tmp);
            if( is_dir($tmp2) ) $dir = $tmp;
        }

        // handle the pattern param
        if( isset($params['pattern']) ) {
            $tmp = trim($params['pattern']);
            $pattern = explode('||',$tmp);
        }

        // handle the excludes param
        if( isset($params['excludes']) ) {
            $tmp = trim($params['excludes']);
            $excludes = array_merge($excludes,explode('||',$tmp));
        }

        // handle the maxdepth param
        if( isset($params['maxdepth']) ) {
            $tmp = (int)$params['excludes'];
            if( $tmp > 0 ) $maxdepth = $tmp;
        }

        // handle the options param
        if( isset($params['options']) ) $options = cge_utils::to_bool($params['options']);

        // handle the selected param
        if( isset($params['selected']) ) {
            $options = TRUE;
            $selected = trim($params['selected']);
        }

        // handle the 'novalue' param
        if( isset($params['novalue']) ) $novalue = trim($params['novalue']);;
        if( isset($params['absolute']) ) $absolute = cms_to_bool($params['absolute']);

        if( $dir != '' ) {
            $dir = trim($dir,'/');
            $dir = cms_join_path($config['uploads_path'],$dir);
        }
        else {
            $dir = $config['uploads_path'];
        }
        if( !is_dir($dir) ) return;

        $files = cge_dir::recursive_glob($dir,$pattern,'FILES',$excludes,$maxdepth);
        if( !is_array($files) || count($files) == 0 ) return;

        $out = array();
        foreach( $files as $one ) {
            if( $absolute ) {
                $out[$one] = $one;
            }
            else {
                $one = substr($one,strlen($dir));
                if( startswith($one,'/') ) $one = substr($one,1);
                $out[$one] = $one;
            }
        }

        if( $options ) {
            $tmp = $out;
            $out = '';
            if( $novalue != '' ) $out .= "<option value=\"\">".$novalue."</option>";
            foreach( $tmp as $k => $v ) {
                if( $k == $selected ) {
                    $out .= "<option selected=\"selected\" value=\"$k\">$v</option>";
                }
                else {
                    $out .= "<option value=\"$k\">$v</option>";
                }
            }
        }

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }

        return $out;
    }


    public static function cge_image_list($params,$smarty)
    {
        $config = cmsms()->GetConfig();
        $dir = '';
        $maxdepth = -1;
        $pattern = array('*.jpg','*.jpeg','*.bmp','*.gif','*.png','*.ico');
        $excludes = array('_*','.??*');
        $absolute = FALSE;
        $thumbs = FALSE;
        $options = FALSE;
        $selected = null;
        $novalue = '';

        // handle the dir param
        if( isset($params['dir']) ) {
            $tmp = trim($params['dir']);
            $tmp2 = cms_join_path($config['uploads_path'],$tmp);
            if( is_dir($tmp2) ) $dir = $tmp;
        }

        // handle the extensions param
        if( isset($params['extensions']) ) {
            $tmp = trim($params['extensions']);
            $pattern = explode('||',$tmp);
        }

        if( isset($params['thumbs']) ) $thumbs = cms_to_bool($params['thumbs']);

        // handle the excludes param
        if( isset($params['excludes']) ) {
            $tmp = trim($params['excludes']);
            $excludes = array_merge($excludes,explode('||',$tmp));
        }

        // handle the maxdepth param
        if( isset($params['maxdepth']) ) {
            $tmp = (int)$params['excludes'];
            if( $tmp > 0 ) $maxdepth = $tmp;
        }

        if( isset($params['absolute']) ) $absolute = cms_to_bool($params['absolute']);

        // handle the options param
        if( isset($params['options']) ) {
            $options = cms_to_bool($params['options']);
        }

        // handle the selected param
        if( isset($params['selected']) ) {
            $options = TRUE;
            $selected = trim($params['selected']);
        }

        // handle the 'novalue' param
        if( isset($params['novalue']) ) $novalue = trim($params['novalue']);;

        if( !$thumbs ) $excludes[] = 'thumb_*';

        if( $dir != '' ) {
            $dir = trim($dir,'/');
            $dir = cms_join_path($config['uploads_path'],$dir);
        }
        else {
            $dir = $config['uploads_path'];
        }
        if( !is_dir($dir) ) return;

        $files = cge_dir::recursive_glob($dir,$pattern,'FILES',$excludes,$maxdepth);
        if( !is_array($files) || count($files) == 0 ) return;

        $out = array();
        foreach( $files as $one ) {
            if( $absolute ) {
                $out[$one] = $one;
            }
            else {
                $one = substr($one,strlen($dir));
                if( startswith($one,'/') ) $one = substr($one,1);
                $out[$one] = $one;
            }
        }

        if( $options ) {
            $tmp = $out;
            $out = '';
            if( $novalue != '' ) $out .= "<option value=\"\">".$novalue."</option>";
            foreach( $tmp as $k => $v ) {
                if( $k == $selected ) {
                    $out .= "<option selected=\"selected\" value=\"$k\">$v</option>";
                }
                else {
                    $out .= "<option value=\"$k\">$v</option>";
                }
            }
        }

        if( isset($params['assign']) ) {
            $smarty->assign(trim($params['assign']),$out);
            return;
        }

        return $out;
    }

    public static function cge_content_type($params,$smarty)
    {
        if( isset($params['type']) ) cmsms()->set_variable('content-type',trim($params['type']));
    }

    public static function cge_cached_url($params,$smarty)
    {
        $url = get_parameter_value($params,'url');
        $time = get_paremeter_value($params,'time',60);

        $obj = new cge_cached_remote_file($url,$time);
        $out = $obj->file_get_contents();
        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$out);
            return;
        }
        return $out;
    }

    public static function cge_message($params,$smarty)
    {
        $key = get_parameter_value($params,'key');
        if( $key ) {
            if( isset($params['value']) ) {
                $val = trim($params['value']);
                cge_message::set($key,$val);
            }
            else {
                $val = cge_message::get($key);
                if( isset($params['assign']) ) {
                    $smarty->assign($params['assign'],$val);
                    return;
                }
                return $val;
            }
        }
    }

    public static function cgjs_require($params,$smarty)
    {
        $lib = trim(cge_utils::get_param($params,'lib'));
        $cssname = trim(cge_utils::get_param($params,'cssname'));
        $cssfile = trim(cge_utils::get_param($params,'cssfile'));
        $jsfile = trim(cge_utils::get_param($params,'jsfile'));
        $depends = cge_utils::get_param($params,'depends');

        if( $lib ) {
            cge_jsloader::require_lib($lib);
        }
        else if( $jsfile ) {
            cge_jsloader::add_jsfile($jsfile,$depends);
        } else if( $cssfile ) {
            cge_jsloader::add_cssfile($cssfile,$depends);
        } else if( $cssname ) {
            cge_jsloader::require_css($cssname,$depends);
        }
    }

    public static function cgjs_add($params,$content,$smarty,$repeat)
    {
        if( $content == '' ) return;
        $depends = cge_utils::get_param($params,'depends');
        cge_jsloader::add_js($content,$depends);
    }

    public static function cgcss_add($params,$content,$smarty,$repeat)
    {
        if( $content == '' ) return;
        $depends = cge_utils::get_param($params,'depends');
        cge_jsloader::add_css($content,$depends);
    }

    public static function cgjs_render($params,$smarty)
    {
        $out = cge_jsloader::render($params);
        if( isset($params['assign']) ) {
            $smarty->assign($params['assign'],$out);
            return;
        }
        return $out;
    }

} // end of class

#
# EOF
#
?>

File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com