aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/dav/lib/Settings/AvailabilitySettings.php8
-rw-r--r--lib/private/User/AvailabilityCoordinator.php11
-rw-r--r--lib/public/User/IAvailabilityCoordinator.php9
-rw-r--r--tests/lib/User/AvailabilityCoordinatorTest.php16
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);