From d1aa65a662075b266c6edc30cd1da714a3fb913d Mon Sep 17 00:00:00 2001 From: ralf Date: Thu, 15 Jun 2023 14:13:55 +0200 Subject: [PATCH] * Calendar: fix external organizer was not notified by mail (and other missing notifications of non-users) caused by the check being done with email addresse while the uid used as key in participants is NOT the email address --- calendar/inc/class.calendar_boupdate.inc.php | 25 ++++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/calendar/inc/class.calendar_boupdate.inc.php b/calendar/inc/class.calendar_boupdate.inc.php index 36beb9df07..411eb2793c 100644 --- a/calendar/inc/class.calendar_boupdate.inc.php +++ b/calendar/inc/class.calendar_boupdate.inc.php @@ -636,7 +636,7 @@ class calendar_boupdate extends calendar_bo * @param string $status of current user * @return boolean true = update requested, false otherwise */ - public static function update_requested($userid, $part_prefs, &$msg_type, $old_event ,$new_event, $role, $status=null) + public function update_requested($userid, $part_prefs, &$msg_type, $old_event ,$new_event, $role, $status=null) { if ($msg_type == MSG_ALARM) { @@ -649,8 +649,14 @@ class calendar_boupdate extends calendar_bo $msg_is_response = $msg_type == MSG_REJECTED || $msg_type == MSG_ACCEPTED || $msg_type == MSG_TENTATIVE || $msg_type == MSG_DELEGATED; // Check if user is not participating, and does not want notifications - if ($msg_is_response && !$part_prefs['calendar']['receive_not_participating'] && !array_key_exists($userid, $old_event['participants'] ?? [])) + if ($msg_is_response && empty($part_prefs['calendar']['receive_not_participating']) && + // userid is the email address for non-user and NOT necessary the uid used as key in participants ("rb@egroupware.org" vs "eRalf Becker ") + !in_array(is_numeric($userid) ? $userid : strtolower($userid), array_map(function($uid) + { + return is_numeric($uid) ? $uid : strtolower($this->resource_info($uid)['email'] ?? ''); + }, array_keys($old_event['participants'])), false)) { + error_log(__METHOD__."(userid=$userid, receive_not_participating='{$part_prefs['calendar']['receive_not_participating']}', msg_type=$msg_type, {participants: ".json_encode($old_event['participants']).", ...}, role='$role') msg_is_response=$msg_is_response --> user $userid is NOT participating"); return false; } @@ -711,7 +717,7 @@ class calendar_boupdate extends calendar_bo break; } } - //error_log(__METHOD__."(userid=$userid, receive_updates='$ru', msg_type=$msg_type, ..., role='$role') msg_is_response=$msg_is_response --> want_update=$want_update"); + //error_log(__METHOD__."(userid=$userid, receive_updates='$ru', msg_type=$msg_type, {participants: ".json_encode($old_event['participants']).", ...}, role='$role') msg_is_response=$msg_is_response --> want_update=$want_update"); return $want_update > 0; } @@ -761,7 +767,9 @@ class calendar_boupdate extends calendar_bo $msg_type = MSG_DELETED; break; } - $ret = self::update_requested($account_id, $prefs, $msg_type, array(), array(), $role); + static $calendar_bo=null; + if (!isset($calendar_bo)) $calendar_bo = new calendar_bo(); + $ret = $calendar_bo->update_requested($account_id, $prefs, $msg_type, array(), array(), $role); //error_log(__METHOD__."('$user_or_email', '$ical_method', '$role') account_id=$account_id --> updated_requested returned ".array2string($ret)); return $ret; } @@ -870,7 +878,7 @@ class calendar_boupdate extends calendar_bo */ function _send_update($msg_type, $to_notify, $old_event, $new_event=null, $user=0, array $alarm=null, $ignore_prefs = false) { - //error_log(__METHOD__."($msg_type,".array2string($to_notify).",...) ".array2string($new_event)); + //error_log(__METHOD__."($msg_type, ".json_encode($to_notify).", ..., ".json_encode($new_event).", ...)"); if (!is_array($to_notify)) { $to_notify = array(); @@ -889,6 +897,8 @@ class calendar_boupdate extends calendar_bo !$new_event && $old_event && $this->date2ts($old_event['start']) < ($this->now_su - 10) ) { + error_log(__METHOD__."($msg_type, ".json_encode($to_notify).", ..., ".json_encode($new_event).", ...) --> ignoring event in the past: start=". + date('Y-m-d H:i:s', ($new_event ?: $old_event)['start'])." < ".date('Y-m-d H:i:s', $this->now_su-10)); return False; } // check if default timezone is set correctly to server-timezone (ical-parser messes with it!!!) @@ -989,7 +999,7 @@ class calendar_boupdate extends calendar_bo { $res_info = $this->resource_info($userid); - // check if responsible of a resource has read rights on event (might be private!) + // check if responsible for a resource has read rights on event (might be private!) if ($res_info['app'] == 'resources' && $res_info['responsible'] && !$this->check_perms(Acl::READ, $event, 0, 'ts', null, $res_info['responsible'])) { @@ -1053,9 +1063,10 @@ class calendar_boupdate extends calendar_bo $fullname = $res_info && !empty($res_info['name']) ? $res_info['name'] : $userid; } $m_type = $msg_type; - if (!$ignore_prefs && !self::update_requested($userid, $part_prefs, $m_type, $old_event, $new_event, $role, + if (!$ignore_prefs && !$this->update_requested($userid, $part_prefs, $m_type, $old_event, $new_event, $role, $event['participants'][$GLOBALS['egw_info']['user']['account_id']])) { + //error_log("--> Update/notification NOT requested / ignored"); continue; } $action = $notify_msg = null;