Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 670a50d7 authored by AVINASH GUSAIN's avatar AVINASH GUSAIN
Browse files

fix: apply compatibility patches for Nextcloud 30

parent c337ce96
Loading
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -147,15 +147,15 @@ RUN patch -u ${BASE_DIR}/lib/private/Updater.php -i ${TMP_PATCH_DIR}/010-disable
RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/011-privacy-settings.patch
RUN patch -u ${BASE_DIR}/lib/private/Authentication/Token/PublicKeyTokenProvider.php -i ${TMP_PATCH_DIR}/013-revert-token-password-update.patch
RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/014-add-mail-usage.patch
#RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/015-email-mail-template.patch
#RUN patch -u ${BASE_DIR}/core/Command/User/Setting.php -i ${TMP_PATCH_DIR}/018-occ-user-setting.patch
RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/015-email-mail-template.patch
RUN patch -u ${BASE_DIR}/core/Command/User/Setting.php -i ${TMP_PATCH_DIR}/018-occ-user-setting.patch
RUN patch -u ${BASE_DIR}/apps/files/js/files.js -i ${TMP_PATCH_DIR}/021-repeated-storage-dialog-fix.patch
RUN cd ${BASE_DIR} && patch -u ${BASE_DIR}/3rdparty/sabre/vobject/lib/ITip/Broker.php -i ${TMP_PATCH_DIR}/022-significantchange.patch
RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/026-primary-color-fix.patch
RUN patch -u ${BASE_DIR}/lib/private/Template/JSResourceLocator.php -i ${TMP_PATCH_DIR}/031-theme-custom-app-translations.patch
RUN patch -u ${BASE_DIR}/lib/private/L10N/Factory.php -i ${TMP_PATCH_DIR}/032-select-lang-from-session.patch
# UserConfigChangedEvent Ref: https://github.com/nextcloud/server/pull/42039
#RUN cd ${BASE_DIR} && patch -p1 < ${TMP_PATCH_DIR}/036-user-config-change-event.patch
RUN cd ${BASE_DIR} && patch -p1 < ${TMP_PATCH_DIR}/036-user-config-change-event.patch

RUN rm -rf ${TMP_PATCH_DIR}

@@ -220,7 +220,7 @@ COPY patches/ ${TMP_PATCH_DIR}/
RUN patch -u ${BASE_DIR}/core/templates/layout.user.php -i ${TMP_PATCH_DIR}/003-contact-search-removal.patch
RUN patch -u ${BASE_DIR}/core/Controller/ContactsMenuController.php -i ${TMP_PATCH_DIR}/004-contact-search-controller-removal.patch
RUN cd ${BASE_DIR} && patch -p0 < ${TMP_PATCH_DIR}/005-autocomplete-user-leak-core.patch
#RUN patch -u ${BASE_DIR}/core/templates/layout.guest.php -i ${TMP_PATCH_DIR}/016-login-screen.patch
RUN patch -u ${BASE_DIR}/core/templates/layout.guest.php -i ${TMP_PATCH_DIR}/016-login-screen.patch
RUN patch -u ${BASE_DIR}/lib/private/Notification/Manager.php -i ${TMP_PATCH_DIR}/020-fairuse-notification-fix.patch
RUN cd ${BASE_DIR} && patch -u ${BASE_DIR}/apps/user_ldap/lib/User_LDAP.php -i ${TMP_PATCH_DIR}/023-ldap-check-pwd-optimization.patch
RUN patch -u ${BASE_DIR}/lib/private/User/Manager.php -i ${TMP_PATCH_DIR}/025-optimize-get-by-email.patch
+74 −65
Original line number Diff line number Diff line
@@ -7,11 +7,10 @@ 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
@@ -171,7 +171,29 @@
 		/** @var VEvent $oldVevent */
@@ -150,6 +150,30 @@
 		$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();
@@ -35,10 +34,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+				new \DateTime($finalEndTime, new \DateTimeZone($timeZoneId))
+			);
+		}
+
 		// 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)) {
@@ -238,6 +260,13 @@
@@ -217,12 +241,35 @@
 		$data['invitee_name'] = ($senderName ?: $sender);
 
 		$fromEMail = Util::getDefaultEmailAddress('invitations-noreply');
