Skip to content

Commit 60a60f6

Browse files
committed
fixup! fix: access shared trashbin objects
Signed-off-by: Hamza <hamzamahjoubi221@gmail.com>
1 parent 0379870 commit 60a60f6

3 files changed

Lines changed: 24 additions & 2 deletions

File tree

apps/dav/lib/CalDAV/CalDavBackend.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,9 @@ private function collectDeletedCalendarObjectsForPrincipal(string $principalUri,
12391239
if ($this->resultHasMorePermissiveEntry($result, $row['id'], $proxyOverlay)) {
12401240
continue;
12411241
}
1242-
$result[$row['id']] = $this->rowToDeletedCalendarObject($row, $row['calendaruri'], false, $proxyOverlay);
1242+
[, $ownerName] = Uri\split($row['calendarprincipaluri']);
1243+
$calendarUri = $proxyOverlay !== null ? $row['calendaruri'] . '_delegated_by_' . $ownerName : $row['calendaruri'];
1244+
$result[$row['id']] = $this->rowToDeletedCalendarObject($row, $calendarUri, false, $proxyOverlay);
12431245
}
12441246
$stmt->closeCursor();
12451247

@@ -1334,6 +1336,7 @@ private function rowToDeletedCalendarObject(array $row, string $calendarUri, boo
13341336
'etag' => '"' . $row['etag'] . '"',
13351337
'calendarid' => $row['calendarid'],
13361338
'calendaruri' => $calendarUri,
1339+
'sourcecalendaruri' => $row['calendaruri'],
13371340
'calendarprincipaluri' => $row['calendarprincipaluri'],
13381341
'size' => (int)$row['size'],
13391342
'component' => strtolower($row['componenttype']),
@@ -2720,7 +2723,9 @@ private function findDeletedCalendarObjectForPrincipal(int $id, string $principa
27202723
$stmt->closeCursor();
27212724

27222725
if ($row) {
2723-
return $this->rowToDeletedCalendarObject($row, $row['calendaruri'], true, $proxyOverlay);
2726+
[, $ownerName] = Uri\split($row['calendarprincipaluri']);
2727+
$calendarUri = $proxyOverlay !== null ? $row['calendaruri'] . '_delegated_by_' . $ownerName : $row['calendaruri'];
2728+
return $this->rowToDeletedCalendarObject($row, $calendarUri, true, $proxyOverlay);
27242729
}
27252730

27262731
// Check shared calendars; order by access ASC so the most permissive

apps/dav/lib/CalDAV/Trashbin/DeletedCalendarObject.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ public function getCalendarUri(): string {
115115
return $this->objectData['calendaruri'];
116116
}
117117

118+
public function getSourceCalendarUri(): string {
119+
return $this->objectData['sourcecalendaruri'] ?? $this->objectData['calendaruri'];
120+
}
121+
122+
public function getCalendarPrincipalUri(): ?string {
123+
return $this->objectData['calendarprincipaluri'] ?? null;
124+
}
125+
118126
#[\Override]
119127
public function getACL(): array {
120128
$acl = [

apps/dav/lib/CalDAV/Trashbin/Plugin.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
class Plugin extends ServerPlugin {
2828
public const PROPERTY_DELETED_AT = '{http://nextcloud.com/ns}deleted-at';
2929
public const PROPERTY_CALENDAR_URI = '{http://nextcloud.com/ns}calendar-uri';
30+
public const PROPERTY_SOURCE_CALENDAR_URI = '{http://nextcloud.com/ns}source-calendar-uri';
31+
public const PROPERTY_CALENDAR_OWNER_PRINCIPAL_URI = '{http://nextcloud.com/ns}calendar-owner-principal-uri';
3032
public const PROPERTY_RETENTION_DURATION = '{http://nextcloud.com/ns}trash-bin-retention-duration';
3133

3234
/** @var bool */
@@ -97,6 +99,13 @@ private function propFind(
9799
$propFind->handle(self::PROPERTY_CALENDAR_URI, function () use ($node) {
98100
return $node->getCalendarUri();
99101
});
102+
// needed in case of delegated or shared calendars
103+
$propFind->handle(self::PROPERTY_SOURCE_CALENDAR_URI, function () use ($node) {
104+
return $node->getSourceCalendarUri();
105+
});
106+
$propFind->handle(self::PROPERTY_CALENDAR_OWNER_PRINCIPAL_URI, function () use ($node) {
107+
return $node->getCalendarPrincipalUri();
108+
});
100109
}
101110
if ($node instanceof TrashbinHome) {
102111
$propFind->handle(self::PROPERTY_RETENTION_DURATION, function () use ($node) {

0 commit comments

Comments
 (0)