diff options
-rw-r--r-- | apps/dav/lib/Settings/AvailabilitySettings.php | 8 | ||||
-rw-r--r-- | lib/private/User/AvailabilityCoordinator.php | 11 | ||||
-rw-r--r-- | lib/public/User/IAvailabilityCoordinator.php | 9 | ||||
-rw-r--r-- | tests/lib/User/AvailabilityCoordinatorTest.php | 16 |
4 files changed, 39 insertions, 5 deletions
diff --git a/apps/dav/lib/Settings/AvailabilitySettings.php b/apps/dav/lib/Settings/AvailabilitySettings.php index e2f2fe7cef6..c48ebe0255e 100644 --- a/apps/dav/lib/Settings/AvailabilitySettings.php +++ b/apps/dav/lib/Settings/AvailabilitySettings.php @@ -33,6 +33,7 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; use OCP\IConfig; use OCP\Settings\ISettings; +use OCP\User\IAvailabilityCoordinator; use Psr\Log\LoggerInterface; class AvailabilitySettings implements ISettings { @@ -44,6 +45,7 @@ class AvailabilitySettings implements ISettings { IInitialState $initialState, ?string $userId, private LoggerInterface $logger, + private IAvailabilityCoordinator $coordinator, private AbsenceMapper $absenceMapper) { $this->config = $config; $this->initialState = $initialState; @@ -60,11 +62,7 @@ class AvailabilitySettings implements ISettings { 'no' ) ); - $hideAbsenceSettings = $this->config->getAppValue( - Application::APP_ID, - 'hide_absence_settings', - 'yes', - ) === 'yes'; + $hideAbsenceSettings = !$this->coordinator->isEnabled(); $this->initialState->provideInitialState('hide_absence_settings', $hideAbsenceSettings); if (!$hideAbsenceSettings) { try { diff --git a/lib/private/User/AvailabilityCoordinator.php b/lib/private/User/AvailabilityCoordinator.php index fe0db92fd0f..8e6b73bd56d 100644 --- a/lib/private/User/AvailabilityCoordinator.php +++ b/lib/private/User/AvailabilityCoordinator.php @@ -27,10 +27,12 @@ declare(strict_types=1); namespace OC\User; use JsonException; +use OCA\DAV\AppInfo\Application; use OCA\DAV\Db\AbsenceMapper; use OCP\AppFramework\Db\DoesNotExistException; use OCP\ICache; use OCP\ICacheFactory; +use OCP\IConfig; use OCP\IUser; use OCP\User\IAvailabilityCoordinator; use OCP\User\IOutOfOfficeData; @@ -42,11 +44,20 @@ class AvailabilityCoordinator implements IAvailabilityCoordinator { public function __construct( ICacheFactory $cacheFactory, private AbsenceMapper $absenceMapper, + private IConfig $config, private LoggerInterface $logger, ) { $this->cache = $cacheFactory->createLocal('OutOfOfficeData'); } + public function isEnabled(): bool { + return $this->config->getAppValue( + Application::APP_ID, + 'hide_absence_settings', + 'no', + ) === 'no'; + } + private function getCachedOutOfOfficeData(IUser $user): ?OutOfOfficeData { $cachedString = $this->cache->get($user->getUID()); if ($cachedString === null) { diff --git a/lib/public/User/IAvailabilityCoordinator.php b/lib/public/User/IAvailabilityCoordinator.php index 113e3491714..749241f13bc 100644 --- a/lib/public/User/IAvailabilityCoordinator.php +++ b/lib/public/User/IAvailabilityCoordinator.php @@ -34,6 +34,15 @@ use OCP\IUser; */ interface IAvailabilityCoordinator { /** + * Check if the feature is enabled on this instance + * + * @return bool + * + * @since 28.0.0 + */ + public function isEnabled(): bool; + + /** * Get the user's out-of-office message, if any * * @since 28.0.0 diff --git a/tests/lib/User/AvailabilityCoordinatorTest.php b/tests/lib/User/AvailabilityCoordinatorTest.php index 8e847f7e5d5..fd850fcdfd7 100644 --- a/tests/lib/User/AvailabilityCoordinatorTest.php +++ b/tests/lib/User/AvailabilityCoordinatorTest.php @@ -32,7 +32,9 @@ use OCA\DAV\Db\Absence; use OCA\DAV\Db\AbsenceMapper; use OCP\ICache; use OCP\ICacheFactory; +use OCP\IConfig; use OCP\IUser; +use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; use Test\TestCase; @@ -40,6 +42,7 @@ class AvailabilityCoordinatorTest extends TestCase { private AvailabilityCoordinator $availabilityCoordinator; private ICacheFactory $cacheFactory; private ICache $cache; + private IConfig|MockObject $config; private AbsenceMapper $absenceMapper; private LoggerInterface $logger; @@ -49,6 +52,7 @@ class AvailabilityCoordinatorTest extends TestCase { $this->cacheFactory = $this->createMock(ICacheFactory::class); $this->cache = $this->createMock(ICache::class); $this->absenceMapper = $this->createMock(AbsenceMapper::class); + $this->config = $this->createMock(IConfig::class); $this->logger = $this->createMock(LoggerInterface::class); $this->cacheFactory->expects(self::once()) @@ -58,10 +62,22 @@ class AvailabilityCoordinatorTest extends TestCase { $this->availabilityCoordinator = new AvailabilityCoordinator( $this->cacheFactory, $this->absenceMapper, + $this->config, $this->logger, ); } + public function testIsEnabled(): void { + $this->config->expects(self::once()) + ->method('getAppValue') + ->with('dav', 'hide_absence_settings', 'no') + ->willReturn('no'); + + $isEnabled = $this->availabilityCoordinator->isEnabled(); + + self::assertTrue($isEnabled); + } + public function testGetOutOfOfficeData(): void { $absence = new Absence(); $absence->setId(420); |