implemented fallback to email-backend if recipient has no rights to run notification-app or recipient has no prefs set

This commit is contained in:
Christian Binder 2007-12-13 12:52:35 +00:00
parent bbfe57db8b
commit 5d74af6d9a

View File

@ -30,6 +30,11 @@ final class notification {
*/ */
const _appname = 'notifications'; const _appname = 'notifications';
/**
* backend to use for fallback reasons
*/
const _fallback = 'email_only';
/** /**
* pre-defined notificaton chains * pre-defined notificaton chains
* @abstract * @abstract
@ -304,29 +309,34 @@ final class notification {
$user_notified = false; $user_notified = false;
$backend_errors = array(); $backend_errors = array();
try { try {
// eGW user or external user // system or non-system user
if($receiver->account_id && is_numeric($receiver->account_id)) { if($receiver->account_id && is_numeric($receiver->account_id)) {
// receiver is a eGW system-user // system user
$receiver->handle = $receiver->account_lid; $receiver->handle = $receiver->account_lid;
// check if the receiver has rights to run the notifcation app // check if the receiver has rights to run the notifcation app
$ids = $GLOBALS['egw']->accounts->memberships($receiver->account_id,true); $ids = $GLOBALS['egw']->accounts->memberships($receiver->account_id,true);
$ids[] = $receiver->account_id; $ids[] = $receiver->account_id;
if (!$GLOBALS['egw']->acl->get_specific_rights_for_account($ids,'run','notifications')) { if ($GLOBALS['egw']->acl->get_specific_rights_for_account($ids,'run','notifications')) {
throw new Exception('Could not send notification to '.$receiver->handle.' because of missing execute rights on notification-app.'); // read the users notification chain
$prefs = new preferences($receiver->account_id);
$preferences = $prefs->read();
$preferences = (object)$preferences[self::_appname];
if($preferences->notification_chain) {
$notification_chain = $this->notification_chains[$preferences->notification_chain];
} else {
$notification_chain = $this->notification_chains[self::_fallback]; // fallback: no prefs
}
} else {
$notification_chain = $this->notification_chains[self::_fallback]; // fallback: no rights to app
} }
// read the users notification chain
$prefs = new preferences($receiver->account_id);
$preferences = $prefs->read();
$preferences = (object)$preferences[self::_appname];
$notification_chain = $this->notification_chains[$preferences->notification_chain];
} else { } else {
// receiver is not a eGW system-user // non-system user
$receiver->handle = $receiver->account_email; $receiver->handle = $receiver->account_email;
$notification_chain = $this->notification_chains['email_only']; $notification_chain = $this->notification_chains[self::_fallback]; // fallback: non-system user
} }
if(!is_array($notification_chain)) { if($notification_chain === false) {
throw new Exception('Could not send notification to '.$receiver->handle.' because of missing notification settings.'); continue; //user disabled notifications
} }
foreach($notification_chain as $notification_backend => $action) { foreach($notification_chain as $notification_backend => $action) {