Merge pull request #41501 from nextcloud/feat/dav/show-ooo-ui-by-default

feat(dav): Enable OOO UI and expose enabled via OCP
pull/41465/head
Christoph Wurst 2023-11-15 18:26:27 +07:00 committed by GitHub
commit 33e07121d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 39 additions and 5 deletions

@ -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 {

@ -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) {

@ -33,6 +33,15 @@ use OCP\IUser;
* @since 28.0.0
*/
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
*

@ -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);