try to resolve a use-session-stored-data related problem; make sure account_id and prefs are restored after send_notification

This commit is contained in:
Klaus Leithoff 2013-08-30 12:57:51 +00:00
parent 9c1cb15fbd
commit 7744905ba8
2 changed files with 22 additions and 10 deletions

View File

@ -690,25 +690,31 @@ abstract class bo_tracking
if (!$email) return false;
if (!$this->save_prefs) $this->save_prefs = $GLOBALS['egw_info']['user'];
$save_account_id = $GLOBALS['egw_info']['user']['account_id'];
if (is_numeric($user_or_lang)) // user --> read everything from his prefs
{
$GLOBALS['egw_info']['user']['account_id'] = $user_or_lang;
$GLOBALS['egw']->preferences->__construct($user_or_lang);
$GLOBALS['egw_info']['user']['preferences'] = $GLOBALS['egw']->preferences->read_repository(false); // no session prefs!
$returnfalsenow = false;
if ($check && $this->check2pref) $check = $this->check2pref[$check];
if ($check && !$GLOBALS['egw_info']['user']['preferences'][$this->app][$check])
{
return false; // no notification requested
$returnfalsenow = true;//return false; // no notification requested
}
if ($check && $GLOBALS['egw_info']['user']['preferences'][$this->app][$check] === 'assignment' && !$assignment_changed)
if (!$returnfalsenow && $check && $GLOBALS['egw_info']['user']['preferences'][$this->app][$check] === 'assignment' && !$assignment_changed)
{
return false; // only notification about changed assignment requested
$returnfalsenow = true;//return false; // only notification about changed assignment requested
}
if($this->user == $user_or_lang && !$this->notify_current_user)
if(!$returnfalsenow && $this->user == $user_or_lang && !$this->notify_current_user)
{
return false; // no popup for own actions
$returnfalsenow = true;//return false; // no popup for own actions
}
if ($returnfalsenow)
{
$GLOBALS['egw_info']['user']['account_id'] = $save_account_id;
$GLOBALS['egw_info']['user'] = $this->save_prefs;
return false;
}
}
else
@ -762,6 +768,8 @@ abstract class bo_tracking
}
catch (Exception $exception)
{
$GLOBALS['egw_info']['user']['account_id'] = $save_account_id;
$GLOBALS['egw_info']['user'] = $this->save_prefs;
$this->errors[] = $exception->getMessage();
return false;
}
@ -769,6 +777,8 @@ abstract class bo_tracking
error_log('tracking: cannot send any notifications because notifications is not installed');
}
$GLOBALS['egw_info']['user']['account_id'] = $save_account_id;
$GLOBALS['egw_info']['user'] = $this->save_prefs;
return true;
}

View File

@ -27,8 +27,9 @@ class send extends egw_mailer
*
* To be able to call PHPMailer's Send function, we check if a subject, body or address is set and call it in that case,
* else we do our constructors work.
* @param string $_app the app that is responsible for the sending itself, if available an appspecific profile is fetched/merged
*/
function send()
function send($_app='felamimail')
{
if ($this->debug && is_numeric($this->debug)) $this->SMTPDebug = $this->debug;
if ($this->Subject || $this->Body || count($this->to))
@ -40,7 +41,7 @@ class send extends egw_mailer
$this->CharSet = translation::charset();
$this->IsSmtp();
$restoreSession = $getUserDefinedProfiles = true;
$restoreSession = $getUserDefinedProfiles = false; // no caching for profiles used for notification any more
// if dontUseUserDefinedProfiles is set to yes/true/1 dont restore the session AND dont retrieve UserdefinedAccount settings
$notification_config = config::read('notifications');
if ($notification_config['dontUseUserDefinedProfiles']) $restoreSession = $getUserDefinedProfiles = false;
@ -55,7 +56,8 @@ class send extends egw_mailer
if ($bopreferences) {
if ($this->debug) error_log(__METHOD__." using felamimail preferences for mailing.");
// if dontUseUserDefinedProfiles is set to yes/true/1 dont retrieve UserdefinedAccount settings
$preferences = $bopreferences->getPreferences($getUserDefinedProfiles);
$preferences = $bopreferences->getPreferences($getUserDefinedProfiles,0,$_app);
if ($this->debug) error_log(__METHOD__.__LINE__.' Preferences fetched:'.array2string($preferences));
if ($preferences) {
$ogServer = $preferences->getOutgoingServer(0);
if ($ogServer) {