Skip to content

Commit

Permalink
Fix/handle-duplicate-reminder
Browse files Browse the repository at this point in the history
Signed-off-by: hamza221 <[email protected]>
  • Loading branch information
hamza221 committed Aug 1, 2024
1 parent 6a0edef commit 2df2fb3
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 22 deletions.
5 changes: 3 additions & 2 deletions apps/dav/lib/CalDAV/Reminder/Backend.php
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,12 @@ public function __construct(IDBConnection $db,
*/
public function getRemindersToProcess():array {
$query = $this->db->getQueryBuilder();
$query->select(['cr.*', 'co.calendardata', 'c.displayname', 'c.principaluri'])
$query->select(['cr.*', 'co.calendardata', 'c.displayname', 'c.principaluri','cr.notification_date', 'cr.event_hash'])
->from('calendar_reminders', 'cr')
->where($query->expr()->lte('cr.notification_date', $query->createNamedParameter($this->timeFactory->getTime())))
->join('cr', 'calendarobjects', 'co', $query->expr()->eq('cr.object_id', 'co.id'))
->join('cr', 'calendars', 'c', $query->expr()->eq('cr.calendar_id', 'c.id'));
->join('cr', 'calendars', 'c', $query->expr()->eq('cr.calendar_id', 'c.id'))
->groupBy('cr.event_hash', 'cr.notification_date');
$stmt = $query->execute();

return array_map(
Expand Down
7 changes: 7 additions & 0 deletions apps/dav/lib/CalDAV/Reminder/ReminderService.php
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,14 @@ private function getRemindersForVAlarm(VAlarm $valarm,
* @param array $reminders
*/
private function writeRemindersToDatabase(array $reminders): void {
$uniqueReminders = [];
foreach ($reminders as $reminder) {
$key = $reminder['notification_date']. $reminder['event_hash'];
if(!isset($uniqueReminders[$key])) {
$uniqueReminders[$key] = $reminder;
}
}
foreach (array_values($uniqueReminders) as $reminder) {
$this->backend->insertReminder(
(int) $reminder['calendar_id'],
(int) $reminder['object_id'],
Expand Down
21 changes: 1 addition & 20 deletions apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,8 @@ public function testGetRemindersToProcess(): void {

$rows = $this->reminderBackend->getRemindersToProcess();

$this->assertCount(2, $rows);
$this->assertCount(1, $rows);
unset($rows[0]['id']);
unset($rows[1]['id']);

$this->assertEquals($rows[0], [
'calendar_id' => 1,
Expand All @@ -135,25 +134,7 @@ public function testGetRemindersToProcess(): void {
'displayname' => 'Displayname 123',
'principaluri' => 'principals/users/user001',
]);
$this->assertEquals($rows[1], [
'calendar_id' => 1,
'object_id' => 1,
'uid' => 'asd',
'is_recurring' => false,
'recurrence_id' => 123458,
'is_recurrence_exception' => false,
'event_hash' => 'asd123',
'alarm_hash' => 'asd567',
'type' => 'AUDIO',
'is_relative' => true,
'notification_date' => 123456,
'is_repeat_based' => false,
'calendardata' => 'Calendar data 123',
'displayname' => 'Displayname 123',
'principaluri' => 'principals/users/user001',
]);
}

public function testGetAllScheduledRemindersForEvent(): void {
$rows = $this->reminderBackend->getAllScheduledRemindersForEvent(1);

Expand Down

0 comments on commit 2df2fb3

Please sign in to comment.