mirror of
https://github.com/nextcloud/server.git
synced 2026-04-21 14:23:17 -04:00
feat(files_sharing): Support priority in public template providers
Signed-off-by: Louis Chmn <louis@chmn.me>
This commit is contained in:
parent
1c7ed89855
commit
10b82c8bf8
4 changed files with 40 additions and 0 deletions
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCP\Share;
|
||||
|
||||
use OCP\AppFramework\Attribute\Consumable;
|
||||
use OCP\AppFramework\Attribute\Implementable;
|
||||
|
||||
/**
|
||||
* Allow providers to specify a priority for selection when multiple providers can handle a share.
|
||||
*
|
||||
* @since 33.0.0
|
||||
*/
|
||||
#[Consumable(since: '33.0.0')]
|
||||
#[Implementable(since: '33.0.0')]
|
||||
interface IPublicShareTemplateProviderWithPriority {
|
||||
/**
|
||||
* Returns the priority of the provider. Lower values indicate higher priority.
|
||||
*
|
||||
* @since 33.0.0
|
||||
*/
|
||||
public function getPriority(): int;
|
||||
}
|
||||
Loading…
Reference in a new issue