diff --git a/lib/private/SystemTag/SystemTagManager.php b/lib/private/SystemTag/SystemTagManager.php index 2b8992f0aef35..3a9b48eec1ff2 100644 --- a/lib/private/SystemTag/SystemTagManager.php +++ b/lib/private/SystemTag/SystemTagManager.php @@ -150,6 +150,15 @@ public function getTag(string $tagName, bool $userVisible, bool $userAssignable) return $this->createSystemTagFromRow($row); } + #[\Override] + public function getGeneratedByAITag(): ISystemTag { + try { + return $this->getTag(ISystemTag::GENERATED_BY_AI, true, true); + } catch (TagNotFoundException) { + return $this->createTag(ISystemTag::GENERATED_BY_AI, true, true); + } + } + public function createTag(string $tagName, bool $userVisible, bool $userAssignable): ISystemTag { $user = $this->userSession->getUser(); if (!$this->canUserCreateTag($user)) { diff --git a/lib/private/SystemTag/SystemTagObjectMapper.php b/lib/private/SystemTag/SystemTagObjectMapper.php index 508adb8c88c6c..43dddde0b2361 100644 --- a/lib/private/SystemTag/SystemTagObjectMapper.php +++ b/lib/private/SystemTag/SystemTagObjectMapper.php @@ -176,6 +176,12 @@ public function assignTags(string $objId, string $objectType, $tagIds): void { $this->dispatcher->dispatchTyped(new TagAssignedEvent($objectType, [$objId], $tagsAssigned)); } + #[Override] + public function assignGeneratedByAITag(string $objId, string $objectType) { + $tag = $this->tagManager->getGeneratedByAITag(); + $this->assignTags($objId, $objectType, [$tag->getId()]); + } + #[Override] public function unassignTags(string $objId, string $objectType, $tagIds): void { if (!\is_array($tagIds)) { diff --git a/lib/public/SystemTag/ISystemTag.php b/lib/public/SystemTag/ISystemTag.php index 4fd93831955bf..df5506af69372 100644 --- a/lib/public/SystemTag/ISystemTag.php +++ b/lib/public/SystemTag/ISystemTag.php @@ -36,6 +36,11 @@ interface ISystemTag { ISystemTag::ACCESS_LEVEL_INVISIBLE => 'invisible', ]; + /** + * @since 34.0.0 + */ + public const GENERATED_BY_AI = 'Generated by AI'; + /** * Returns the tag id * diff --git a/lib/public/SystemTag/ISystemTagManager.php b/lib/public/SystemTag/ISystemTagManager.php index 96e775d640173..6df2cf3474b96 100644 --- a/lib/public/SystemTag/ISystemTagManager.php +++ b/lib/public/SystemTag/ISystemTagManager.php @@ -47,6 +47,14 @@ public function getTagsByIds($tagIds, ?IUser $user = null): array; */ public function getTag(string $tagName, bool $userVisible, bool $userAssignable): ISystemTag; + /** + * Returns the tag object to mark AI generated content with + * + * @return ISystemTag system tag + * @since 34.0.0 + */ + public function getGeneratedByAITag(): ISystemTag; + /** * Creates the tag object using the given attributes. * diff --git a/lib/public/SystemTag/ISystemTagObjectMapper.php b/lib/public/SystemTag/ISystemTagObjectMapper.php index 41760c1c4ff94..614f72ebc894f 100644 --- a/lib/public/SystemTag/ISystemTagObjectMapper.php +++ b/lib/public/SystemTag/ISystemTagObjectMapper.php @@ -81,6 +81,15 @@ public function getObjectIdsForTags($tagIds, string $objectType, int $limit = 0, */ public function assignTags(string $objId, string $objectType, $tagIds); + /** + * Assign the "Generated by AI" tag to the given object. + * + * @param string $objId object id + * @param string $objectType object type + * @since 34.0.0 + */ + public function assignGeneratedByAITag(string $objId, string $objectType); + /** * Unassign the given tags from the given object. *