@@ -49,10 +49,9 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+				$senderName = $users[0]->getDisplayName();
+			}
+		}
+
 		$fromName = $this->imipService->getFrom($senderName, $this->defaults->getName());
 
 		$message = $this->mailer->createMessage()
@@ -258,7 +287,22 @@
 		$template = $this->mailer->createEMailTemplate('dav.calendarInvite.' . $method, $data);
 		$template->addHeader();
 
@@ -76,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
@@ -291,7 +335,6 @@
@@ -255,7 +302,6 @@
 				|| in_array(strtolower($recipientDomain), $invitationLinkRecipients)) {
 				$token = $this->imipService->createInvitationToken($iTipMessage, $vEvent, $lastOccurrence);
 				$this->imipService->addResponseButtons($template, $token);
@@ -86,11 +85,11 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
		
--- ./apps/dav/lib/CalDAV/Schedule/IMipService.php	2024-03-18 11:40:39
+++ ./apps/dav/lib/CalDAV/Schedule/IMipService-new.php	2024-03-18 13:47:17
@@ -170,10 +170,30 @@
@@ -163,7 +163,31 @@
 			$oldUrl = self::readPropertyWithDefault($oldVEvent, 'URL', $defaultVal);
 			$data['meeting_url_html'] = !empty($oldUrl) && $oldUrl !== $data['meeting_url'] ? sprintf('<a href="%1$s">%1$s</a>', $oldUrl) : $data['meeting_url'];
 
-			$data['meeting_when_html'] =
-			$data['meeting_when_html'] = $oldMeetingWhen !== $data['meeting_when'] ? sprintf("<span style='text-decoration: line-through'>%s</span><br />%s", $oldMeetingWhen, $data['meeting_when']) : $data['meeting_when'];
+			if (isset($vEvent->RRULE)) {
+				$RRule = (string) $vEvent->RRULE->getValue();
+				if (strpos($RRule, 'FREQ=DAILY') !== false) {
@@ -106,20 +105,20 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+					$timeTitle = $this->l10n->t('Repeats yearly:');
+				}
+				$data['meeting_when_html'] =
 				($oldMeetingWhen !== $data['meeting_when'] && $oldMeetingWhen !== null)
-					? sprintf("<span style='text-decoration: line-through'>%s</span><br />%s", $oldMeetingWhen, $data['meeting_when'])
+					($oldMeetingWhen !== $data['meeting_when'] && $oldMeetingWhen !== null)
+						? sprintf("<span style='text-decoration: line-through'>%s</span><br /><span style='color:#6CA91C;font-weight:bold;'>%s</span> %s", $oldMeetingWhen, $timeTitle, $data['meeting_when'])
+						: $data['meeting_when'];
+			} else {
+				$data['meeting_when_html'] =
+					($oldMeetingWhen !== $data['meeting_when'] && $oldMeetingWhen !== null)
+						? sprintf("<span style='text-decoration: line-through'>%s</span><br /><span style='color:#6CA91C;font-weight:bold;'>%s</span> %s", $oldMeetingWhen, $this->l10n->t('Time:'), $data['meeting_when'])
 					: $data['meeting_when'];
+						: $data['meeting_when'];
+			}
+
 		}
 		return $data;
 	}
@@ -446,6 +466,51 @@
 		// generate occurring next string
 		if ($eventReaderCurrent->recurs()) {
@@ -968,6 +992,51 @@
 	}
 
 	/**
@@ -171,11 +170,12 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
 	 * @param string $path
 	 * @return string
 	 */
