From b337319655dd11efe7ef857ef7ab86a0792a9189 Mon Sep 17 00:00:00 2001 From: Josh Date: Tue, 31 Mar 2026 12:09:36 -0400 Subject: [PATCH 1/2] fix(files_reminders): switch from DB-side `NOW()` to PHP-side generation Signed-off-by: Josh --- .../files_reminders/lib/Db/ReminderMapper.php | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/files_reminders/lib/Db/ReminderMapper.php b/apps/files_reminders/lib/Db/ReminderMapper.php index 63cba437d0777..069f015337586 100644 --- a/apps/files_reminders/lib/Db/ReminderMapper.php +++ b/apps/files_reminders/lib/Db/ReminderMapper.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2023-2026 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ @@ -12,6 +12,7 @@ use DateTime; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\QBMapper; +use OCP\AppFramework\Utility\ITimeFactory; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\Files\Folder; use OCP\Files\Node; @@ -25,12 +26,11 @@ class ReminderMapper extends QBMapper { public const TABLE_NAME = 'files_reminders'; - public function __construct(IDBConnection $db) { - parent::__construct( - $db, - static::TABLE_NAME, - Reminder::class, - ); + public function __construct( + IDBConnection $db, + private ITimeFactory $timeFactory, + ) { + parent::__construct($db, self::TABLE_NAME, Reminder::class); } public function markNotified(Reminder $reminder): Reminder { @@ -108,9 +108,18 @@ public function findAllForNode(Node $node) { public function findOverdue() { $qb = $this->db->getQueryBuilder(); + $now = $this->timeFactory->getDateTime(); + $now->setTimezone(new \DateTimeZone('UTC')); + $qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified') ->from($this->getTableName()) - ->where($qb->expr()->lt('due_date', $qb->createFunction('NOW()'))) + ->where( + $qb->expr()->lt( + 'due_date', + $qb->createNamedParameter($now, IQueryBuilder::PARAM_DATETIME_MUTABLE), + IQueryBuilder::PARAM_DATETIME_MUTABLE, + ) + ) ->andWhere($qb->expr()->eq('notified', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))) ->orderBy('due_date', 'ASC'); From d15c8df80cdbf035783c02aabaf40e9eb5632502 Mon Sep 17 00:00:00 2001 From: Josh Date: Thu, 2 Apr 2026 08:55:44 -0400 Subject: [PATCH 2/2] chore(files_reminders): make lint happy Signed-off-by: Josh --- apps/files_reminders/lib/Db/ReminderMapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/files_reminders/lib/Db/ReminderMapper.php b/apps/files_reminders/lib/Db/ReminderMapper.php index 069f015337586..3ef80fbda0c58 100644 --- a/apps/files_reminders/lib/Db/ReminderMapper.php +++ b/apps/files_reminders/lib/Db/ReminderMapper.php @@ -110,7 +110,7 @@ public function findOverdue() { $now = $this->timeFactory->getDateTime(); $now->setTimezone(new \DateTimeZone('UTC')); - + $qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified') ->from($this->getTableName()) ->where(