From 6ed9908a0c478862eb6085e0eec0cc2d82cc0f0c Mon Sep 17 00:00:00 2001 From: Akhil Date: Thu, 11 Apr 2024 17:13:26 +0530 Subject: [PATCH] Exclude certain users from activity expiration Signed-off-by: Akhil Co-authored-by: Louis --- lib/AppInfo/Application.php | 1 + lib/Data.php | 21 +++++++++++++++++---- tests/DataTest.php | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 1d6e02294..319445cd3 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -115,6 +115,7 @@ public function register(IRegistrationContext $context): void { $c->get(IManager::class), $c->get('ActivityConnectionAdapter'), $c->get(LoggerInterface::class), + $c->get(IConfig::class), ); }); diff --git a/lib/Data.php b/lib/Data.php index 2f07c722d..06a904b79 100755 --- a/lib/Data.php +++ b/lib/Data.php @@ -33,6 +33,7 @@ use OCP\Activity\IFilter; use OCP\Activity\IManager; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IConfig; use OCP\IDBConnection; use Psr\Log\LoggerInterface; @@ -48,7 +49,9 @@ class Data { public function __construct( protected IManager $activityManager, protected IDBConnection $connection, - protected LoggerInterface $logger) { + protected LoggerInterface $logger, + protected IConfig $config, + ) { } /** @@ -347,11 +350,21 @@ public function validateFilter($filterValue) { */ public function expire($expireDays = 365) { $ttl = (60 * 60 * 24 * max(1, $expireDays)); - $timelimit = time() - $ttl; - $this->deleteActivities([ + $conditions = [ 'timestamp' => [$timelimit, '<'], - ]); + ]; + + $excludedUsers = $this->config->getSystemValue('activity_expire_exclude_users', []); + if (!empty($excludedUsers)) { + foreach ($excludedUsers as $user) { + $conditions[] = [ + 'affecteduser' => [$user, '!='] + ]; + } + } + + $this->deleteActivities($conditions); } /** diff --git a/tests/DataTest.php b/tests/DataTest.php index bc8b16f7f..7382d9feb 100644 --- a/tests/DataTest.php +++ b/tests/DataTest.php @@ -26,6 +26,8 @@ use OCA\Activity\Data; use OCP\Activity\IManager; use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IConfig; +use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; use OCP\IUserSession; @@ -66,11 +68,13 @@ protected function setUp(): void { $this->dbConnection = \OC::$server->get(IDBConnection::class); $this->realActivityManager = \OC::$server->get(IManager::class); $this->logger = \OC::$server->get(NullLogger::class); + $this->config = $this->createMock(IConfig::class); $this->data = new Data( $activityManager, $this->dbConnection, - $this->logger + $this->logger, + $this->config ); }