diff --git a/emailadmin/inc/class.emailadmin_bo.inc.php b/emailadmin/inc/class.emailadmin_bo.inc.php index 64db84513d..3fa170400d 100644 --- a/emailadmin/inc/class.emailadmin_bo.inc.php +++ b/emailadmin/inc/class.emailadmin_bo.inc.php @@ -214,16 +214,35 @@ ), ); - if ($_restoreSesssion && !(is_array($this->sessionData) && (count($this->sessionData)>0)) ) $this->restoreSessionData(); - #_debug_array($this->sessionData); + if ($_restoreSesssion && !(is_array($this->sessionData) && (count($this->sessionData)>0)) ) + { + $this->restoreSessionData(); + } + if ($_restoreSesssion===false && (is_array($this->sessionData) && (count($this->sessionData)>0)) ) + { + // make sure session data will be created new + $this->sessionData = array(); + self::saveSessionData(); + } + #_debug_array($this->sessionData); if($_profileID >= 0) { $this->profileID = $_profileID; - + $this->profileData = $this->getProfile($_profileID); - - $this->imapClass =& CreateObject('emailadmin.'.$this->IMAPServerType[$this->profileData['imapType']]['classname']); - $this->smtpClass =& CreateObject('emailadmin.'.$this->SMTPServerType[$this->profileData['smtpType']]['classname']); + + // try autoloading class, if that fails include it from emailadmin + if (!class_exists($class = $this->IMAPServerType[$this->profileData['imapType']]['classname'])) + { + include_once(EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php'); + } + $this->imapClass = new $class; + + if (!class_exists($class = $this->SMTPServerType[$this->profileData['smtpType']]['classname'])) + { + include_once(EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php'); + } + $this->smtpClass = new $class; } } @@ -578,10 +597,24 @@ function restoreSessionData() { + $GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload'); + //echo function_backtrace()."
"; //unserializing the sessiondata, since they are serialized for objects sake $this->sessionData = (array) unserialize($GLOBALS['egw']->session->appsession('session_data','emailadmin')); - #$this->userSessionData = $GLOBALS['egw']->session->appsession('user_session_data','emailadmin'); + } + + /** + * Autoload classes from emailadmin, 'til they get autoloading conform names + * + * @param string $class + */ + static function autoload($class) + { + if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php')) + { + include_once($file); + } } function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy) diff --git a/felamimail/inc/class.bofelamimail.inc.php b/felamimail/inc/class.bofelamimail.inc.php index 44678b8bcb..be0e01bb19 100644 --- a/felamimail/inc/class.bofelamimail.inc.php +++ b/felamimail/inc/class.bofelamimail.inc.php @@ -62,17 +62,50 @@ */ var $autoFolders = array('Drafts', 'Junk', 'Sent', 'Trash', 'Templates'); - function bofelamimail($_displayCharset='iso-8859-1') + /** + * Autoload classes from emailadmin, 'til they get autoloading conform names + * + * @param string $class + */ + static function autoload($class) { - $this->restoreSessionData(); + if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php')) + { + include_once($file); + //error_log(__METHOD__."($class) included $file"); + } + elseif (file_exists($file=EGW_INCLUDE_ROOT.'/felamimail/inc/class.'.$class.'.inc.php')) + { + include_once($file); + } + else + { + #error_log(__METHOD__."($class) failed!"); + } + } + + function bofelamimail($_displayCharset='iso-8859-1',$_restoreSession=true) + { + if ($_restoreSession) + { + //error_log(__METHOD__." Session restore ".function_backtrace()); + $this->restoreSessionData(); + } + else + { + $this->restoreSessionData(); + $lv_mailbox = $this->sessionData['mailbox']; + $this->sessionData = array(); + $this->forcePrefReload(); + } // FIXME: this->foldername seems to be unused //$this->foldername = $this->sessionData['mailbox']; $this->accountid = $GLOBALS['egw_info']['user']['account_id']; - $this->bopreferences =& CreateObject('felamimail.bopreferences'); - $this->sofelamimail =& CreateObject('felamimail.sofelamimail'); - self::$botranslation =& CreateObject('phpgwapi.translation'); + $this->bopreferences = CreateObject('felamimail.bopreferences',$_restoreSession); + $this->sofelamimail = CreateObject('felamimail.sofelamimail'); + self::$botranslation = CreateObject('phpgwapi.translation'); $this->mailPreferences = $this->bopreferences->getPreferences(); if ($this->mailPreferences) { @@ -95,7 +128,7 @@ // no filter active $this->sessionData['activeFilter'] = "-1"; // default mailbox INBOX - $this->sessionData['mailbox'] = "INBOX"; + $this->sessionData['mailbox'] = (($lv_mailbox && self::folderExists($lv_mailbox,true)) ? $lv_mailbox : "INBOX"); // default start message $this->sessionData['startMessage'] = 1; // default mailbox for preferences pages @@ -151,6 +184,13 @@ } + function forcePrefReload() + { + // unset the fm_preferences session object, to force the reload/rebuild + $GLOBALS['egw']->session->appsession('fm_preferences','felamimail',serialize(array())); + $GLOBALS['egw']->session->appsession('session_data','emailadmin',serialize(array())); + } + function setACL($_folderName, $_accountName, $_acl) { if ( PEAR::isError($this->icServer->setACL($_folderName, $_accountName, $_acl)) ) { @@ -2463,6 +2503,8 @@ function restoreSessionData() { + $GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload'); + $this->sessionData = $GLOBALS['egw']->session->appsession('session_data','felamimail'); } diff --git a/felamimail/inc/class.bopreferences.inc.php b/felamimail/inc/class.bopreferences.inc.php index 185bc8bcd2..b8221bb630 100644 --- a/felamimail/inc/class.bopreferences.inc.php +++ b/felamimail/inc/class.bopreferences.inc.php @@ -25,24 +25,64 @@ // stores the users profile var $profileData; var $sessionData; - - function bopreferences() + var $boemailadmin; + + function bopreferences($_restoreSession = true) { + //error_log(__METHOD__." called ".print_r($_restoreSession,true).function_backtrace()); parent::sopreferences(); - $this->boemailadmin = new emailadmin_bo(); - if ( !(is_array($this->sessionData) && (count($this->sessionData)>0)) ) $this->restoreSessionData(); + $this->boemailadmin = new emailadmin_bo(-1,$_restoreSession); + if ($_restoreSession && !(is_array($this->sessionData) && (count($this->sessionData)>0)) ) $this->restoreSessionData(); + if ($_restoreSession===false && (is_array($this->sessionData) && (count($this->sessionData)>0)) ) + { + //error_log(__METHOD__." Unset Session ".function_backtrace()); + //make sure session data will be reset + $this->sessionData = array(); + $this->profileData = array(); + self::saveSessionData(); + } + //error_log(__METHOD__.print_r($this->sessionData,true)); if (isset($this->sessionData['profileData']) && is_a($this->sessionData['profileData'],'ea_preferences')) { $this->profileData = $this->sessionData['profileData']; } } + function restoreSessionData() { + //error_log(__METHOD__." Session restore ".function_backtrace()); + // set an own autoload function, search emailadmin for missing classes + $GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload'); + $this->sessionData = (array) unserialize($GLOBALS['egw']->session->appsession('fm_preferences','felamimail')); } + + /** + * Autoload classes from emailadmin, 'til they get autoloading conform names + * + * @param string $class + */ + static function autoload($class) + { + if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php')) + { + include_once($file); + //error_log(__METHOD__."($class) included $file"); + } + elseif (file_exists($file=EGW_INCLUDE_ROOT.'/felamimail/inc/class.'.$class.'.inc.php')) + { + include_once($file); + } + else + { + #error_log(__METHOD__."($class) failed!"); + } + } + function saveSessionData() { $GLOBALS['egw']->session->appsession('fm_preferences','felamimail',serialize($this->sessionData)); } + // get the first active user defined account function getAccountData(&$_profileData, $_accountID=NULL) { diff --git a/felamimail/inc/class.bosieve.inc.php b/felamimail/inc/class.bosieve.inc.php index 7fd94a863d..7de2ecbe75 100644 --- a/felamimail/inc/class.bosieve.inc.php +++ b/felamimail/inc/class.bosieve.inc.php @@ -150,7 +150,8 @@ function async_vacation($_vacation) { if ($this->debug) error_log(__CLASS__.'::'.__METHOD__.'('.print_r($_vacation,true).')'); - $bopreferences =& CreateObject('felamimail.bopreferences'); + $_restoreSession = false; // as in async, each call may be for a different user + $bopreferences = CreateObject('felamimail.bopreferences',$_restoreSession); $mailPreferences = $bopreferences->getPreferences(); $icServer = $mailPreferences->getIncomingServer(0); diff --git a/felamimail/inc/class.uifelamimail.inc.php b/felamimail/inc/class.uifelamimail.inc.php index 52ea623170..eab5fd51d3 100644 --- a/felamimail/inc/class.uifelamimail.inc.php +++ b/felamimail/inc/class.uifelamimail.inc.php @@ -45,10 +45,10 @@ $this->timeCounter = microtime(true); $this->displayCharset = $GLOBALS['egw']->translation->charset(); - $this->bofelamimail =& CreateObject('felamimail.bofelamimail',$this->displayCharset); + $this->bofelamimail = CreateObject('felamimail.bofelamimail',$this->displayCharset,false); - $this->bofilter =& CreateObject('felamimail.bofilter'); - $this->bopreferences =& CreateObject('felamimail.bopreferences'); + $this->bofilter = CreateObject('felamimail.bofilter'); + $this->bopreferences =& $this->bofelamimail->bopreferences; //CreateObject('felamimail.bopreferences'); $this->preferences = $this->bopreferences->getPreferences(); $this->botranslation =& CreateObject('phpgwapi.translation');