@@ -539,12 +604,36 @@
@@ -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('Time:'),
-			$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) {
@@ -190,11 +190,23 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+				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);
+				$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);
+				$template->addBodyListItem(
+					$data['meeting_when_html'] ?? $data['meeting_when'],
+					$this->l10n->t('Time:'),
+					$this->getAbsoluteImagePath('caldav/time.png'),
+					$data['meeting_when'],
+					'',
+					IMipPlugin::IMIP_INDENT
+				);
+			}
 		}
 		if ($data['meeting_location'] !== '') {
@@ -203,7 +215,6 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+			 if(filter_var(trim($data['meeting_location']), FILTER_VALIDATE_URL))	{
+				$template->addBodyListItem($data['meeting_location_html'] ?? $data['meeting_location'], $this->l10n->t('Location:'),
+					$this->getAbsoluteImagePath('caldav/videocall.png'), $data['meeting_location'], '', IMipPlugin::IMIP_INDENT);
+
+			} else {
+				$template->addBodyListItem($data['meeting_location_html'] ?? $data['meeting_location'], $this->l10n->t('Location:'),
+					$this->getAbsoluteImagePath('caldav/location.png'), $data['meeting_location'], '', IMipPlugin::IMIP_INDENT);
@@ -211,7 +222,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:'),
@@ -642,7 +731,7 @@
@@ -1143,7 +1247,7 @@
 	 * @param $token
 	 */
 	public function addResponseButtons(IEMailTemplate $template, $token) {
@@ -220,7 +231,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,
@@ -650,22 +739,12 @@
@@ -1151,20 +1255,10 @@
 			$this->l10n->t('Decline'),
 			$this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.decline', [
 				'token' => $token,
@@ -229,8 +240,8 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+			$this->l10n->t('MayBe'),
+			$this->urlGenerator->getAbsoluteUrl('apps/calendar/invitation/tentative/'.$token)
 		);
 	}
 
-	}
-
-	public function addMoreOptionsButton(IEMailTemplate $template, $token) {
-		$moreOptionsURL = $this->urlGenerator->linkToRouteAbsolute('dav.invitation_response.options', [
-			'token' => $token,
@@ -241,14 +252,13 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
-		$text = $this->l10n->t('More options at %s', [$moreOptionsURL]);
-
-		$template->addBodyText($html, $text);
-	}
-
 	}
 
 	public function getReplyingAttendee(Message $iTipMessage): ?Property {
 		/** @var VEvent $vevent */
 		$vevent = $iTipMessage->message->VEVENT;

--- ./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
@@ -94,11 +94,10 @@
@@ -77,9 +77,9 @@
 				unset($newEventComponents[$k]);
 			}
 		}
@@ -258,11 +268,9 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
-			return ['old' => null, 'new' => $newEventComponents];
+			return ['old' => null, 'new' => $newEventComponents, 'sentOld' => $sentOld];
 		}
-
 
 		$oldEventComponents = $old->getComponents();
 		if(is_array($oldEventComponents) && !empty($oldEventComponents)) {
 			foreach ($oldEventComponents as $k => $event) {
@@ -107,11 +106,15 @@
@@ -90,11 +90,15 @@
 					continue;
 				}
 				if ($this->removeIfUnchanged($event, $newEventComponents)) {
@@ -280,3 +288,4 @@ This patch helps in indentifying that For a recurring event, the invitee knows w
+		return ['old' => array_values($oldEventComponents), 'new' => array_values($newEventComponents), 'sentOld' => $sentOld];
 	}
 }
\ No newline at end of file
+41 −42
Original line number Diff line number Diff line
--- ./core/templates/layout.guest.php	2024-03-15 19:20:21
+++ ./core/templates/layout.guest-new.php	2024-03-15 19:24:49
@@ -22,6 +22,7 @@
--- layout.guest.php	2025-07-24 10:37:50
+++ layout.guest-new.php	2025-07-24 10:58:20
@@ -32,6 +32,7 @@
 		<link rel="mask-icon" sizes="any" href="<?php print_unescaped(image_path('core', 'favicon-mask.svg')); ?>" color="<?php p($theme->getColorPrimary()); ?>">
 		<link rel="manifest" href="<?php print_unescaped(image_path('core', 'manifest.json')); ?>" crossorigin="use-credentials">
 		<?php emit_css_loading_tags($_); ?>
@@ -8,12 +8,10 @@
 		<?php emit_script_loading_tags($_); ?>
 		<?php print_unescaped($_['headers']); ?>
 	</head>
@@ -32,12 +33,37 @@
 		<?php foreach ($_['initialStates'] as $app => $initialState) { ?>
 			<input type="hidden" id="initial-state-<?php p($app); ?>" value="<?php p(base64_encode($initialState)); ?>">
 		<?php }?>
-		<div class="wrapper">
-			<div class="v-align">
@@ -42,10 +43,38 @@
 		<?php include 'layout.initial-state.php'; ?>
 		<div class="wrapper">
 			<div class="v-align">
