diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index a9c862e2e9b6c..ede6993f4aab3 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -286,6 +286,11 @@ 'OCP\\Contacts\\ContactsMenu\\IProvider' => $baseDir . '/lib/public/Contacts/ContactsMenu/IProvider.php', 'OCP\\Contacts\\Events\\ContactInteractedWithEvent' => $baseDir . '/lib/public/Contacts/Events/ContactInteractedWithEvent.php', 'OCP\\Contacts\\IManager' => $baseDir . '/lib/public/Contacts/IManager.php', + 'OCP\\ContextChat\\ContentItem' => $baseDir . '/lib/public/ContextChat/ContentItem.php', + 'OCP\\ContextChat\\Events\\ContentProviderRegisterEvent' => $baseDir . '/lib/public/ContextChat/Events/ContentProviderRegisterEvent.php', + 'OCP\\ContextChat\\IContentManager' => $baseDir . '/lib/public/ContextChat/IContentManager.php', + 'OCP\\ContextChat\\IContentProvider' => $baseDir . '/lib/public/ContextChat/IContentProvider.php', + 'OCP\\ContextChat\\Type\\UpdateAccessOp' => $baseDir . '/lib/public/ContextChat/Type/UpdateAccessOp.php', 'OCP\\DB\\Events\\AddMissingColumnsEvent' => $baseDir . '/lib/public/DB/Events/AddMissingColumnsEvent.php', 'OCP\\DB\\Events\\AddMissingIndicesEvent' => $baseDir . '/lib/public/DB/Events/AddMissingIndicesEvent.php', 'OCP\\DB\\Events\\AddMissingPrimaryKeyEvent' => $baseDir . '/lib/public/DB/Events/AddMissingPrimaryKeyEvent.php', @@ -1216,6 +1221,7 @@ 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php', 'OC\\Contacts\\ContactsMenu\\Providers\\LocalTimeProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/LocalTimeProvider.php', 'OC\\Contacts\\ContactsMenu\\Providers\\ProfileProvider' => $baseDir . '/lib/private/Contacts/ContactsMenu/Providers/ProfileProvider.php', + 'OC\\ContextChat\\ContentManager' => $baseDir . '/lib/private/ContextChat/ContentManager.php', 'OC\\Core\\AppInfo\\Application' => $baseDir . '/core/AppInfo/Application.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => $baseDir . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', 'OC\\Core\\BackgroundJobs\\CheckForUserCertificates' => $baseDir . '/core/BackgroundJobs/CheckForUserCertificates.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 6217566aa716b..27e832438db09 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -327,6 +327,11 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OCP\\Contacts\\ContactsMenu\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Contacts/ContactsMenu/IProvider.php', 'OCP\\Contacts\\Events\\ContactInteractedWithEvent' => __DIR__ . '/../../..' . '/lib/public/Contacts/Events/ContactInteractedWithEvent.php', 'OCP\\Contacts\\IManager' => __DIR__ . '/../../..' . '/lib/public/Contacts/IManager.php', + 'OCP\\ContextChat\\ContentItem' => __DIR__ . '/../../..' . '/lib/public/ContextChat/ContentItem.php', + 'OCP\\ContextChat\\Events\\ContentProviderRegisterEvent' => __DIR__ . '/../../..' . '/lib/public/ContextChat/Events/ContentProviderRegisterEvent.php', + 'OCP\\ContextChat\\IContentManager' => __DIR__ . '/../../..' . '/lib/public/ContextChat/IContentManager.php', + 'OCP\\ContextChat\\IContentProvider' => __DIR__ . '/../../..' . '/lib/public/ContextChat/IContentProvider.php', + 'OCP\\ContextChat\\Type\\UpdateAccessOp' => __DIR__ . '/../../..' . '/lib/public/ContextChat/Type/UpdateAccessOp.php', 'OCP\\DB\\Events\\AddMissingColumnsEvent' => __DIR__ . '/../../..' . '/lib/public/DB/Events/AddMissingColumnsEvent.php', 'OCP\\DB\\Events\\AddMissingIndicesEvent' => __DIR__ . '/../../..' . '/lib/public/DB/Events/AddMissingIndicesEvent.php', 'OCP\\DB\\Events\\AddMissingPrimaryKeyEvent' => __DIR__ . '/../../..' . '/lib/public/DB/Events/AddMissingPrimaryKeyEvent.php', @@ -1257,6 +1262,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OC\\Contacts\\ContactsMenu\\Providers\\EMailProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/EMailProvider.php', 'OC\\Contacts\\ContactsMenu\\Providers\\LocalTimeProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/LocalTimeProvider.php', 'OC\\Contacts\\ContactsMenu\\Providers\\ProfileProvider' => __DIR__ . '/../../..' . '/lib/private/Contacts/ContactsMenu/Providers/ProfileProvider.php', + 'OC\\ContextChat\\ContentManager' => __DIR__ . '/../../..' . '/lib/private/ContextChat/ContentManager.php', 'OC\\Core\\AppInfo\\Application' => __DIR__ . '/../../..' . '/core/AppInfo/Application.php', 'OC\\Core\\BackgroundJobs\\BackgroundCleanupUpdaterBackupsJob' => __DIR__ . '/../../..' . '/core/BackgroundJobs/BackgroundCleanupUpdaterBackupsJob.php', 'OC\\Core\\BackgroundJobs\\CheckForUserCertificates' => __DIR__ . '/../../..' . '/core/BackgroundJobs/CheckForUserCertificates.php', diff --git a/lib/private/ContextChat/ContentManager.php b/lib/private/ContextChat/ContentManager.php new file mode 100644 index 0000000000000..3324ce6c7007e --- /dev/null +++ b/lib/private/ContextChat/ContentManager.php @@ -0,0 +1,56 @@ +contentManager !== null; + } + + public function registerContentProvider(string $appId, string $providerId, string $providerClass): void { + $this->contentManager?->registerContentProvider($appId, $providerId, $providerClass); + } + + public function collectAllContentProviders(): void { + $this->contentManager?->collectAllContentProviders(); + } + + public function submitContent(string $appId, array $items): void { + $this->contentManager?->submitContent($appId, $items); + } + + public function updateAccess(string $appId, string $providerId, string $itemId, string $op, array $userIds): void { + $this->contentManager?->updateAccess($appId, $providerId, $itemId, $op, $userIds); + } + + public function updateAccessProvider(string $appId, string $providerId, string $op, array $userIds): void { + $this->contentManager?->updateAccessProvider($appId, $providerId, $op, $userIds); + } + + public function updateAccessDeclarative(string $appId, string $providerId, string $itemId, array $userIds): void { + $this->contentManager?->updateAccessDeclarative($appId, $providerId, $itemId, $op, $userIds); + } + + public function deleteProvider(string $appId, string $providerId): void { + $this->contentManager?->deleteProvider($appId, $providerId); + } + + public function deleteContent(string $appId, string $providerId, array $itemIds): void { + $this->contentManager?->deleteContent($appId, $providerId, $itemIds); + } +} diff --git a/lib/private/Server.php b/lib/private/Server.php index 4b88a446405a5..1e1ba2a1ad36d 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -277,6 +277,8 @@ public function __construct($webRoot, \OC\Config $config) { $this->registerAlias(\OCP\Contacts\IManager::class, \OC\ContactsManager::class); + $this->registerAlias(\OCP\ContextChat\IContentManager::class, \OC\ContextChat\ContentManager::class); + $this->registerAlias(\OCP\DirectEditing\IManager::class, \OC\DirectEditing\Manager::class); $this->registerAlias(ITemplateManager::class, TemplateManager::class); $this->registerAlias(\OCP\Template\ITemplateManager::class, \OC\Template\TemplateManager::class); diff --git a/lib/public/ContextChat/ContentItem.php b/lib/public/ContextChat/ContentItem.php new file mode 100644 index 0000000000000..2b5289ba3506b --- /dev/null +++ b/lib/public/ContextChat/ContentItem.php @@ -0,0 +1,57 @@ + $providerClass + * @return void + * @since 32.0.0 + */ + public function registerContentProvider(string $appId, string $providerId, string $providerClass): void { + $this->contentManager->registerContentProvider($appId, $providerId, $providerClass); + } +} diff --git a/lib/public/ContextChat/IContentManager.php b/lib/public/ContextChat/IContentManager.php new file mode 100644 index 0000000000000..54e4880929115 --- /dev/null +++ b/lib/public/ContextChat/IContentManager.php @@ -0,0 +1,115 @@ + $providerClass + * @return void + * @since 32.0.0 + */ + public function registerContentProvider(string $appId, string $providerId, string $providerClass): void; + + /** + * Emits an event to collect all content providers + * + * @return void + * @since 32.0.0 + */ + public function collectAllContentProviders(): void; + + /** + * Providers can use this to submit content for indexing in context chat + * + * @param string $appId + * @param ContentItem[] $items + * @return void + * @since 32.0.0 + */ + public function submitContent(string $appId, array $items): void; + + /** + * Update access for a content item for specified users. + * This modifies the access list for the content item, + * allowing or denying access to the specified users. + * If no user has access to the content item, it will be removed from the knowledge base. + * + * @param string $appId + * @param string $providerId + * @param string $itemId + * @param Type\UpdateAccessOp::* $op + * @param array $userIds + * @return void + * @since 32.0.0 + */ + public function updateAccess(string $appId, string $providerId, string $itemId, string $op, array $userIds): void; + + /** + * Update access for content items from the given provider for specified users. + * If no user has access to the content item, it will be removed from the knowledge base. + * + * @param string $appId + * @param string $providerId + * @param Type\UpdateAccessOp::* $op + * @param array $userIds + * @return void + * @since 32.0.0 + */ + public function updateAccessProvider(string $appId, string $providerId, string $op, array $userIds): void; + + /** + * Update access for a content item for specified users declaratively. + * This overwrites the access list for the content item, + * allowing only the specified users access to it. + * + * @param string $appId + * @param string $providerId + * @param string $itemId + * @param array $userIds + * @return void + * @since 32.0.0 + */ + public function updateAccessDeclarative(string $appId, string $providerId, string $itemId, array $userIds): void; + + /** + * Delete all content items and access lists for a provider. + * This does not unregister the provider itself. + * + * @param string $appId + * @param string $providerId + * @return void + * @since 32.0.0 + */ + public function deleteProvider(string $appId, string $providerId): void; + + /** + * Remove a content item from the knowledge base of context chat. + * + * @param string $appId + * @param string $providerId + * @param string[] $itemIds + * @return void + * @since 32.0.0 + */ + public function deleteContent(string $appId, string $providerId, array $itemIds): void; +} diff --git a/lib/public/ContextChat/IContentProvider.php b/lib/public/ContextChat/IContentProvider.php new file mode 100644 index 0000000000000..b0c736e3c8855 --- /dev/null +++ b/lib/public/ContextChat/IContentProvider.php @@ -0,0 +1,49 @@ + +