summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--index.php8
-rw-r--r--program/include/rcmail.php25
-rw-r--r--program/include/rcube_plugin_api.php9
-rw-r--r--program/steps/mail/func.inc5
4 files changed, 22 insertions, 25 deletions
diff --git a/index.php b/index.php
index 7251b533c..dc6bfd40b 100644
--- a/index.php
+++ b/index.php
@@ -30,15 +30,9 @@
// include environment
require_once 'program/include/iniset.php';
-// init application and start session with requested task
+// init application, start session, init output class, etc.
$RCMAIL = rcmail::get_instance();
-// init output class
-$OUTPUT = !empty($_REQUEST['_remote']) ? $RCMAIL->init_json() : $RCMAIL->load_gui(!empty($_REQUEST['_framed']));
-
-// init plugin API
-$RCMAIL->plugins->init();
-
// turn on output buffering
ob_start();
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index cd6187281..68ab5004c 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -130,12 +130,17 @@ class rcmail
// set current task to session
$_SESSION['task'] = $this->task;
- // create IMAP object
- if ($this->task == 'login')
- $this->imap_init();
-
+ // init output class
+ if (!empty($_REQUEST['_remote']))
+ $GLOBALS['OUTPUT'] = $this->init_json();
+ else
+ $GLOBALS['OUTPUT'] = $this->load_gui(!empty($_REQUEST['_framed']));
+
// create plugin API and load plugins
$this->plugins = rcube_plugin_api::get_instance();
+
+ // init plugins
+ $this->plugins->init();
}
@@ -395,7 +400,11 @@ class rcmail
// set global object for backward compatibility
$GLOBALS['IMAP'] = $this->imap;
-
+
+ $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)
$this->imap_connect();
}
@@ -409,6 +418,9 @@ class rcmail
public function imap_connect()
{
$conn = false;
+
+ if (!$this->imap)
+ $this->imap_init();
if ($_SESSION['imap_host'] && !$this->imap->conn) {
if (!($conn = $this->imap->connect($_SESSION['imap_host'], $_SESSION['username'], $this->decrypt($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']))) {
@@ -494,6 +506,9 @@ class rcmail
if ($user = rcube_user::query($username, $host))
$username = $user->data['username'];
+ if (!$this->imap)
+ $this->imap_init();
+
// exit if IMAP login failed
if (!($imap_login = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl)))
return false;
diff --git a/program/include/rcube_plugin_api.php b/program/include/rcube_plugin_api.php
index b19c0a3f4..c895578b9 100644
--- a/program/include/rcube_plugin_api.php
+++ b/program/include/rcube_plugin_api.php
@@ -150,15 +150,6 @@ class rcube_plugin_api
$this->register_hook('template_container', array($this, 'template_container_hook'));
// maybe also register a shudown function which triggers shutdown functions of all plugin objects
-
-
- // call imap_init right now
- // (should actually be done in rcmail::imap_init() but plugins are not initialized then)
- if ($rcmail->imap) {
- $hook = $this->exec_hook('imap_init', array('fetch_headers' => $rcmail->imap->fetch_add_headers));
- if ($hook['fetch_headers'])
- $rcmail->imap->fetch_add_headers = $hook['fetch_headers'];
- }
}
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 73919d3aa..f522d0dc3 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -24,9 +24,6 @@ $EMAIL_ADDRESS_PATTERN = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9][a-z0-9\-\.]*\\.[a-
// actions that do not require imap connection
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload', 'display-attachment', 'remove-attachment');
-// Init IMAP object
-$RCMAIL->imap_init();
-
// log in to imap server
if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) {
$RCMAIL->kill_session();
@@ -42,7 +39,7 @@ if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) {
// set imap properties and session vars
if ($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC))
$IMAP->set_mailbox(($_SESSION['mbox'] = $mbox));
-else
+else if ($IMAP)
$_SESSION['mbox'] = $IMAP->get_mailbox_name();
if (!empty($_GET['_page']))