diff --git a/lib/Middleware/InvitationMiddleware.php b/lib/Middleware/InvitationMiddleware.php index 3be99651fcfdeb180552c745451c477c5f093cf8..0e8b300f291dbdb11bb4150ddfb9c442209594bc 100644 --- a/lib/Middleware/InvitationMiddleware.php +++ b/lib/Middleware/InvitationMiddleware.php @@ -104,22 +104,36 @@ class InvitationMiddleware extends Middleware { ); $stmt3 = $query3->execute(); $row3 = $stmt3->fetchAll(\PDO::FETCH_ASSOC); + + $attendeename = ''; + $organizername = ''; + $targetAttendeeEmail = 'mailto:' . $sender; + + // Get organizer name foreach ($row3 as $calendarobj1) { - if ( - $calendarobj1['parameter'] == 'CN' && - $calendarobj1['name'] == 'ATTENDEE' - ) { - $attendeename = $calendarobj1['value']; - } if ( $calendarobj1['parameter'] == 'CN' && $calendarobj1['name'] == 'ORGANIZER' ) { $organizername = $calendarobj1['value']; + break; } } - + + // Parse calendar data to get attendee info reliably + // The VObject maintains the proper relationship between email and CN $vObject = Reader::read($row2['calendardata']); + + // Find the attendee who responded + if (isset($vObject->VEVENT->ATTENDEE)) { + foreach ($vObject->VEVENT->ATTENDEE as $attendee) { + if ((string)$attendee === $targetAttendeeEmail) { + // CN is always set, so assign directly + $attendeename = (string)$attendee['CN']; + break; + } + } + } $SUMMARY = $vObject->VEVENT->SUMMARY; $datestart = (string)$vObject->VEVENT->DTSTART; if (str_contains($datestart, 'T')) { @@ -136,10 +150,6 @@ class InvitationMiddleware extends Middleware { $organizername = $recipient; } - $userdata = $this->iusermanager->getByEmail($recipient); - $username = $userdata[0]->getUID(); - $userlang = $this->languageFactory->getUserLanguage($userdata[0]); - if ($methodName === 'tentative') { $meetingTitle = $this->l10n->t('Invitation Tentatively Accepted: %s', [$SUMMARY]);