Merge pull request #33350 from nextcloud/backport/33315/stable24

[stable24] Reset user status based on message ID only
This commit is contained in:
Vincent Petry 2022-07-26 22:49:31 +02:00 committed by GitHub
commit 19a52f4507
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 13 deletions

View file

@ -62,10 +62,10 @@ class UserStatusProvider implements IProvider, ISettableProvider {
}
public function revertUserStatus(string $userId, string $messageId, string $status): void {
$this->service->revertUserStatus($userId, $messageId, $status);
$this->service->revertUserStatus($userId, $messageId);
}
public function revertMultipleUserStatus(array $userIds, string $messageId, string $status): void {
$this->service->revertMultipleUserStatus($userIds, $messageId, $status);
$this->service->revertMultipleUserStatus($userIds, $messageId);
}
}

View file

@ -164,15 +164,13 @@ class UserStatusMapper extends QBMapper {
*
* @param string $userId
* @param string $messageId
* @param string $status
* @return bool True if an entry was deleted
*/
public function deleteCurrentStatusToRestoreBackup(string $userId, string $messageId, string $status): bool {
public function deleteCurrentStatusToRestoreBackup(string $userId, string $messageId): bool {
$qb = $this->db->getQueryBuilder();
$qb->delete($this->tableName)
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId)))
->andWhere($qb->expr()->eq('message_id', $qb->createNamedParameter($messageId)))
->andWhere($qb->expr()->eq('status', $qb->createNamedParameter($status)))
->andWhere($qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)));
return $qb->executeStatement() > 0;
}

View file

@ -505,7 +505,7 @@ class StatusService {
}
}
public function revertUserStatus(string $userId, string $messageId, string $status): void {
public function revertUserStatus(string $userId, string $messageId): void {
try {
/** @var UserStatus $userStatus */
$backupUserStatus = $this->mapper->findByUserId($userId, true);
@ -514,7 +514,7 @@ class StatusService {
return;
}
$deleted = $this->mapper->deleteCurrentStatusToRestoreBackup($userId, $messageId, $status);
$deleted = $this->mapper->deleteCurrentStatusToRestoreBackup($userId, $messageId);
if (!$deleted) {
// Another status is set automatically or no status, do nothing
return;
@ -526,7 +526,7 @@ class StatusService {
$this->mapper->update($backupUserStatus);
}
public function revertMultipleUserStatus(array $userIds, string $messageId, string $status): void {
public function revertMultipleUserStatus(array $userIds, string $messageId): void {
// Get all user statuses and the backups
$findById = $userIds;
foreach ($userIds as $userId) {
@ -537,8 +537,7 @@ class StatusService {
$backups = $restoreIds = $statuesToDelete = [];
foreach ($userStatuses as $userStatus) {
if (!$userStatus->getIsBackup()
&& $userStatus->getMessageId() === $messageId
&& $userStatus->getStatus() === $status) {
&& $userStatus->getMessageId() === $messageId) {
$statuesToDelete[$userStatus->getUserId()] = $userStatus->getId();
} else if ($userStatus->getIsBackup()) {
$backups[$userStatus->getUserId()] = $userStatus->getId();

View file

@ -795,24 +795,34 @@ class StatusServiceTest extends TestCase {
$backupOnly->setUserId('_backuponly');
$backupOnly->setIsBackup(true);
$noBackupDND = new UserStatus();
$noBackupDND->setId(5);
$noBackupDND->setStatus(IUserStatus::DND);
$noBackupDND->setStatusTimestamp(1337);
$noBackupDND->setIsUserDefined(false);
$noBackupDND->setMessageId('call');
$noBackupDND->setUserId('nobackupanddnd');
$noBackupDND->setIsBackup(false);
$this->mapper->expects($this->once())
->method('findByUserIds')
->with(['john', 'nobackup', 'backuponly', '_john', '_nobackup', '_backuponly'])
->with(['john', 'nobackup', 'backuponly', 'nobackupanddnd', '_john', '_nobackup', '_backuponly', '_nobackupanddnd'])
->willReturn([
$john,
$johnBackup,
$noBackup,
$backupOnly,
$noBackupDND,
]);
$this->mapper->expects($this->once())
->method('deleteByIds')
->with([1, 3]);
->with([1, 3, 5]);
$this->mapper->expects($this->once())
->method('restoreBackupStatuses')
->with([2]);
$this->service->revertMultipleUserStatus(['john', 'nobackup', 'backuponly'], 'call', IUserStatus::AWAY);
$this->service->revertMultipleUserStatus(['john', 'nobackup', 'backuponly', 'nobackupanddnd'], 'call');
}
}