diff --git a/apps/dav/lib/BackgroundJob/UserStatusAutomation.php b/apps/dav/lib/BackgroundJob/UserStatusAutomation.php index 60c53e9bd0874..5f88fa122b778 100644 --- a/apps/dav/lib/BackgroundJob/UserStatusAutomation.php +++ b/apps/dav/lib/BackgroundJob/UserStatusAutomation.php @@ -89,7 +89,7 @@ protected function run($argument) { $this->logger->info('Removing ' . self::class . ' background job for user "' . $userId . '" because the user has no valid availability rules and no OOO data set'); $this->jobList->remove(self::class, $argument); $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_AVAILABILITY, IUserStatus::DND); - $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_VACATION, IUserStatus::DND); + $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND); return; } @@ -227,7 +227,7 @@ private function processOutOfOfficeData(IUser $user, ?IOutOfOfficeData $ooo): bo if(empty($ooo)) { // Reset the user status if the absence doesn't exist $this->logger->debug('User has no OOO period in effect, reverting DND status if applicable'); - $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_VACATION, IUserStatus::DND); + $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND); // We need to also run the availability automation return true; } @@ -235,7 +235,7 @@ private function processOutOfOfficeData(IUser $user, ?IOutOfOfficeData $ooo): bo if(!$this->coordinator->isInEffect($ooo)) { // Reset the user status if the absence is (no longer) in effect $this->logger->debug('User has no OOO period in effect, reverting DND status if applicable'); - $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_VACATION, IUserStatus::DND); + $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND); if($ooo->getStartDate() > $this->time->getTime()) { // Set the next run to take place at the start of the ooo period if it is in the future @@ -250,7 +250,7 @@ private function processOutOfOfficeData(IUser $user, ?IOutOfOfficeData $ooo): bo // Revert both a possible 'CALL - away' and 'office hours - DND' status $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_CALL, IUserStatus::DND); $this->manager->revertUserStatus($user->getUID(), IUserStatus::MESSAGE_AVAILABILITY, IUserStatus::DND); - $this->manager->setUserStatus($user->getUID(), IUserStatus::MESSAGE_VACATION, IUserStatus::DND, true, $ooo->getShortMessage()); + $this->manager->setUserStatus($user->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND, true, $ooo->getShortMessage()); // Run at the end of an ooo period to return to availability / regular user status // If it's overwritten by a custom status in the meantime, there's nothing we can do about it $this->setLastRunToNextToggleTime($user->getUID(), $ooo->getEndDate()); diff --git a/apps/dav/tests/unit/BackgroundJob/UserStatusAutomationTest.php b/apps/dav/tests/unit/BackgroundJob/UserStatusAutomationTest.php index fe6919d8daecb..ad92df238f038 100644 --- a/apps/dav/tests/unit/BackgroundJob/UserStatusAutomationTest.php +++ b/apps/dav/tests/unit/BackgroundJob/UserStatusAutomationTest.php @@ -228,7 +228,7 @@ public function testRunNoAvailabilityWithOOO(): void { ->method('revertUserStatus'); $this->statusManager->expects(self::once()) ->method('setUserStatus') - ->with('user', IUserStatus::MESSAGE_VACATION, IUserStatus::DND, true, $ooo->getShortMessage()); + ->with('user', IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND, true, $ooo->getShortMessage()); $this->config->expects(self::never()) ->method('getUserValue'); $this->time->method('getDateTime') diff --git a/apps/user_status/lib/Listener/OutOfOfficeStatusListener.php b/apps/user_status/lib/Listener/OutOfOfficeStatusListener.php index 0d793c3f30674..087446d94a70e 100644 --- a/apps/user_status/lib/Listener/OutOfOfficeStatusListener.php +++ b/apps/user_status/lib/Listener/OutOfOfficeStatusListener.php @@ -53,7 +53,7 @@ public function __construct(private IJobList $jobsList, */ public function handle(Event $event): void { if($event instanceof OutOfOfficeClearedEvent) { - $this->manager->revertUserStatus($event->getData()->getUser()->getUID(), IUserStatus::MESSAGE_VACATION, IUserStatus::DND); + $this->manager->revertUserStatus($event->getData()->getUser()->getUID(), IUserStatus::MESSAGE_OUT_OF_OFFICE, IUserStatus::DND); $this->jobsList->scheduleAfter(UserStatusAutomation::class, $this->time->getTime(), ['userId' => $event->getData()->getUser()->getUID()]); return; } diff --git a/apps/user_status/lib/Service/PredefinedStatusService.php b/apps/user_status/lib/Service/PredefinedStatusService.php index c77ca588ebb64..a80f523000116 100644 --- a/apps/user_status/lib/Service/PredefinedStatusService.php +++ b/apps/user_status/lib/Service/PredefinedStatusService.php @@ -46,6 +46,7 @@ class PredefinedStatusService { * @deprecated See \OCP\UserStatus\IUserStatus::MESSAGE_CALL */ public const CALL = 'call'; + public const OUT_OF_OFFICE = 'out-of-office'; /** @var IL10N */ private $l10n; @@ -113,6 +114,13 @@ public function getDefaultStatuses(): array { 'clearAt' => null, 'visible' => false, ], + [ + 'id' => self::OUT_OF_OFFICE, + 'icon' => '🛑', + 'message' => $this->getTranslatedStatusForId(self::OUT_OF_OFFICE), + 'clearAt' => null, + 'visible' => false, + ], ]; } @@ -148,6 +156,9 @@ public function getIconForId(string $id): ?string { case self::VACATIONING: return '🌴'; + case self::OUT_OF_OFFICE: + return '🛑'; + case self::REMOTE_WORK: return '🏡'; @@ -178,6 +189,9 @@ public function getTranslatedStatusForId(string $id): ?string { case self::VACATIONING: return $this->l10n->t('Vacationing'); + case self::OUT_OF_OFFICE: + return $this->l10n->t('Out of office'); + case self::REMOTE_WORK: return $this->l10n->t('Working remotely'); @@ -199,6 +213,7 @@ public function isValidId(string $id): bool { self::COMMUTING, self::SICK_LEAVE, self::VACATIONING, + self::OUT_OF_OFFICE, self::REMOTE_WORK, IUserStatus::MESSAGE_CALL, IUserStatus::MESSAGE_AVAILABILITY, diff --git a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php index 0a65256bfacae..c6850621dd8ec 100644 --- a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php +++ b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php @@ -47,7 +47,7 @@ protected function setUp(): void { } public function testGetDefaultStatuses(): void { - $this->l10n->expects($this->exactly(6)) + $this->l10n->expects($this->exactly(7)) ->method('t') ->withConsecutive( ['In a meeting'], @@ -110,6 +110,13 @@ public function testGetDefaultStatuses(): void { 'clearAt' => null, 'visible' => false, ], + [ + 'id' => 'out-of-office', + 'icon' => '🛑', + 'message' => 'Out of office', + 'clearAt' => null, + 'visible' => false, + ], ], $actual); } @@ -195,7 +202,7 @@ public function isValidIdDataProvider(): array { } public function testGetDefaultStatusById(): void { - $this->l10n->expects($this->exactly(6)) + $this->l10n->expects($this->exactly(7)) ->method('t') ->withConsecutive( ['In a meeting'], diff --git a/lib/public/UserStatus/IUserStatus.php b/lib/public/UserStatus/IUserStatus.php index f5005e5616bf6..f167f9a82eef1 100644 --- a/lib/public/UserStatus/IUserStatus.php +++ b/lib/public/UserStatus/IUserStatus.php @@ -81,6 +81,12 @@ interface IUserStatus { */ public const MESSAGE_AVAILABILITY = 'availability'; + /** + * @var string + * @since 28.0.1 + */ + public const MESSAGE_OUT_OF_OFFICE = 'out-of-office'; + /** * @var string * @since 28.0.0