thomascube
2008-09-12 203ee44470707bfe3af16f4ff4146896fa94e140
program/include/rcube_template.php
@@ -39,6 +39,7 @@
    var $js_commands = array();
    var $object_handlers = array();
    public $type = 'html';
    public $ajax_call = false;
    /**
@@ -302,17 +303,13 @@
        $path = "$skin_path/templates/$name.html";
        // read template file
   if (($templ = file_get_contents($path)) === false) {
            ob_start();
            file_get_contents($path);
            $message = ob_get_contents();
            ob_end_clean();
        if (($templ = @file_get_contents($path)) === false) {
            raise_error(array(
                'code' => 501,
                'type' => 'php',
                'line' => __LINE__,
                'file' => __FILE__,
                'message' => 'Error loading template for '.$name.': '.$message
                'message' => 'Error loading template for '.$name
                ), true, true);
            return false;
        }
@@ -323,9 +320,9 @@
        // add debug console
        if ($this->config['debug_level'] & 8) {
            $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:400px;padding:0.2em;background:white;opacity:0.8;z-index:9000">
            $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;opacity:0.8;filter:alpha(opacity=80);z-index:9000">
                <a href="#toggle" onclick="con=document.getElementById(\'dbgconsole\');con.style.display=(con.style.display==\'none\'?\'block\':\'none\');return false">console</a>
                <form action="/" name="debugform"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>'
                <form action="/" name="debugform" style="display:inline"><textarea name="console" id="dbgconsole" rows="20" cols="40" wrap="off" style="display:none;width:400px;border:none;font-size:x-small"></textarea></form></div>'
            );
        }
        $output = $this->parse_with_globals($output);
@@ -480,11 +477,28 @@
     *
     * @param  string Input string to parse
     * @return string Altered input string
     * @todo   Use DOM-parser to traverse template HTML
     * @todo   Maybe a cache.
     */
    private function parse_xml($input)
    {
        return preg_replace('/<roundcube:([-_a-z]+)\s+([^>]+)>/Uie', "\$this->xml_command('\\1', '\\2')", $input);
        return preg_replace_callback('/<roundcube:([-_a-z]+)\s+([^>]+)>/Ui', array($this, 'xml_command_callback'), $input);
    }
    /**
     * This is a callback function for preg_replace_callback (see #1485286)
     * It's only purpose is to reconfigure parameters for xml_command, so that the signature isn't disturbed
     */
    private function xml_command_callback($matches)
    {
        $str_attrib = isset($matches[2]) ? $matches[2] : '';
        $add_attrib = isset($matches[3]) ? $matches[3] : array();
        $command = $matches[1];
        //matches[0] is the entire matched portion of the string
        return $this->xml_command($command, $str_attrib, $add_attrib);
    }
@@ -653,7 +667,7 @@
     * @todo   Remove all inline JS calls and use jQuery instead.
     * @todo   Remove all sprintf()'s - they are pretty, but also slow.
     */
    private function button($attrib)
    public function button($attrib)
    {
        static $sa_buttons = array();
        static $s_button_count = 100;
@@ -738,10 +752,13 @@
            // make valid href to specific buttons
            if (in_array($attrib['command'], rcmail::$main_tasks)) {
                $attrib['href'] = Q(rcmail_url(null, null, $attrib['command']));
                $attrib['href'] = rcmail_url(null, null, $attrib['command']);
            }
            else if (in_array($attrib['command'], $a_static_commands)) {
                $attrib['href'] = Q(rcmail_url($attrib['command']));
                $attrib['href'] = rcmail_url($attrib['command']);
            }
            else if ($attrib['command'] == 'permaurl' && !empty($this->env['permaurl'])) {
                $attrib['href'] = $this->env['permaurl'];
            }
        }
@@ -803,11 +820,11 @@
            if ($attrib['label']) {
                $btn_content .= ' '.$attrib['label'];
            }
            $link_attrib = array('href', 'onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'title');
            $link_attrib = array('href', 'onclick', 'onmouseover', 'onmouseout', 'onmousedown', 'onmouseup', 'title', 'target');
        }
        else if ($attrib['type']=='link') {
            $btn_content = $attrib['label'] ? $attrib['label'] : $attrib['command'];
            $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style', 'tabindex');
            $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style', 'tabindex', 'target');
        }
        else if ($attrib['type']=='input') {
            $attrib['type'] = 'button';
@@ -905,6 +922,7 @@
        $input_user   = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30) + $attrib);
        $input_pass   = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd', 'size' => 30) + $attrib);
        $input_action = new html_hiddenfield(array('name' => '_action', 'value' => 'login'));
        $input_tzone  = new html_hiddenfield(array('name' => '_timezone', 'id' => 'rcmlogintz', 'value' => '_default_'));
        $input_host   = null;
        if (is_array($default_host)) {
@@ -943,6 +961,7 @@
        }
        $out = $input_action->show();
        $out .= $input_tzone->show();
        $out .= $table->show();
        // surround html output with a form tag