From f249a487ff0218205b46ecf0c710d40ad3bb4ebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Molakvo=C3=A6=20=28skjnldsv=29?= Date: Fri, 4 Apr 2025 04:24:05 +0200 Subject: [PATCH] fix(systemtags): emit assign and unassign bulk tagging events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: John Molakvoæ (skjnldsv) --- apps/systemtags/lib/Activity/Provider.php | 2 +- lib/private/SystemTag/SystemTagObjectMapper.php | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/systemtags/lib/Activity/Provider.php b/apps/systemtags/lib/Activity/Provider.php index c979f8143a8ea..f9f15f558303f 100644 --- a/apps/systemtags/lib/Activity/Provider.php +++ b/apps/systemtags/lib/Activity/Provider.php @@ -286,7 +286,7 @@ protected function getSystemTagParameter($parameter) { if ($tagData === null) { [$name, $status] = explode('|||', substr($parameter, 3, -3)); $tagData = [ - 'id' => '0',// No way to recover the ID + 'id' => '0', // No way to recover the ID 'name' => $name, 'assignable' => $status === 'assignable', 'visible' => $status !== 'invisible', diff --git a/lib/private/SystemTag/SystemTagObjectMapper.php b/lib/private/SystemTag/SystemTagObjectMapper.php index 3881336bf3780..1fa5975dafb16 100644 --- a/lib/private/SystemTag/SystemTagObjectMapper.php +++ b/lib/private/SystemTag/SystemTagObjectMapper.php @@ -287,6 +287,7 @@ public function setObjectIdsForTag(string $tagId, string $objectType, array $obj $currentObjectIds = $this->getObjectIdsForTags($tagId, $objectType); $removedObjectIds = array_diff($currentObjectIds, $objectIds); $addedObjectIds = array_diff($objectIds, $currentObjectIds); + $this->connection->beginTransaction(); $query = $this->connection->getQueryBuilder(); $query->delete(self::RELATION_TABLE) @@ -324,6 +325,8 @@ public function setObjectIdsForTag(string $tagId, string $objectType, array $obj $this->updateEtagForTags([$tagId]); $this->connection->commit(); + + // Dispatch assign events for new object ids foreach ($addedObjectIds as $objectId) { $this->dispatcher->dispatch(MapperEvent::EVENT_ASSIGN, new MapperEvent( MapperEvent::EVENT_ASSIGN, @@ -332,6 +335,16 @@ public function setObjectIdsForTag(string $tagId, string $objectType, array $obj [(int)$tagId] )); } + + // Dispatch unassign events for removed object ids + foreach ($removedObjectIds as $objectId) { + $this->dispatcher->dispatch(MapperEvent::EVENT_UNASSIGN, new MapperEvent( + MapperEvent::EVENT_UNASSIGN, + $objectType, + (string)$objectId, + [(int)$tagId] + )); + } } /**