Skip to content

Commit

Permalink
feat(dav): Enable OOO UI and expose enabled via OCP
Browse files Browse the repository at this point in the history
Makes the feature opt-out now that we have meaningful integrations based
on OOO data. Allows instances still to turn the feature off.

For apps like Mail that build on top of this feature we need to know if
the instance has the feature turned on or off. This is exposed as OCP
API, too.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
  • Loading branch information
ChristophWurst committed Nov 15, 2023
1 parent 7e911ac commit 69a9a5d
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
8 changes: 3 additions & 5 deletions apps/dav/lib/Settings/AvailabilitySettings.php
Expand Up @@ -33,6 +33,7 @@
use OCP\AppFramework\Services\IInitialState;
use OCP\IConfig;
use OCP\Settings\ISettings;
use OCP\User\IAvailabilityCoordinator;
use Psr\Log\LoggerInterface;

class AvailabilitySettings implements ISettings {
Expand All @@ -44,6 +45,7 @@ public function __construct(IConfig $config,
IInitialState $initialState,
?string $userId,
private LoggerInterface $logger,
private IAvailabilityCoordinator $coordinator,
private AbsenceMapper $absenceMapper) {
$this->config = $config;
$this->initialState = $initialState;
Expand All @@ -60,11 +62,7 @@ public function getForm(): TemplateResponse {
'no'
)
);
$hideAbsenceSettings = $this->config->getAppValue(
Application::APP_ID,
'hide_absence_settings',
'no',
) === 'yes';
$hideAbsenceSettings = !$this->coordinator->isEnabled();
$this->initialState->provideInitialState('hide_absence_settings', $hideAbsenceSettings);
if (!$hideAbsenceSettings) {
try {
Expand Down
11 changes: 11 additions & 0 deletions lib/private/User/AvailabilityCoordinator.php
Expand Up @@ -27,10 +27,12 @@
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;
Expand All @@ -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) {
Expand Down
9 changes: 9 additions & 0 deletions lib/public/User/IAvailabilityCoordinator.php
Expand Up @@ -33,6 +33,15 @@
* @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
*
Expand Down

0 comments on commit 69a9a5d

Please sign in to comment.