thomascube
2009-07-16 7477973d931ffb816b2cbbad9c5bc06e3ef2ecd8
program/include/rcube_template.php
@@ -287,6 +287,11 @@
    public function send($templ = null, $exit = true)
    {
        if ($templ != 'iframe') {
            // prevent from endless loops
            if ($this->app->plugins->is_processing('render_page')) {
                raise_error(array('code' => 505, 'type' => 'php', 'message' => 'Recursion alert: ignoring output->send()'), true, false);
                return;
            }
            $this->parse($templ, false);
        }
        else {
@@ -294,6 +299,10 @@
            $this->write();
        }
        // set output asap
        ob_flush();
        flush();
        if ($exit) {
            exit;
        }
@@ -371,15 +380,19 @@
        // parse for specialtags
        $output = $this->parse_conditions($templ);
        $output = $this->parse_xml($output);
        // trigger generic hook where plugins can put additional content to the page
        $hook = $this->app->plugins->exec_hook("render_page", array('template' => $name, 'content' => $output));
        // add debug console
        if ($this->config['debug_level'] & 8) {
            $this->add_footer('<div style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;opacity:0.8;_filter:alpha(opacity=80);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)\";z-index:9000">
            $this->add_footer('<div id="console" style="position:absolute;top:5px;left:5px;width:405px;padding:2px;background:white;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" 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" spellcheck="false"></textarea></form></div>'
            );
        }
        $output = $this->parse_with_globals($output);
        $output = $this->parse_with_globals($hook['content']);
        $this->write(trim($output));
        if ($exit) {
            exit;
@@ -435,6 +448,7 @@
     */
    private function parse_with_globals($input)
    {
        $GLOBALS['__version'] = Q(RCMAIL_VERSION);
        $GLOBALS['__comm_path'] = Q($this->app->comm_path);
        return preg_replace('/\$(__[a-z0-9_\-]+)/e', '$GLOBALS["\\1"]', $input);
    }
@@ -911,7 +925,7 @@
     */
    public function form_tag($attrib, $content = null)
    {
      if ($this->framed) {
      if ($this->framed || !empty($_REQUEST['_framed'])) {
        $hiddenfield = new html_hiddenfield(array('name' => '_framed', 'value' => '1'));
        $hidden = $hiddenfield->show();
      }
@@ -921,7 +935,40 @@
      
      return html::tag('form',
        $attrib + array('action' => "./", 'method' => "get"),
        $hidden . $content);
        $hidden . $content,
        array('id','class','style','name','method','action','enctype','onsubmit'));
    }
    /**
     * Build a form tag with a unique request token
     *
     * @param array Named tag parameters including 'action' and 'task' values which will be put into hidden fields
     * @param string Form content
     * @return string HTML code for the form
     */
    public function request_form($attrib, $content = '')
    {
        $hidden = new html_hiddenfield();
        if ($attrib['task']) {
            $hidden->add(array('name' => '_task', 'value' => $attrib['task']));
        }
        if ($attrib['action']) {
            $hidden->add(array('name' => '_action', 'value' => $attrib['action']));
        }
        // generate request token
        $request_key = $attrib['request'] ? $attrib['request'] : $attrib['action'];
        $hidden->add(array('name' => '_token', 'value' => $this->app->get_request_token($request_key)));
        unset($attrib['task'], $attrib['request']);
        $attrib['action'] = './';
        // we already have a <form> tag
        if ($attrib['form'])
            return $hidden->show() . $content;
        else
            return $this->form_tag($attrib, $hidden->show() . $content);
    }
@@ -968,7 +1015,7 @@
        
        // save original url
        $url = get_input_value('_url', RCUBE_INPUT_POST);
        if (empty($url) && !preg_match('/_action=logout/', $_SERVER['QUERY_STRING']))
        if (empty($url) && !preg_match('/_(task|action)=logout/', $_SERVER['QUERY_STRING']))
            $url = $_SERVER['QUERY_STRING'];
        $input_user   = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30) + $attrib);