Loading patches/013-revert-token-password-update.patch +3 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ This patch reverts to only update when there are expired tokens. --- ./lib/private/Authentication/Token/PublicKeyTokenProvider.php 2024-07-25 17:51:37 +0530 +++ ./lib/private/Authentication/Token/PublicKeyTokenProvider-new.php 2024-07-25 17:53:16 +0530 @@ -517,6 +517,11 @@ @@ -504,6 +504,11 @@ } public function updatePasswords(string $uid, string $password) { Loading @@ -19,3 +19,4 @@ This patch reverts to only update when there are expired tokens. // prevent setting an empty pw as result of pw-less-login if ($password === '' || !$this->config->getSystemValueBool('auth.storeCryptedPassword', true)) { return; patches/014-add-mail-usage.patch +3 −3 Original line number Diff line number Diff line --- lib/private/legacy/OC_Helper.php 2025-05-25 16:00:00.880495300 +0530 +++ lib/private/legacy/OC_Helper-new.php 2025-05-25 16:02:00.970495300 +0530 @@ -542,6 +542,12 @@ @@ -512,6 +512,12 @@ } try { $free = $sourceStorage->free_space($rootInfo->getInternalPath()); Loading @@ -13,7 +13,7 @@ if (is_bool($free)) { $free = 0.0; } @@ -577,7 +583,6 @@ @@ -547,7 +553,6 @@ */ $isRemoteShare = $storage->instanceOfStorage(\OCA\Files_Sharing\External\Storage::class); Loading patches/015-email-mail-template.patch +21 −57 Original line number Diff line number Diff line Loading @@ -7,15 +7,15 @@ This patch helps in indentifying that For a recurring event, the invitee knows w --- ./apps/dav/lib/CalDAV/Schedule/IMipPlugin.php 2024-03-18 11:18:20 +++ ./apps/dav/lib/CalDAV/Schedule/IMipPlugin-new.php 2024-03-11 11:18:22 @@ -150,6 +150,30 @@ @@ -149,7 +149,30 @@ /** @var VEvent $oldVevent */ $oldVevent = !empty($modified['old']) && is_array($modified['old']) ? array_pop($modified['old']) : null; $isModified = isset($oldVevent); + $recurrenceId = $vEvent->{'RECURRENCE-ID'}; + if (isset($recurrenceId) && $modified['sentOld'] === 1 && !empty($oldVevent)) { + $dateTime = $recurrenceId->getValue(); + $recurrenceArray = explode('T', $dateTime); + + $oldVEventStart = $oldVevent->DTSTART; + $oldStartDateTime = $oldVEventStart->getValue(); + $startDateTimeArray = explode('T', $oldStartDateTime); Loading @@ -38,7 +38,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w // No changed events after all - this shouldn't happen if there is significant change yet here we are // The scheduling status is debatable if (empty($vEvent)) { @@ -217,12 +241,35 @@ @@ -217,12 +240,35 @@ $data['invitee_name'] = ($senderName ?: $sender); $fromEMail = Util::getDefaultEmailAddress('invitations-noreply'); Loading Loading @@ -75,7 +75,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w $this->imipService->addBulletList($template, $vEvent, $data); // Only add response buttons to invitation requests: Fix Issue #11230 @@ -255,7 +302,6 @@ @@ -255,7 +301,6 @@ || in_array(strtolower($recipientDomain), $invitationLinkRecipients)) { $token = $this->imipService->createInvitationToken($iTipMessage, $vEvent, $lastOccurrence); $this->imipService->addResponseButtons($template, $token); Loading Loading @@ -118,10 +118,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } // generate occurring next string if ($eventReaderCurrent->recurs()) { @@ -968,6 +992,51 @@ @@ -967,6 +991,51 @@ } } /** + /** + * @param IEMailTemplate $template + * @param string $method + * @param string $sender Loading Loading @@ -166,48 +167,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w + } + } + + /** /** * @param string $path * @return string */ @@ -1061,12 +1130,47 @@ $data['meeting_title_html'] ?? $data['meeting_title'], $this->l10n->t('Title:'), $this->getAbsoluteImagePath('caldav/title.png'), $data['meeting_title'], '', IMipPlugin::IMIP_INDENT); if ($data['meeting_when'] !== '') { - $template->addBodyListItem($data['meeting_when_html'] ?? $data['meeting_when'], $this->l10n->t('When:'), - $this->getAbsoluteImagePath('caldav/time.png'), $data['meeting_when'], '', IMipPlugin::IMIP_INDENT); + if (isset($vevent->RRULE)) { + $RRule = (string) $vevent->RRULE->getValue(); + if (strpos($RRule, 'FREQ=DAILY') !== false) { + $timeTitle = $this->l10n->t('Repeats daily:'); + } + if (strpos($RRule, 'FREQ=WEEKLY') !== false) { + $timeTitle = $this->l10n->t('Repeats weekly:'); + } + if (strpos($RRule, 'FREQ=MONTHLY') !== false) { + $timeTitle = $this->l10n->t('Repeats monthly:'); + } + if (strpos($RRule, 'FREQ=YEARLY') !== false) { + $timeTitle = $this->l10n->t('Repeats yearly:'); + } + $template->addBodyListItem( + $data['meeting_when_html'] ?? $data['meeting_when'], + $timeTitle, + $this->getAbsoluteImagePath('caldav/time.png'), + $data['meeting_when'], + '', + IMipPlugin::IMIP_INDENT + ); + } else { + $template->addBodyListItem( + $data['meeting_when_html'] ?? $data['meeting_when'], + $this->l10n->t('Time:'), + $this->getAbsoluteImagePath('caldav/time.png'), + $data['meeting_when'], + '', + IMipPlugin::IMIP_INDENT + ); + } @@ -1065,8 +1134,13 @@ $this->getAbsoluteImagePath('caldav/time.png'), $data['meeting_when'], '', IMipPlugin::IMIP_INDENT); } if ($data['meeting_location'] !== '') { - $template->addBodyListItem($data['meeting_location_html'] ?? $data['meeting_location'], $this->l10n->t('Location:'), Loading @@ -222,7 +186,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } if ($data['meeting_url'] !== '') { $template->addBodyListItem($data['meeting_url_html'] ?? $data['meeting_url'], $this->l10n->t('Link:'), @@ -1143,7 +1247,7 @@ @@ -1143,7 +1217,7 @@ * @param $token */ public function addResponseButtons(IEMailTemplate $template, $token) { Loading @@ -231,7 +195,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w $this->l10n->t('Accept'), $this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.accept', [ 'token' => $token, @@ -1151,20 +1255,10 @@ @@ -1151,20 +1225,10 @@ $this->l10n->t('Decline'), $this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.decline', [ 'token' => $token, Loading @@ -258,11 +222,10 @@ This patch helps in indentifying that For a recurring event, the invitee knows w --- ./apps/dav/lib/CalDAV/EventComparisonService.php 2024-05-06 12:46:29 +++ ./apps/dav/lib/CalDAV/EventComparisonService-new.php 2024-05-06 12:47:11 @@ -77,9 +77,9 @@ unset($newEventComponents[$k]); @@ -78,8 +78,9 @@ } } - + $sentOld = 0; if (empty($old)) { - return ['old' => null, 'new' => $newEventComponents]; Loading @@ -270,7 +233,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } $oldEventComponents = $old->getComponents(); @@ -90,11 +90,15 @@ @@ -90,11 +91,16 @@ continue; } if ($this->removeIfUnchanged($event, $newEventComponents)) { Loading @@ -280,6 +243,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w + } else { + $sentOld = 1; + } + } } } Loading Loading
patches/013-revert-token-password-update.patch +3 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ This patch reverts to only update when there are expired tokens. --- ./lib/private/Authentication/Token/PublicKeyTokenProvider.php 2024-07-25 17:51:37 +0530 +++ ./lib/private/Authentication/Token/PublicKeyTokenProvider-new.php 2024-07-25 17:53:16 +0530 @@ -517,6 +517,11 @@ @@ -504,6 +504,11 @@ } public function updatePasswords(string $uid, string $password) { Loading @@ -19,3 +19,4 @@ This patch reverts to only update when there are expired tokens. // prevent setting an empty pw as result of pw-less-login if ($password === '' || !$this->config->getSystemValueBool('auth.storeCryptedPassword', true)) { return;
patches/014-add-mail-usage.patch +3 −3 Original line number Diff line number Diff line --- lib/private/legacy/OC_Helper.php 2025-05-25 16:00:00.880495300 +0530 +++ lib/private/legacy/OC_Helper-new.php 2025-05-25 16:02:00.970495300 +0530 @@ -542,6 +542,12 @@ @@ -512,6 +512,12 @@ } try { $free = $sourceStorage->free_space($rootInfo->getInternalPath()); Loading @@ -13,7 +13,7 @@ if (is_bool($free)) { $free = 0.0; } @@ -577,7 +583,6 @@ @@ -547,7 +553,6 @@ */ $isRemoteShare = $storage->instanceOfStorage(\OCA\Files_Sharing\External\Storage::class); Loading
patches/015-email-mail-template.patch +21 −57 Original line number Diff line number Diff line Loading @@ -7,15 +7,15 @@ This patch helps in indentifying that For a recurring event, the invitee knows w --- ./apps/dav/lib/CalDAV/Schedule/IMipPlugin.php 2024-03-18 11:18:20 +++ ./apps/dav/lib/CalDAV/Schedule/IMipPlugin-new.php 2024-03-11 11:18:22 @@ -150,6 +150,30 @@ @@ -149,7 +149,30 @@ /** @var VEvent $oldVevent */ $oldVevent = !empty($modified['old']) && is_array($modified['old']) ? array_pop($modified['old']) : null; $isModified = isset($oldVevent); + $recurrenceId = $vEvent->{'RECURRENCE-ID'}; + if (isset($recurrenceId) && $modified['sentOld'] === 1 && !empty($oldVevent)) { + $dateTime = $recurrenceId->getValue(); + $recurrenceArray = explode('T', $dateTime); + + $oldVEventStart = $oldVevent->DTSTART; + $oldStartDateTime = $oldVEventStart->getValue(); + $startDateTimeArray = explode('T', $oldStartDateTime); Loading @@ -38,7 +38,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w // No changed events after all - this shouldn't happen if there is significant change yet here we are // The scheduling status is debatable if (empty($vEvent)) { @@ -217,12 +241,35 @@ @@ -217,12 +240,35 @@ $data['invitee_name'] = ($senderName ?: $sender); $fromEMail = Util::getDefaultEmailAddress('invitations-noreply'); Loading Loading @@ -75,7 +75,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w $this->imipService->addBulletList($template, $vEvent, $data); // Only add response buttons to invitation requests: Fix Issue #11230 @@ -255,7 +302,6 @@ @@ -255,7 +301,6 @@ || in_array(strtolower($recipientDomain), $invitationLinkRecipients)) { $token = $this->imipService->createInvitationToken($iTipMessage, $vEvent, $lastOccurrence); $this->imipService->addResponseButtons($template, $token); Loading Loading @@ -118,10 +118,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } // generate occurring next string if ($eventReaderCurrent->recurs()) { @@ -968,6 +992,51 @@ @@ -967,6 +991,51 @@ } } /** + /** + * @param IEMailTemplate $template + * @param string $method + * @param string $sender Loading Loading @@ -166,48 +167,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w + } + } + + /** /** * @param string $path * @return string */ @@ -1061,12 +1130,47 @@ $data['meeting_title_html'] ?? $data['meeting_title'], $this->l10n->t('Title:'), $this->getAbsoluteImagePath('caldav/title.png'), $data['meeting_title'], '', IMipPlugin::IMIP_INDENT); if ($data['meeting_when'] !== '') { - $template->addBodyListItem($data['meeting_when_html'] ?? $data['meeting_when'], $this->l10n->t('When:'), - $this->getAbsoluteImagePath('caldav/time.png'), $data['meeting_when'], '', IMipPlugin::IMIP_INDENT); + if (isset($vevent->RRULE)) { + $RRule = (string) $vevent->RRULE->getValue(); + if (strpos($RRule, 'FREQ=DAILY') !== false) { + $timeTitle = $this->l10n->t('Repeats daily:'); + } + if (strpos($RRule, 'FREQ=WEEKLY') !== false) { + $timeTitle = $this->l10n->t('Repeats weekly:'); + } + if (strpos($RRule, 'FREQ=MONTHLY') !== false) { + $timeTitle = $this->l10n->t('Repeats monthly:'); + } + if (strpos($RRule, 'FREQ=YEARLY') !== false) { + $timeTitle = $this->l10n->t('Repeats yearly:'); + } + $template->addBodyListItem( + $data['meeting_when_html'] ?? $data['meeting_when'], + $timeTitle, + $this->getAbsoluteImagePath('caldav/time.png'), + $data['meeting_when'], + '', + IMipPlugin::IMIP_INDENT + ); + } else { + $template->addBodyListItem( + $data['meeting_when_html'] ?? $data['meeting_when'], + $this->l10n->t('Time:'), + $this->getAbsoluteImagePath('caldav/time.png'), + $data['meeting_when'], + '', + IMipPlugin::IMIP_INDENT + ); + } @@ -1065,8 +1134,13 @@ $this->getAbsoluteImagePath('caldav/time.png'), $data['meeting_when'], '', IMipPlugin::IMIP_INDENT); } if ($data['meeting_location'] !== '') { - $template->addBodyListItem($data['meeting_location_html'] ?? $data['meeting_location'], $this->l10n->t('Location:'), Loading @@ -222,7 +186,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } if ($data['meeting_url'] !== '') { $template->addBodyListItem($data['meeting_url_html'] ?? $data['meeting_url'], $this->l10n->t('Link:'), @@ -1143,7 +1247,7 @@ @@ -1143,7 +1217,7 @@ * @param $token */ public function addResponseButtons(IEMailTemplate $template, $token) { Loading @@ -231,7 +195,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w $this->l10n->t('Accept'), $this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.accept', [ 'token' => $token, @@ -1151,20 +1255,10 @@ @@ -1151,20 +1225,10 @@ $this->l10n->t('Decline'), $this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.decline', [ 'token' => $token, Loading @@ -258,11 +222,10 @@ This patch helps in indentifying that For a recurring event, the invitee knows w --- ./apps/dav/lib/CalDAV/EventComparisonService.php 2024-05-06 12:46:29 +++ ./apps/dav/lib/CalDAV/EventComparisonService-new.php 2024-05-06 12:47:11 @@ -77,9 +77,9 @@ unset($newEventComponents[$k]); @@ -78,8 +78,9 @@ } } - + $sentOld = 0; if (empty($old)) { - return ['old' => null, 'new' => $newEventComponents]; Loading @@ -270,7 +233,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w } $oldEventComponents = $old->getComponents(); @@ -90,11 +90,15 @@ @@ -90,11 +91,16 @@ continue; } if ($this->removeIfUnchanged($event, $newEventComponents)) { Loading @@ -280,6 +243,7 @@ This patch helps in indentifying that For a recurring event, the invitee knows w + } else { + $sentOld = 1; + } + } } } Loading