spegling av
https://github.com/nextcloud/server.git
synced 2024-08-24 17:55:37 +02:00
Also reset the status on clearAt
When you set yourself to "DND - In a meeting" for one hour, the expectation is that you are also "online"/normal again when the meeting is over. So we extend the logic to also include the status itself to be reverted. Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
förälder
9ad5b301ce
incheckning
1429a9a8ef
@ -61,7 +61,7 @@ class ClearOldStatusesBackgroundJob extends TimedJob {
|
||||
protected function run($argument) {
|
||||
$now = $this->time->getTime();
|
||||
|
||||
$this->mapper->clearMessagesOlderThan($now);
|
||||
$this->mapper->clearOlderThanClearAt($now);
|
||||
$this->mapper->clearStatusesOlderThan($now - StatusService::INVALIDATE_STATUS_THRESHOLD, $now);
|
||||
}
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ class UserStatusController extends OCSController {
|
||||
* @NoAdminRequired
|
||||
*
|
||||
* @param string|null $statusIcon
|
||||
* @param string $message
|
||||
* @param string|null $message
|
||||
* @param int|null $clearAt
|
||||
* @return DataResponse
|
||||
* @throws OCSBadRequestException
|
||||
@ -144,7 +144,7 @@ class UserStatusController extends OCSController {
|
||||
?string $message,
|
||||
?int $clearAt): DataResponse {
|
||||
try {
|
||||
if ($message !== null && $message !== '') {
|
||||
if (($message !== null && $message !== '') || ($clearAt !== null && $clearAt !== 0)) {
|
||||
$status = $this->service->setCustomMessage($this->userId, $statusIcon, $message, $clearAt);
|
||||
} else {
|
||||
$this->service->clearMessage($this->userId);
|
||||
|
@ -145,13 +145,9 @@ class UserStatusMapper extends QBMapper {
|
||||
*
|
||||
* @param int $timestamp
|
||||
*/
|
||||
public function clearMessagesOlderThan(int $timestamp): void {
|
||||
public function clearOlderThanClearAt(int $timestamp): void {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->update($this->tableName)
|
||||
->set('message_id', $qb->createNamedParameter(null))
|
||||
->set('custom_icon', $qb->createNamedParameter(null))
|
||||
->set('custom_message', $qb->createNamedParameter(null))
|
||||
->set('clear_at', $qb->createNamedParameter(null))
|
||||
$qb->delete($this->tableName)
|
||||
->where($qb->expr()->isNotNull('clear_at'))
|
||||
->andWhere($qb->expr()->lte('clear_at', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
|
@ -302,7 +302,7 @@ class StatusService {
|
||||
/**
|
||||
* @param string $userId
|
||||
* @param string|null $statusIcon
|
||||
* @param string $message
|
||||
* @param string|null $message
|
||||
* @param int|null $clearAt
|
||||
* @return UserStatus
|
||||
* @throws InvalidClearAtException
|
||||
@ -311,7 +311,7 @@ class StatusService {
|
||||
*/
|
||||
public function setCustomMessage(string $userId,
|
||||
?string $statusIcon,
|
||||
string $message,
|
||||
?string $message,
|
||||
?int $clearAt): UserStatus {
|
||||
try {
|
||||
$userStatus = $this->mapper->findByUserId($userId);
|
||||
@ -328,7 +328,7 @@ class StatusService {
|
||||
throw new InvalidStatusIconException('Status-Icon is longer than one character');
|
||||
}
|
||||
// Check for maximum length of custom message
|
||||
if (\mb_strlen($message) > self::MAXIMUM_MESSAGE_LENGTH) {
|
||||
if ($message !== null && \mb_strlen($message) > self::MAXIMUM_MESSAGE_LENGTH) {
|
||||
throw new StatusMessageTooLongException('Message is longer than supported length of ' . self::MAXIMUM_MESSAGE_LENGTH . ' characters');
|
||||
}
|
||||
// Check that clearAt is in the future
|
||||
@ -432,6 +432,7 @@ class StatusService {
|
||||
$this->cleanStatus($status);
|
||||
}
|
||||
if ($clearAt !== null && $clearAt < $this->timeFactory->getTime()) {
|
||||
$this->cleanStatus($status);
|
||||
$this->cleanStatusMessage($status);
|
||||
}
|
||||
if ($status->getMessageId() !== null) {
|
||||
|
@ -22,7 +22,7 @@
|
||||
<template>
|
||||
<div class="clear-at-select">
|
||||
<span class="clear-at-select__label">
|
||||
{{ $t('user_status', 'Clear status message after') }}
|
||||
{{ $t('user_status', 'Clear status after') }}
|
||||
</span>
|
||||
<Multiselect label="label"
|
||||
:value="option"
|
||||
|
@ -53,7 +53,7 @@ class ClearOldStatusesBackgroundJobTest extends TestCase {
|
||||
|
||||
public function testRun() {
|
||||
$this->mapper->expects($this->once())
|
||||
->method('clearMessagesOlderThan')
|
||||
->method('clearOlderThanClearAt')
|
||||
->with(1337);
|
||||
$this->mapper->expects($this->once())
|
||||
->method('clearStatusesOlderThan')
|
||||
|
@ -315,7 +315,8 @@ class UserStatusControllerTest extends TestCase {
|
||||
public function setCustomMessageDataProvider(): array {
|
||||
return [
|
||||
['👨🏽💻', 'Busy developing the status feature', 500, true, false, null, false, null],
|
||||
['👨🏽💻', '', 500, true, false, null, false, null, true],
|
||||
['👨🏽💻', '', 500, true, false, null, false, null, false],
|
||||
['👨🏽💻', '', 0, true, false, null, false, null, true],
|
||||
['👨🏽💻', 'Busy developing the status feature', 500, false, true, new InvalidClearAtException('Original exception message'), true,
|
||||
'New user-status for "john.doe" was rejected due to an invalid clearAt value "500"'],
|
||||
['👨🏽💻', 'Busy developing the status feature', 500, false, true, new InvalidStatusIconException('Original exception message'), true,
|
||||
|
@ -28,6 +28,7 @@ namespace OCA\UserStatus\Tests\Db;
|
||||
|
||||
use OCA\UserStatus\Db\UserStatus;
|
||||
use OCA\UserStatus\Db\UserStatusMapper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\DB\Exception;
|
||||
use Test\TestCase;
|
||||
|
||||
@ -204,22 +205,16 @@ class UserStatusMapperTest extends TestCase {
|
||||
];
|
||||
}
|
||||
|
||||
public function testClearMessagesOlderThan(): void {
|
||||
public function testClearOlderThanClearAt(): void {
|
||||
$this->insertSampleStatuses();
|
||||
|
||||
$this->mapper->clearMessagesOlderThan(55000);
|
||||
$this->mapper->clearOlderThanClearAt(55000);
|
||||
|
||||
$allStatuses = $this->mapper->findAll();
|
||||
$this->assertCount(3, $allStatuses);
|
||||
$this->assertCount(2, $allStatuses);
|
||||
|
||||
$user1Status = $this->mapper->findByUserId('user1');
|
||||
$this->assertEquals('user1', $user1Status->getUserId());
|
||||
$this->assertEquals('dnd', $user1Status->getStatus());
|
||||
$this->assertEquals(5000, $user1Status->getStatusTimestamp());
|
||||
$this->assertEquals(true, $user1Status->getIsUserDefined());
|
||||
$this->assertEquals(null, $user1Status->getCustomIcon());
|
||||
$this->assertEquals(null, $user1Status->getCustomMessage());
|
||||
$this->assertEquals(null, $user1Status->getClearAt());
|
||||
$this->expectException(DoesNotExistException::class);
|
||||
$this->mapper->findByUserId('user1');
|
||||
}
|
||||
|
||||
private function insertSampleStatuses(): void {
|
||||
|
4
dist/user-status-modal-8299.js
vendored
4
dist/user-status-modal-8299.js
vendored
File diff suppressed because one or more lines are too long
2
dist/user-status-modal-8299.js.map
vendored
2
dist/user-status-modal-8299.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/user_status-menu.js
vendored
4
dist/user_status-menu.js
vendored
File diff suppressed because one or more lines are too long
2
dist/user_status-menu.js.map
vendored
2
dist/user_status-menu.js.map
vendored
File diff suppressed because one or more lines are too long
Laddar…
Referens i nytt ärende
Block a user