From 47d8d39cf49310b688967f7571b0d66b5971b39c Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Sun, 21 Feb 2010 11:44:39 -0500
Subject: [PATCH] Use rcmail::imap_connect() to establish IMAP connections; always initialize rcube_imap object in mail steps

---
 program/include/rcmail.php                            |   16 ++++++++++++----
 program/steps/mail/func.inc                           |    5 ++++-
 program/steps/settings/func.inc                       |    2 +-
 plugins/managesieve/managesieve.php                   |    2 +-
 program/steps/settings/manage_folders.inc             |    2 +-
 plugins/subscriptions_option/subscriptions_option.php |    2 +-
 6 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
index 07b3976..219c334 100644
--- a/plugins/managesieve/managesieve.php
+++ b/plugins/managesieve/managesieve.php
@@ -901,7 +901,7 @@
     $out .= '<select id="action_mailbox' .$id. '" name="_action_mailbox[]" style="display:' 
 	.(!isset($action) || $action['type']=='fileinto' ? 'inline' : 'none'). '">';
 
-    $this->rc->imap_init(true);
+    $this->rc->imap_connect();
 
     $a_folders = $this->rc->imap->list_mailboxes();
     $delimiter = $this->rc->imap->get_hierarchy_delimiter();
diff --git a/plugins/subscriptions_option/subscriptions_option.php b/plugins/subscriptions_option/subscriptions_option.php
index ecbc4e2..4d471b8 100644
--- a/plugins/subscriptions_option/subscriptions_option.php
+++ b/plugins/subscriptions_option/subscriptions_option.php
@@ -65,7 +65,7 @@
             // if the use_subscriptions preference changes, flush the folder cache
             if (($use_subscriptions && !isset($_POST['_use_subscriptions'])) ||
                 (!$use_subscriptions && isset($_POST['_use_subscriptions']))) {
-                    $rcmail->imap_init(true);
+                    $rcmail->imap_connect();
                     $rcmail->imap->clear_cache('mailboxes');
             }
         }
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index 5d20989..b0d130e 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -5,7 +5,7 @@
  | program/include/rcmail.php                                            |
  |                                                                       |
  | This file is part of the RoundCube Webmail client                     |
- | Copyright (C) 2008-2009, RoundCube Dev. - Switzerland                 |
+ | Copyright (C) 2008-2010, RoundCube Dev. - Switzerland                 |
  | Licensed under the GNU GPL                                            |
  |                                                                       |
  | PURPOSE:                                                              |
@@ -374,6 +374,10 @@
    */
   public function imap_init($connect = false)
   {
+    // already initialized
+    if (is_object($this->imap))
+      return;
+      
     $this->imap = new rcube_imap($this->db);
     $this->imap->debug_level = $this->config->get('debug_level');
     $this->imap->skip_deleted = $this->config->get('skip_deleted');
@@ -404,9 +408,13 @@
     $hook = $this->plugins->exec_hook('imap_init', array('fetch_headers' => $this->imap->fetch_add_headers));
     if ($hook['fetch_headers'])
       $this->imap->fetch_add_headers = $hook['fetch_headers'];
-				        
-    if ($connect)
+    
+    // support this parameter for backward compatibility but log warning
+    if ($connect) {
       $this->imap_connect();
+      raise_error(array('code' => 800, 'type' => 'imap', 'file' => __FILE__,
+        'message' => "rcube::imap_init(true) is deprecated, use rcube::imap_connect() instead"), true, false);
+    }
   }
 
 
@@ -841,7 +849,7 @@
       if (!$this->authenticate_session())
         return;
 
-      $this->imap_init(true);
+      $this->imap_connect();
     }
 
     if ($config['logout_purge'] && !empty($config['trash_mbox'])) {
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index f522d0d..da21220 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -5,7 +5,7 @@
  | program/steps/mail/func.inc                                           |
  |                                                                       |
  | This file is part of the RoundCube Webmail client                     |
- | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland                 |
+ | Copyright (C) 2005-2010, RoundCube Dev. - Switzerland                 |
  | Licensed under the GNU GPL                                            |
  |                                                                       |
  | PURPOSE:                                                              |
@@ -24,6 +24,9 @@
 // actions that do not require imap connection
 $NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment');
 
+// always instantiate imap object (but not yet connect to server)
+$RCMAIL->imap_init();
+
 // log in to imap server
 if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) {
   $RCMAIL->kill_session();
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index a2175b0..094fa59 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -509,7 +509,7 @@
 
     // Configure special folders
     if (!isset($no_override['default_imap_folders'])) {
-      $RCMAIL->imap_init(true);
+      $RCMAIL->imap_connect();
       $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true,
         'maxlength' => 30, 'exceptions' => array('INBOX')));
 
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
index 22bd158..06fee7a 100644
--- a/program/steps/settings/manage_folders.inc
+++ b/program/steps/settings/manage_folders.inc
@@ -22,7 +22,7 @@
 // WARNING: folder names in UI are encoded with RCMAIL_CHARSET
 
 // init IMAP connection
-$RCMAIL->imap_init(true);
+$RCMAIL->imap_connect();
 
 // subscribe to one or more mailboxes
 if ($RCMAIL->action=='subscribe')

--
Gitblit v1.9.1