diff --git a/apps/user_status/lib/Db/UserStatus.php b/apps/user_status/lib/Db/UserStatus.php index 92b3df740c251..f7742a4bbe9d1 100644 --- a/apps/user_status/lib/Db/UserStatus.php +++ b/apps/user_status/lib/Db/UserStatus.php @@ -50,7 +50,7 @@ * @method void setCustomMessage(string|null $customMessage) * @method int|null getClearAt() * @method void setClearAt(int|null $clearAt) - * @method setIsBackup(bool $true): void + * @method setIsBackup(bool $isBackup): void * @method getIsBackup(): bool * @method int getStatusMessageTimestamp() * @method void setStatusMessageTimestamp(int $statusTimestamp) diff --git a/apps/user_status/lib/Service/StatusService.php b/apps/user_status/lib/Service/StatusService.php index 508d9287555e3..99fafaa642647 100644 --- a/apps/user_status/lib/Service/StatusService.php +++ b/apps/user_status/lib/Service/StatusService.php @@ -314,7 +314,13 @@ public function setUserStatus(string $userId, $userStatus->setCustomIcon(null); $userStatus->setCustomMessage($customMessage); $userStatus->setClearAt(null); - $userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp()); + if ($this->predefinedStatusService->getTranslatedStatusForId($messageId) !== null + || ($customMessage !== null && $customMessage !== '')) { + // Only track status message ID if there is one + $userStatus->setStatusMessageTimestamp($this->timeFactory->now()->getTimestamp()); + } else { + $userStatus->setStatusMessageTimestamp(0); + } if ($userStatus->getId() !== null) { return $this->mapper->update($userStatus); diff --git a/apps/user_status/tests/Unit/Service/StatusServiceTest.php b/apps/user_status/tests/Unit/Service/StatusServiceTest.php index bd150cd4258f9..d0742a105a361 100644 --- a/apps/user_status/tests/Unit/Service/StatusServiceTest.php +++ b/apps/user_status/tests/Unit/Service/StatusServiceTest.php @@ -1130,4 +1130,34 @@ public function testFindByUserIdSystemDefined(): void { $this->assertEquals($status, $this->service->findByUserId('admin')); } + + public function testSetStatusWithoutMessage(): void { + $this->predefinedStatusService->expects(self::once()) + ->method('isValidId') + ->with(IUserStatus::MESSAGE_AVAILABILITY) + ->willReturn(true); + $this->timeFactory + ->method('getTime') + ->willReturn(1234); + $status = new UserStatus(); + $status->setUserId('admin'); + $status->setStatusTimestamp(1234); + $status->setIsUserDefined(true); + $status->setStatus(IUserStatus::DND); + $status->setIsBackup(false); + $status->setMessageId(IUserStatus::MESSAGE_AVAILABILITY); + $this->mapper->expects(self::once()) + ->method('insert') + ->with($this->equalTo($status)) + ->willReturnArgument(0); + + $result = $this->service->setUserStatus( + 'admin', + IUserStatus::DND, + IUserStatus::MESSAGE_AVAILABILITY, + true, + ); + + self::assertNotNull($result); + } }