Fix character case handling in email address comparison for invitations handling (T1301)
This commit is contained in:
parent
d1be2b7810
commit
874e645999
2 changed files with 29 additions and 16 deletions
|
@ -58,9 +58,10 @@ class calendar extends rcube_plugin
|
|||
'calendar_itip_after_action' => 0,
|
||||
);
|
||||
|
||||
private $ical;
|
||||
private $itip;
|
||||
private $driver;
|
||||
// These are implemented with __get()
|
||||
// private $ical;
|
||||
// private $itip;
|
||||
// private $driver;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -2925,14 +2926,14 @@ class calendar extends rcube_plugin
|
|||
$existing_attendee_emails = array();
|
||||
foreach ($existing['attendees'] as $i => $attendee) {
|
||||
$existing_attendee_emails[] = $attendee['email'];
|
||||
if ($event['_sender'] && ($attendee['email'] == $event['_sender'] || $attendee['email'] == $event['_sender_utf'])) {
|
||||
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
|
||||
$existing_attendee = $i;
|
||||
}
|
||||
}
|
||||
$event_attendee = null;
|
||||
$update_attendees = array();
|
||||
foreach ($event['attendees'] as $attendee) {
|
||||
if ($event['_sender'] && ($attendee['email'] == $event['_sender'] || $attendee['email'] == $event['_sender_utf'])) {
|
||||
if ($this->itip->compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
|
||||
$event_attendee = $attendee;
|
||||
$update_attendees[] = $attendee;
|
||||
$metadata['fallback'] = $attendee['status'];
|
||||
|
@ -2943,11 +2944,11 @@ class calendar extends rcube_plugin
|
|||
}
|
||||
}
|
||||
// also copy delegate attendee
|
||||
else if (!empty($attendee['delegated-from']) &&
|
||||
(stripos($attendee['delegated-from'], $event['_sender']) !== false ||
|
||||
stripos($attendee['delegated-from'], $event['_sender_utf']) !== false)) {
|
||||
else if (!empty($attendee['delegated-from'])
|
||||
&& $this->itip->compare_email($attendee['delegated-from'], $event['_sender'], $event['_sender_utf'])
|
||||
) {
|
||||
$update_attendees[] = $attendee;
|
||||
if (!in_array($attendee['email'], $existing_attendee_emails)) {
|
||||
if (!in_array_nocase($attendee['email'], $existing_attendee_emails)) {
|
||||
$existing['attendees'][] = $attendee;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -492,13 +492,15 @@ class libcalendaring_itip
|
|||
$title = $this->gettext('itipreply');
|
||||
|
||||
foreach ($event['attendees'] as $attendee) {
|
||||
if (!empty($attendee['email']) && $attendee['role'] != 'ORGANIZER' &&
|
||||
(empty($event['_sender']) || ($attendee['email'] == $event['_sender'] || $attendee['email'] == $event['_sender_utf']))) {
|
||||
$metadata['attendee'] = $attendee['email'];
|
||||
$rsvp_status = strtoupper($attendee['status']);
|
||||
if ($attendee['delegated-to'])
|
||||
$metadata['delegated-to'] = $attendee['delegated-to'];
|
||||
break;
|
||||
if (!empty($attendee['email']) && $attendee['role'] != 'ORGANIZER') {
|
||||
if (empty($event['_sender']) || self::compare_email($attendee['email'], $event['_sender'], $event['_sender_utf'])) {
|
||||
$metadata['attendee'] = $attendee['email'];
|
||||
$rsvp_status = strtoupper($attendee['status']);
|
||||
if ($attendee['delegated-to']) {
|
||||
$metadata['delegated-to'] = $attendee['delegated-to'];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -814,4 +816,14 @@ class libcalendaring_itip
|
|||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare email address
|
||||
*/
|
||||
public static function compare_email($value, $email, $email_utf = null)
|
||||
{
|
||||
$v1 = !empty($email) && strcasecmp($value, $email) === 0;
|
||||
$v2 = !empty($email_utf) && strcasecmp($value, $email_utf) === 0;
|
||||
|
||||
return $v1 || $v2;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue