fix(user_status): exclude backups from cleanup queries and filter from list methods

The background cleanup job operated on all rows including backups:
- clearOlderThanClearAt() deleted backup rows with expired clear_at,
  destroying saved statuses before they could be restored
- clearStatusesOlderThan() overwrote backup statuses to OFFLINE,
  corrupting saved DND/away states

Additionally, findAll() leaked backup rows into user-facing lists,
and findAllRecent() filtered backups via slow LIKE pattern instead
of the is_backup column.

Add is_backup=false filter to all four methods.

AI-Assisted-By: Claude Opus 4.6
Signed-off-by: Anna Larch <anna@nextcloud.com>
pull/59535/head
Anna Larch 4 months ago committed by Anna
parent 782f3f7838
commit fbc7fb1ba0
  1. 11
      apps/user_status/lib/Db/UserStatusMapper.php

@ -36,7 +36,8 @@ class UserStatusMapper extends QBMapper {
$qb = $this->db->getQueryBuilder();
$qb
->select('*')
->from($this->tableName);
->from($this->tableName)
->where($qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)));
if ($limit !== null) {
$qb->setMaxResults($limit);
@ -68,7 +69,7 @@ class UserStatusMapper extends QBMapper {
$qb->expr()->isNotNull('custom_icon'),
$qb->expr()->isNotNull('custom_message'),
),
$qb->expr()->notLike('user_id', $qb->createNamedParameter($this->db->escapeLikeParameter('_') . '%'))
$qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL))
));
if ($limit !== null) {
@ -125,7 +126,8 @@ class UserStatusMapper extends QBMapper {
->andWhere($qb->expr()->orX(
$qb->expr()->eq('is_user_defined', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL), IQueryBuilder::PARAM_BOOL),
$qb->expr()->eq('status', $qb->createNamedParameter(IUserStatus::ONLINE))
));
))
->andWhere($qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)));
$qb->executeStatement();
}
@ -139,7 +141,8 @@ class UserStatusMapper extends QBMapper {
$qb = $this->db->getQueryBuilder();
$qb->delete($this->tableName)
->where($qb->expr()->isNotNull('clear_at'))
->andWhere($qb->expr()->lte('clear_at', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)));
->andWhere($qb->expr()->lte('clear_at', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('is_backup', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)));
$qb->executeStatement();
}

Loading…
Cancel
Save