mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 16:48:49 +01:00
Avoid to call mail constructor (openConnection is an expensive operation) when client-side ask for vacationNotice.
-Check if there's no vacation cached then create mail object (try openConnection) and ask for vacation -Add account_lid to cached vacations to distinguished them in case if the mail account was a shared profile
This commit is contained in:
parent
f22b156f21
commit
cb093e7266
@ -621,7 +621,10 @@ class mail_sieve
|
|||||||
self::setAsyncJob($newVacation);
|
self::setAsyncJob($newVacation);
|
||||||
}
|
}
|
||||||
//Reset vacationNotice cache which is used in mail_ui get_rows
|
//Reset vacationNotice cache which is used in mail_ui get_rows
|
||||||
egw_cache::unsetCache(egw_cache::INSTANCE,'email', 'vacationNotice'+$icServer->acc_id);
|
$cachedVacations = egw_cache::getCache(egw_cache::INSTANCE, 'email', 'vacationNotice'+$GLOBALS['egw_info']['user']['account_lid']);
|
||||||
|
$cachedVacations = array($icServer->acc_id => $newVacation) + (array)$cachedVacations;
|
||||||
|
egw_cache::setCache(egw_cache::INSTANCE,'email', 'vacationNotice'+$GLOBALS['egw_info']['user']['account_lid'], $cachedVacations);
|
||||||
|
|
||||||
$msg = lang('Vacation notice sucessfully updated.');
|
$msg = lang('Vacation notice sucessfully updated.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2284,32 +2284,25 @@ class mail_ui
|
|||||||
/**
|
/**
|
||||||
* fetch vacation info from active Server using icServer object
|
* fetch vacation info from active Server using icServer object
|
||||||
*
|
*
|
||||||
|
* @param array $cachedVacations an array of cached vacations for an user
|
||||||
* @return array|boolean array with vacation on success or false on failure
|
* @return array|boolean array with vacation on success or false on failure
|
||||||
*/
|
*/
|
||||||
function gatherVacation()
|
function gatherVacation($cachedVacations = array())
|
||||||
{
|
{
|
||||||
$vacation = $this->mail_bo->icServer->acc_sieve_enabled && ($this->mail_bo->icServer->acc_sieve_host||$this->mail_bo->icServer->acc_imap_host);
|
$isVacationEnabled = $this->mail_bo->icServer->acc_sieve_enabled && ($this->mail_bo->icServer->acc_sieve_host||$this->mail_bo->icServer->acc_imap_host);
|
||||||
//error_log(__METHOD__.__LINE__.' Server:'.self::$icServerID.' Sieve Enabled:'.array2string($vacation));
|
//error_log(__METHOD__.__LINE__.' Server:'.self::$icServerID.' Sieve Enabled:'.array2string($vacation));
|
||||||
|
|
||||||
if ($vacation)
|
if ($isVacationEnabled)
|
||||||
{
|
{
|
||||||
$sieveServer = $this->mail_bo->icServer;
|
$sieveServer = $this->mail_bo->icServer;
|
||||||
try
|
try
|
||||||
{
|
|
||||||
//Get vacation from cache if it's available
|
|
||||||
$vacationCached = egw_cache::getCache(egw_cache::INSTANCE, 'email', 'vacationNotice'+$sieveServer->acc_id);
|
|
||||||
|
|
||||||
if (!$vacationCached)
|
|
||||||
{
|
{
|
||||||
$sieveServer->retrieveRules();
|
$sieveServer->retrieveRules();
|
||||||
$vacation = $sieveServer->getVacation();
|
$vacation = $sieveServer->getVacation();
|
||||||
// Set vacation to the instance cache for particular account
|
|
||||||
egw_cache::setCache(egw_cache::INSTANCE, 'email', 'vacationNotice'+$sieveServer->acc_id, $vacation);
|
$cachedVacations = array($sieveServer->acc_id => $vacation) + $cachedVacations;
|
||||||
}
|
// Set vacation to the instance cache for particular account with expiration of one day
|
||||||
else
|
egw_cache::setCache(egw_cache::INSTANCE, 'email', 'vacationNotice'+$GLOBALS['egw_info']['user']['account_lid'], $cachedVacations, 60*60*24);
|
||||||
{
|
|
||||||
return $vacationCached;
|
|
||||||
}
|
|
||||||
} catch (PEAR_Exception $ex) {
|
} catch (PEAR_Exception $ex) {
|
||||||
$this->callWizard($ex->getMessage(), true, 'error');
|
$this->callWizard($ex->getMessage(), true, 'error');
|
||||||
}
|
}
|
||||||
@ -3909,13 +3902,23 @@ class mail_ui
|
|||||||
* if other than active profile; nothing is done!
|
* if other than active profile; nothing is done!
|
||||||
* @return nothing
|
* @return nothing
|
||||||
*/
|
*/
|
||||||
function ajax_refreshVacationNotice($icServerID=null)
|
public static function ajax_refreshVacationNotice($icServerID=null)
|
||||||
{
|
{
|
||||||
//error_log(__METHOD__.__LINE__.array2string($icServerId));
|
//Get vacation from cache if it's available
|
||||||
if (empty($icServerID)) $icServerID = $this->mail_bo->profileID;
|
$cachedVacations = egw_cache::getCache(egw_cache::INSTANCE, 'email', 'vacationNotice'+$GLOBALS['egw_info']['user']['account_lid']);
|
||||||
if ($icServerID != $this->mail_bo->profileID) return;
|
$vacation = $cachedVacations[$icServerID];
|
||||||
$vacation = $this->gatherVacation();
|
|
||||||
//error_log(__METHOD__.__LINE__.array2string($vacation));
|
if (!$vacation)
|
||||||
|
{
|
||||||
|
// Create mail app object
|
||||||
|
$mail = new mail_ui();
|
||||||
|
|
||||||
|
if (empty($icServerID)) $icServerID = $mail->mail_bo->profileID;
|
||||||
|
if ($icServerID != $mail->mail_bo->profileID) return;
|
||||||
|
|
||||||
|
$vacation = $mail->gatherVacation($cachedVacations);
|
||||||
|
}
|
||||||
|
|
||||||
if($vacation) {
|
if($vacation) {
|
||||||
if (is_array($vacation) && ($vacation['status'] == 'on' || $vacation['status']=='by_date'))
|
if (is_array($vacation) && ($vacation['status'] == 'on' || $vacation['status']=='by_date'))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user