From 83a7636872d58f044d1fac444268dd2e7c7ebaee Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sat, 14 Jun 2008 08:23:08 -0400
Subject: [PATCH] More code cleanup

---
 program/include/rcube_template.php |  117 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 64 insertions(+), 53 deletions(-)

diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 2002a62..5834e42 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -30,8 +30,8 @@
  */
 class rcube_template extends rcube_html_page
 {
+    var $app;
     var $config;
-    var $task = '';
     var $framed = false;
     var $pagetitle = '';
     var $env = array();
@@ -45,13 +45,17 @@
      * Constructor
      *
      * @todo   Use jQuery's $(document).ready() here.
+     * @todo   Replace $this->config with the real rcube_config object
      */
-    public function __construct(&$config, $task)
+    public function __construct($task, $framed = false)
     {
         parent::__construct();
 
-        $this->task = $task;
-        $this->config = $config;
+        $this->app = rcmail::get_instance();
+        $this->config = $this->app->config->all();
+        
+        //$this->framed = $framed;
+        $this->set_env('task', $task);
 
         // add common javascripts
         $javascript = 'var '.JS_OBJECT_NAME.' = new rcube_webmail();';
@@ -263,7 +267,7 @@
             fopen($path, 'r');
             $message.= ob_get_contents();
             ob_end_clean();
-            rcube_error::raise(array(
+            raise_error(array(
                 'code' => 501,
                 'type' => 'php',
                 'line' => __LINE__,
@@ -348,7 +352,7 @@
      */
     private function parse_with_globals($input)
     {
-        $GLOBALS['__comm_path'] = Q($GLOBALS['COMM_PATH']);
+        $GLOBALS['__comm_path'] = Q($this->app->comm_path);
         return preg_replace('/\$(__[a-z0-9_\-]+)/e', '$GLOBALS["\\1"]', $input);
     }
 
@@ -391,7 +395,7 @@
                 }
                 return $matches[0] . $this->parse_conditions($result);
             }
-            rcube_error::raise(array(
+            raise_error(array(
                 'code' => 500,
                 'type' => 'php',
                 'line' => __LINE__,
@@ -467,7 +471,7 @@
         switch ($command) {
             // return a button
             case 'button':
-                if ($attrib['command']) {
+                if ($attrib['name'] || $attrib['command']) {
                     return $this->button($attrib);
                 }
                 break;
@@ -529,10 +533,15 @@
                     return Q($name);
                 }
                 if ($object=='version') {
-                    return (string)RCMAIL_VERSION;
+                    $ver = (string)RCMAIL_VERSION;
+                    if (is_file(INSTALL_PATH . '.svn/entries')) {
+                        if (preg_match('/Revision:\s(\d+)/', @shell_exec('svn info'), $regs))
+                          $ver .= ' [SVN r'.$regs[1].']';
+                    }
+                    return $ver;
                 }
                 if ($object=='pagetitle') {
-                    $task  = $this->task;
+                    $task  = $this->env['task'];
                     $title = !empty($this->config['product_name']) ? $this->config['product_name'].' :: ' : '';
 
                     if (!empty($this->pagetitle)) {
@@ -599,7 +608,6 @@
         return $out;
     }
 
-
     /**
      * Create and register a button
      *
@@ -610,19 +618,18 @@
      */
     private function button($attrib)
     {
-        global $CONFIG, $OUTPUT, $MAIN_TASKS;
         static $sa_buttons = array();
         static $s_button_count = 100;
 
         // these commands can be called directly via url
         $a_static_commands = array('compose', 'list');
 
-        $browser   = new rcube_browser();
-        $skin_path = $this->config['skin_path'];
-
         if (!($attrib['command'] || $attrib['name'])) {
             return '';
         }
+
+        $browser   = new rcube_browser();
+
         // try to find out the button type
         if ($attrib['type']) {
             $attrib['type'] = strtolower($attrib['type']);
@@ -687,13 +694,13 @@
                 $command,
                 $attrib['id'],
                 $attrib['type'],
-                $attrib['imageact'] ? $skin_path.$attrib['imageact'] : $attrib['classact'],
-                $attrib['imagesel'] ? $skin_path.$attrib['imagesel'] : $attrib['classsel'],
-                $attrib['imageover'] ? $skin_path.$attrib['imageover'] : ''
+                $attrib['imageact'] ? $this->abs_url($attrib['imageact']) : $attrib['classact'],
+                $attrib['imagesel'] ? $this->abs_url($attrib['imagesel']) : $attrib['classsel'],
+                $attrib['imageover'] ? $this->abs_url($attrib['imageover']) : ''
             ));
 
             // make valid href to specific buttons
-            if (in_array($attrib['command'], $MAIN_TASKS)) {
+            if (in_array($attrib['command'], rcmail::$main_tasks)) {
                 $attrib['href'] = Q(rcmail_url(null, null, $attrib['command']));
             }
             else if (in_array($attrib['command'], $a_static_commands)) {
@@ -752,11 +759,10 @@
                 array(
                     'style', 'class', 'id', 'width',
                     'height', 'border', 'hspace',
-                    'vspace', 'align', 'alt',
+                    'vspace', 'align', 'alt', 'tabindex'
                 )
             );
-            $img_tag = sprintf('<img src="%%s"%s />', $attrib_str);
-            $btn_content = sprintf($img_tag, $skin_path.$attrib['image']);
+            $btn_content = sprintf('<img src="%s"%s />', $this->abs_url($attrib['image']), $attrib_str);
             if ($attrib['label']) {
                 $btn_content .= ' '.$attrib['label'];
             }
@@ -764,7 +770,7 @@
         }
         else if ($attrib['type']=='link') {
             $btn_content = $attrib['label'] ? $attrib['label'] : $attrib['command'];
-            $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style');
+            $link_attrib = array('href', 'onclick', 'title', 'id', 'class', 'style', 'tabindex');
         }
         else if ($attrib['type']=='input') {
             $attrib['type'] = 'button';
@@ -777,7 +783,7 @@
                 $attrib,
                 array(
                     'type', 'value', 'onclick',
-                    'id', 'class', 'style'
+                    'id', 'class', 'style', 'tabindex'
                 )
             );
             $out = sprintf('<input%s disabled="disabled" />', $attrib_str);
@@ -797,15 +803,36 @@
 
 
     /**
+     * Create a form tag with the necessary hidden fields
+     *
+     * @param array Named tag parameters
+     * @return string HTML code for the form
+     */
+    public function form_tag($attrib, $content = null)
+    {
+      if ($this->framed) {
+        $hiddenfield = new html_hiddenfield(array('name' => '_framed', 'value' => '1'));
+        $hidden = $hiddenfield->show();
+      }
+      
+      if (!$content)
+        $attrib['noclose'] = true;
+      
+      return html::tag('form',
+        $attrib + array('action' => "./", 'method' => "get"),
+        $hidden . $content);
+    }
+
+
+    /**
      * GUI object 'username'
      * Showing IMAP username of the current session
      *
      * @param array Named tag parameters (currently not used)
      * @return string HTML code for the gui object
      */
-    static function current_username($attrib)
+    public function current_username($attrib)
     {
-        global $USER;
         static $username;
 
         // alread fetched
@@ -814,14 +841,11 @@
         }
 
         // get e-mail address form default identity
-        if ($sql_arr = $USER->get_identity()) {
-          $s_username = $sql_arr['email'];
-        }
-        else if (strstr($_SESSION['username'], '@')) {
-            $username = $_SESSION['username'];
+        if ($sql_arr = $this->app->user->get_identity()) {
+            $username = $sql_arr['email'];
         }
         else {
-            $username = $_SESSION['username'].'@'.$_SESSION['imap_host'];
+            $username = $this->app->user->get_username();
         }
 
         return $username;
@@ -837,8 +861,7 @@
      */
     private function login_form($attrib)
     {
-        global $CONFIG, $SESS_HIDDEN_FIELD;
-        $default_host = $CONFIG['default_host'];
+        $default_host = $this->config['default_host'];
 
         $_SESSION['temp'] = true;
 
@@ -882,20 +905,12 @@
             $table->add(null, $input_host->show(get_input_value('_host', RCUVE_INPUT_POST)));
         }
 
-        $out = $SESS_HIDDEN_FIELD;
-        $out .= $input_action->show();
+        $out = $input_action->show();
         $out .= $table->show();
 
         // surround html output with a form tag
         if (empty($attrib['form'])) {
-            $out = html::tag(
-                'form',
-                array(
-                    'name' => $form_name,
-                    'action' => "./",
-                    'method' => "post"
-                ),
-            $out);
+            $out = $this->form_tag(array('name' => $form_name, 'method' => "post"), $out);
         }
 
         return $out;
@@ -926,15 +941,11 @@
 
         // add form tag around text field
         if (empty($attrib['form'])) {
-            $out = html::tag(
-                'form',
-                array(
-                    'name' => "rcmqsearchform",
-                    'action' => "./",
-                    'onsubmit' => JS_OBJECT_NAME . ".command('search');return false;",
-                    'style' => "display:inline",
-                ),
-            $out);
+            $out = $this->form_tag(array(
+                'name' => "rcmqsearchform",
+                'onsubmit' => JS_OBJECT_NAME . ".command('search');return false;",
+                'style' => "display:inline"),
+              $out);
         }
 
         return $out;

--
Gitblit v1.9.1