From 10b82c8bf81b8d37c267d1b897fcb5fcd95c9449 Mon Sep 17 00:00:00 2001 From: Louis Chmn Date: Thu, 4 Dec 2025 10:59:58 +0100 Subject: [PATCH] feat(files_sharing): Support priority in public template providers Signed-off-by: Louis Chmn --- lib/composer/composer/autoload_classmap.php | 1 + lib/composer/composer/autoload_static.php | 1 + .../Share20/PublicShareTemplateFactory.php | 10 +++++++ ...ublicShareTemplateProviderWithPriority.php | 28 +++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 lib/public/Share/IPublicShareTemplateProviderWithPriority.php diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 0269912e864..dd141bec085 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -814,6 +814,7 @@ return array( 'OCP\\Share\\IProviderFactory' => $baseDir . '/lib/public/Share/IProviderFactory.php', 'OCP\\Share\\IPublicShareTemplateFactory' => $baseDir . '/lib/public/Share/IPublicShareTemplateFactory.php', 'OCP\\Share\\IPublicShareTemplateProvider' => $baseDir . '/lib/public/Share/IPublicShareTemplateProvider.php', + 'OCP\\Share\\IPublicShareTemplateProviderWithPriority' => $baseDir . '/lib/public/Share/IPublicShareTemplateProviderWithPriority.php', 'OCP\\Share\\IShare' => $baseDir . '/lib/public/Share/IShare.php', 'OCP\\Share\\IShareHelper' => $baseDir . '/lib/public/Share/IShareHelper.php', 'OCP\\Share\\IShareProvider' => $baseDir . '/lib/public/Share/IShareProvider.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index 9a6bd60c293..4e59fa0ba49 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -855,6 +855,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2 'OCP\\Share\\IProviderFactory' => __DIR__ . '/../../..' . '/lib/public/Share/IProviderFactory.php', 'OCP\\Share\\IPublicShareTemplateFactory' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateFactory.php', 'OCP\\Share\\IPublicShareTemplateProvider' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateProvider.php', + 'OCP\\Share\\IPublicShareTemplateProviderWithPriority' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateProviderWithPriority.php', 'OCP\\Share\\IShare' => __DIR__ . '/../../..' . '/lib/public/Share/IShare.php', 'OCP\\Share\\IShareHelper' => __DIR__ . '/../../..' . '/lib/public/Share/IShareHelper.php', 'OCP\\Share\\IShareProvider' => __DIR__ . '/../../..' . '/lib/public/Share/IShareProvider.php', diff --git a/lib/private/Share20/PublicShareTemplateFactory.php b/lib/private/Share20/PublicShareTemplateFactory.php index 34dd9b13b61..d1079cc9662 100644 --- a/lib/private/Share20/PublicShareTemplateFactory.php +++ b/lib/private/Share20/PublicShareTemplateFactory.php @@ -13,9 +13,12 @@ use OCA\Files_Sharing\DefaultPublicShareTemplateProvider; use OCP\Server; use OCP\Share\IPublicShareTemplateFactory; use OCP\Share\IPublicShareTemplateProvider; +use OCP\Share\IPublicShareTemplateProviderWithPriority; use OCP\Share\IShare; class PublicShareTemplateFactory implements IPublicShareTemplateFactory { + public const DEFAULT_PRIORITY = 10; + public function __construct( private Coordinator $coordinator, private DefaultPublicShareTemplateProvider $defaultProvider, @@ -41,6 +44,13 @@ class PublicShareTemplateFactory implements IPublicShareTemplateFactory { if (count($filteredProviders) === 0) { return $this->defaultProvider; } else { + usort($filteredProviders, function (IPublicShareTemplateProvider $a, IPublicShareTemplateProvider $b) { + $aPriority = $a instanceof IPublicShareTemplateProviderWithPriority ? $a->getPriority() : self::DEFAULT_PRIORITY; + $bPriority = $b instanceof IPublicShareTemplateProviderWithPriority ? $b->getPriority() : self::DEFAULT_PRIORITY; + + return $aPriority <=> $bPriority; + }); + return array_shift($filteredProviders); } } diff --git a/lib/public/Share/IPublicShareTemplateProviderWithPriority.php b/lib/public/Share/IPublicShareTemplateProviderWithPriority.php new file mode 100644 index 00000000000..2e2d0e7e462 --- /dev/null +++ b/lib/public/Share/IPublicShareTemplateProviderWithPriority.php @@ -0,0 +1,28 @@ +