thomascube
2010-06-08 af3cf8a0a7de74ab169f44277eda73f5f9e18cd7
program/include/rcube_template.php
@@ -5,7 +5,7 @@
 | program/include/rcube_template.php                                    |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2006-2009, RoundCube Dev. - Switzerland                 |
 | Copyright (C) 2006-2010, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
@@ -80,6 +80,7 @@
        // register common UI objects
        $this->add_handlers(array(
            'loginform'       => array($this, 'login_form'),
            'preloader'       => array($this, 'preloader'),
            'username'        => array($this, 'current_username'),
            'message'         => array($this, 'message_container'),
            'charsetselector' => array($this, 'charset_selector'),
@@ -535,7 +536,7 @@
    
    
    /**
     *
     * Inserts hidden field with CSRF-prevention-token into POST forms
     */
    private function alter_form_tag($matches)
    {
@@ -769,7 +770,6 @@
     */
    public function button($attrib)
    {
        static $sa_buttons = array();
        static $s_button_count = 100;
        // these commands can be called directly via url
@@ -786,25 +786,14 @@
        else {
            $attrib['type'] = ($attrib['image'] || $attrib['imagepas'] || $attrib['imageact']) ? 'image' : 'link';
        }
        $command = $attrib['command'];
        // take the button from the stack
        if ($attrib['name'] && $sa_buttons[$attrib['name']]) {
            $attrib = $sa_buttons[$attrib['name']];
        }
        else if($attrib['image'] || $attrib['imageact'] || $attrib['imagepas'] || $attrib['class']) {
            // add button to button stack
            if (!$attrib['name']) {
                $attrib['name'] = $command;
            }
            if (!$attrib['image']) {
                $attrib['image'] = $attrib['imagepas'] ? $attrib['imagepas'] : $attrib['imageact'];
            }
            $sa_buttons[$attrib['name']] = $attrib;
        }
        else if ($command && $sa_buttons[$command]) {
            // get saved button for this command/name
            $attrib = $sa_buttons[$command];
        if ($attrib['task'])
          $command = $attrib['task'] . '.' . $command;
        if (!$attrib['image']) {
            $attrib['image'] = $attrib['imagepas'] ? $attrib['imagepas'] : $attrib['imageact'];
        }
        if (!$attrib['id']) {
@@ -848,6 +837,9 @@
            if (in_array($attrib['command'], rcmail::$main_tasks)) {
                $attrib['href'] = rcmail_url(null, null, $attrib['command']);
            }
            else if ($attrib['task'] && in_array($attrib['task'], rcmail::$main_tasks)) {
                $attrib['href'] = rcmail_url($attrib['command'], null, $attrib['task']);
            }
            else if (in_array($attrib['command'], $a_static_commands)) {
                $attrib['href'] = rcmail_url($attrib['command']);
            }
@@ -860,7 +852,11 @@
        if (!$attrib['href']) {
            $attrib['href'] = '#';
        }
        if ($command) {
        if ($attrib['task']) {
            if ($attrib['classact'])
                $attrib['class'] = $attrib['classact'];
        }
        else if ($command && !$attrib['onclick']) {
            $attrib['onclick'] = sprintf(
                "return %s.command('%s','%s',this)",
                JS_OBJECT_NAME,
@@ -1023,7 +1019,7 @@
        $input_url    = new html_hiddenfield(array('name' => '_url', 'id' => 'rcmloginurl', 'value' => $url));
        $input_host   = null;
        if (is_array($default_host)) {
        if (is_array($default_host) && count($default_host) > 1) {
            $input_host = new html_select(array('name' => '_host', 'id' => 'rcmloginhost'));
            foreach ($default_host as $key => $value) {
@@ -1035,6 +1031,11 @@
                    break;
                }
            }
        }
        else if (is_array($default_host) && ($host = array_pop($default_host))) {
            $hide_host = true;
            $input_host = new html_hiddenfield(array(
                'name' => '_host', 'id' => 'rcmloginhost', 'value' => $host) + $attrib);
        }
        else if (empty($default_host)) {
            $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost') + $attrib);
@@ -1053,7 +1054,7 @@
        $table->add(null, $input_pass->show());
        // add host selection row
        if (is_object($input_host)) {
        if (is_object($input_host) && !$hide_host) {
            $table->add('title', html::label('rcmloginhost', Q(rcube_label('server'))));
            $table->add(null, $input_host->show(get_input_value('_host', RCUBE_INPUT_POST)));
        }
@@ -1062,13 +1063,41 @@
        $out .= $input_tzone->show();
        $out .= $input_url->show();
        $out .= $table->show();
        if ($hide_host) {
            $out .= $input_host->show();
        }
        // surround html output with a form tag
        if (empty($attrib['form'])) {
            $out = $this->form_tag(array('name' => $form_name, 'method' => "post"), $out);
            $out = $this->form_tag(array('name' => $form_name, 'method' => 'post'), $out);
        }
        return $out;
    }
    /**
     * GUI object 'preloader'
     * Loads javascript code for images preloading
     *
     * @param array Named parameters
     * @return void
     */
    private function preloader($attrib)
    {
        $images = preg_split('/[\s\t\n,]+/', $attrib['images'], -1, PREG_SPLIT_NO_EMPTY);
        $images = array_map(array($this, 'abs_url'), $images);
        if (empty($images) || $this->app->task == 'logout')
            return;
        $this->add_script('$(document).ready(function(){
            var images = ' . json_serialize($images) .';
            for (var i=0; i<images.length; i++) {
                img = new Image();
                img.src = images[i];
            }});', 'foot');
    }
@@ -1090,7 +1119,7 @@
            $attrib['id'] = 'rcmqsearchbox';
        }
        if ($attrib['type'] == 'search' && !$this->browser->khtml) {
          unset($attrib['type'], $attrib['results']);
            unset($attrib['type'], $attrib['results']);
        }
        
        $input_q = new html_inputfield($attrib);
@@ -1104,7 +1133,7 @@
                'name' => "rcmqsearchform",
                'onsubmit' => JS_OBJECT_NAME . ".command('search');return false;",
                'style' => "display:inline"),
              $out);
                $out);
        }
        return $out;
@@ -1181,15 +1210,15 @@
        );
        if (!empty($_POST['_charset']))
       $set = $_POST['_charset'];
   else if (!empty($attrib['selected']))
       $set = $attrib['selected'];
   else
       $set = $this->get_charset();
           $set = $_POST['_charset'];
       else if (!empty($attrib['selected']))
           $set = $attrib['selected'];
       else
           $set = $this->get_charset();
   $set = strtoupper($set);
   if (!isset($charsets[$set]))
       $charsets[$set] = $set;
       $set = strtoupper($set);
       if (!isset($charsets[$set]))
           $charsets[$set] = $set;
        $select = new html_select($field_attrib);
        $select->add(array_values($charsets), array_keys($charsets));