aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-06-25 18:03:13 +0200
committerGitHub <noreply@github.com>2024-06-25 18:03:13 +0200
commit6f34a47f5a565be8028e48c56e7b8997c26667fc (patch)
tree522583e154eced778268f540b874e4f49b31f0af /apps
parentf7217e136b10eb3b5656f769185c4a647bbb4537 (diff)
parent9aca14681b1d03a640abd6181286a7be3dba1fad (diff)
downloadnextcloud-server-6f34a47f5a565be8028e48c56e7b8997c26667fc.tar.gz
nextcloud-server-6f34a47f5a565be8028e48c56e7b8997c26667fc.zip
Merge pull request #45906 from nextcloud/backport/45884/stable29
[stable29] fix(files): Properly handle denied ownership transfers
Diffstat (limited to 'apps')
-rw-r--r--apps/files/lib/Controller/TransferOwnershipController.php14
-rw-r--r--apps/files/lib/Notification/Notifier.php49
2 files changed, 34 insertions, 29 deletions
diff --git a/apps/files/lib/Controller/TransferOwnershipController.php b/apps/files/lib/Controller/TransferOwnershipController.php
index 2c46b85f9a0..eec654bd678 100644
--- a/apps/files/lib/Controller/TransferOwnershipController.php
+++ b/apps/files/lib/Controller/TransferOwnershipController.php
@@ -208,20 +208,10 @@ class TransferOwnershipController extends OCSController {
->setObject('transfer', (string)$id);
$this->notificationManager->markProcessed($notification);
- $notification = $this->notificationManager->createNotification();
- $notification->setUser($transferOwnership->getSourceUser())
- ->setApp($this->appName)
- ->setDateTime($this->timeFactory->getDateTime())
- ->setSubject('transferownershipRequestDenied', [
- 'sourceUser' => $transferOwnership->getSourceUser(),
- 'targetUser' => $transferOwnership->getTargetUser(),
- 'nodeName' => $transferOwnership->getNodeName()
- ])
- ->setObject('transfer', (string)$transferOwnership->getId());
- $this->notificationManager->notify($notification);
-
$this->mapper->delete($transferOwnership);
+ // A "request denied" notification will be created by Notifier::dismissNotification
+
return new DataResponse([], Http::STATUS_OK);
}
}
diff --git a/apps/files/lib/Notification/Notifier.php b/apps/files/lib/Notification/Notifier.php
index 0968ae15f54..10954ac9c64 100644
--- a/apps/files/lib/Notification/Notifier.php
+++ b/apps/files/lib/Notification/Notifier.php
@@ -88,23 +88,15 @@ class Notifier implements INotifier, IDismissableNotifier {
throw new \InvalidArgumentException('Unhandled app');
}
- if ($notification->getSubject() === 'transferownershipRequest') {
- return $this->handleTransferownershipRequest($notification, $languageCode);
- }
- if ($notification->getSubject() === 'transferOwnershipFailedSource') {
- return $this->handleTransferOwnershipFailedSource($notification, $languageCode);
- }
- if ($notification->getSubject() === 'transferOwnershipFailedTarget') {
- return $this->handleTransferOwnershipFailedTarget($notification, $languageCode);
- }
- if ($notification->getSubject() === 'transferOwnershipDoneSource') {
- return $this->handleTransferOwnershipDoneSource($notification, $languageCode);
- }
- if ($notification->getSubject() === 'transferOwnershipDoneTarget') {
- return $this->handleTransferOwnershipDoneTarget($notification, $languageCode);
- }
-
- throw new \InvalidArgumentException('Unhandled subject');
+ return match($notification->getSubject()) {
+ 'transferownershipRequest' => $this->handleTransferownershipRequest($notification, $languageCode),
+ 'transferownershipRequestDenied' => $this->handleTransferOwnershipRequestDenied($notification, $languageCode),
+ 'transferOwnershipFailedSource' => $this->handleTransferOwnershipFailedSource($notification, $languageCode),
+ 'transferOwnershipFailedTarget' => $this->handleTransferOwnershipFailedTarget($notification, $languageCode),
+ 'transferOwnershipDoneSource' => $this->handleTransferOwnershipDoneSource($notification, $languageCode),
+ 'transferOwnershipDoneTarget' => $this->handleTransferOwnershipDoneTarget($notification, $languageCode),
+ default => throw new \InvalidArgumentException('Unhandled subject')
+ };
}
public function handleTransferownershipRequest(INotification $notification, string $languageCode): INotification {
@@ -163,6 +155,29 @@ class Notifier implements INotifier, IDismissableNotifier {
return $notification;
}
+ public function handleTransferOwnershipRequestDenied(INotification $notification, string $languageCode): INotification {
+ $l = $this->l10nFactory->get('files', $languageCode);
+ $param = $notification->getSubjectParameters();
+
+ $targetUser = $this->getUser($param['targetUser']);
+ $notification->setRichSubject($l->t('Ownership transfer denied'))
+ ->setRichMessage(
+ $l->t('Your ownership transfer of {path} was denied by {user}.'),
+ [
+ 'path' => [
+ 'type' => 'highlight',
+ 'id' => $param['targetUser'] . '::' . $param['nodeName'],
+ 'name' => $param['nodeName'],
+ ],
+ 'user' => [
+ 'type' => 'user',
+ 'id' => $targetUser->getUID(),
+ 'name' => $targetUser->getDisplayName(),
+ ],
+ ]);
+ return $notification;
+ }
+
public function handleTransferOwnershipFailedSource(INotification $notification, string $languageCode): INotification {
$l = $this->l10nFactory->get('files', $languageCode);
$param = $notification->getSubjectParameters();