+				<div class="wrapper <?= (array_key_exists("alt_login",$_)) ? 'alt_login':'not_alt_login' ?>" >
+					<?php if (array_key_exists("alt_login",$_)) { ?>
+						<div class="banner-right-align">
@@ -45,10 +43,11 @@
+								<div class="sign-in-label sign-label"><?php p($l->t('Sign in to your account')); ?></div>
+								<div class="sign-in-label fp-label" style="display: none"><?php p($l->t('Forgot Password')); ?></div>
+							<?php } ?>
+
 						</div>
 					</header>
 				<?php endif; ?>
@@ -46,18 +72,24 @@
@@ -54,18 +83,24 @@
 						<?php p($theme->getName()); ?>
 					</h1>
 					<?php print_unescaped($_['content']); ?>
@@ -83,4 +82,4 @@
-		</footer>
 	</body>
 </html>
\ No newline at end of file
+4 −4
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ This patch triggers a user changed event when quota is updated via the occ comma

--- ./core/Command/User/Setting.php	2022-07-05 14:53:54.093230637 +0530
+++ ./core/Command/User/Setting-new.php	2022-07-05 21:24:11.654134876 +0530
@@ -34,6 +34,8 @@
@@ -16,6 +16,8 @@
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
@@ -15,7 +15,7 @@ This patch triggers a user changed event when quota is updated via the occ comma
 
 class Setting extends Base {
 	public function __construct(
@@ -192,6 +194,11 @@
@@ -174,6 +176,11 @@
 				}
 
 				$this->config->setUserValue($uid, $app, $key, $input->getArgument('value'));
+14 −15
Original line number Diff line number Diff line
--- ./lib/private/AllConfig.php	2024-03-28 01:02:39
+++ ./lib/private/AllConfig-new.php	2024-04-15 16:36:23
@@ -38,6 +38,8 @@
@@ -12,6 +12,8 @@
 use OCP\IConfig;
 use OCP\IDBConnection;
 use OCP\PreConditionNotMetException;
@@ -9,34 +9,33 @@
 
 /**
  * Class to combine all the configuration options ownCloud offers
@@ -283,6 +285,7 @@
@@ -257,6 +259,8 @@
 				$qb->executeStatement();
 
 				$this->userCache[$userId][$appName][$key] = (string) $value;
+				$this->triggerUserValueChange($userId, $appName, $key, $value, $prevValue);
+
 				return;
 			}
 		}
@@ -309,8 +312,15 @@
@@ -282,6 +286,14 @@
 				$this->userCache[$userId][$appName] = [];
 			}
 			$this->userCache[$userId][$appName][$key] = (string) $value;
 		}
+		}
+		$this->triggerUserValueChange($userId, $appName, $key, $value, $prevValue);
 	}
 
+	}
+	
+	private function triggerUserValueChange($userId, $appId, $key, $value, $oldValue = null) {
+		if (\OC::$server instanceof \OCP\IServerContainer) {
+			$dispatcher = \OC::$server->get(IEventDispatcher::class);
+			$dispatcher->dispatchTyped(new UserConfigChangedEvent($userId, $appId, $key, $value, $oldValue));
+		}
+	}
 	/**
 	 * Getting a user defined value
 	 *
 		}
 	}

--- ./lib/composer/composer/autoload_static.php	2024-03-28 01:02:39
+++ ./lib/composer/composer/autoload_static-new.php	2024-04-15 16:34:18
@@ -822,6 +822,7 @@
@@ -903,6 +903,7 @@
         'OCP\\User\\Events\\PasswordUpdatedEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/PasswordUpdatedEvent.php',
         'OCP\\User\\Events\\PostLoginEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/PostLoginEvent.php',
         'OCP\\User\\Events\\UserChangedEvent' => __DIR__ . '/../../..' . '/lib/public/User/Events/UserChangedEvent.php',
@@ -47,7 +46,7 @@

--- ./lib/composer/composer/autoload_classmap.php	2024-03-28 01:02:39
+++ ./lib/composer/composer/autoload_classmap-new.php	2024-04-15 16:33:19
@@ -796,6 +796,7 @@
@@ -877,6 +877,7 @@
     'OCP\\User\\Events\\UserLoggedInEvent' => $baseDir . '/lib/public/User/Events/UserLoggedInEvent.php',
     'OCP\\User\\Events\\UserLoggedInWithCookieEvent' => $baseDir . '/lib/public/User/Events/UserLoggedInWithCookieEvent.php',
     'OCP\\User\\Events\\UserLoggedOutEvent' => $baseDir . '/lib/public/User/Events/UserLoggedOutEvent.php',