diff --git a/lib/Db/ExtMapper.php b/lib/Db/ExtMapper.php index f1cab3537ea412b2a038609788bf12ddbe0ae1a0..278a3dbd4430e28b485dfdcda37604514fbe9545 100644 --- a/lib/Db/ExtMapper.php +++ b/lib/Db/ExtMapper.php @@ -93,7 +93,7 @@ abstract class ExtMapper extends QBMapper { protected function queryRows($query) { $stmt = $query->execute(); - $rows = []; + $rows = []; while ($row = $stmt->fetch()) { $rows[] = $row; } diff --git a/lib/Db/OC/AccountsMapper.php b/lib/Db/OC/AccountsMapper.php index bd9f7c7d7fe247089b058e6909824ccfe3a7cd23..0d8dfd12ef486e0d4457e75a3307f37f504da4ef 100644 --- a/lib/Db/OC/AccountsMapper.php +++ b/lib/Db/OC/AccountsMapper.php @@ -9,7 +9,6 @@ use OCP\DB\Exception; use OCP\IDBConnection; use OCP\DB\QueryBuilder\IQueryBuilder; use OCA\SccuotNC\Service\ConfigService; -use PDO; class AccountsMapper extends ExtMapper { const PREFERENCES_TABLE = 'preferences'; @@ -58,15 +57,10 @@ class AccountsMapper extends ExtMapper { * @throws \Exception */ public function queryUserStorages(): array { - $activeUsers = $this->getActiveUsers(); $data = [ 'storages' => [] ]; - if (empty($activeUsers)) { - return $data['storages']; - } - $query = $this->getQueryBuilder(); $query->selectAlias('fc.size', 's') @@ -74,9 +68,8 @@ class AccountsMapper extends ExtMapper { ->from('accounts', 'a') ->join('a', StoragesMapper::STORAGES_TABLE, 's', "s.id = CONCAT('home::', a.uid)") ->join('s', FilecacheMapper::FILECACHE_TABLE, 'fc', 'fc.storage = s.numeric_id') - ->where($query->expr()->eq('fc.path', $query->createPositionalParameter('files'))) - ->andWhere($query->expr()->in('a.uid', $query->createPositionalParameter($activeUsers, IQueryBuilder::PARAM_STR_ARRAY))); - + ->where($query->expr()->eq('fc.path', $query->createPositionalParameter('files'))); + $this->addUserAccountsCondition($query); foreach ($this->queryRows($query) as $row) { $data['storages'][] = intval($row['s']); } @@ -85,24 +78,17 @@ class AccountsMapper extends ExtMapper { } public function queryUserQuotas($defaultQuotas) { - $activeUsers = $this->getActiveUsers(); $data = [ 'quotas' => [] ]; - - if (empty($activeUsers)) { - return $data['quotas']; - } - $query = $this->getQueryBuilder(); $query->selectDistinct('a.uid') ->selectAlias('p.configvalue', 'quota') ->from(self::ACCOUNTS_TABLE, 'a') ->join('a', self::PREFERENCES_TABLE, 'p', 'a.uid = p.userid') - ->andWhere($query->expr()->eq('p.configkey', $query->createPositionalParameter('quota'))) - ->andWhere($query->expr()->in('a.uid', $query->createPositionalParameter($activeUsers, IQueryBuilder::PARAM_STR_ARRAY))); - + ->andWhere($query->expr()->eq('p.configkey', $query->createPositionalParameter('quota'))); + $this->addUserAccountsCondition($query); // Execute query and process results foreach ($this->queryRows($query) as $row) { $defaultQuota = $this->findDefaultQuota($defaultQuotas, $row['quota']); @@ -126,18 +112,13 @@ class AccountsMapper extends ExtMapper { return false; } - protected function getActiveUsers(): array { - $deactivatedUsers = $this->configService->config()->getUsersForUserValue('core', 'enabled', 'false'); - $qb = $this->db->getQueryBuilder(); - $qb->select('uid') - ->from(self::ACCOUNTS_TABLE); - - $stmt = $qb->execute(); - $result = $stmt->fetchAll(PDO::FETCH_COLUMN); - $stmt->closeCursor(); - - $activeUsers = array_diff($result, $deactivatedUsers); - return $activeUsers; - } + private function addUserAccountsCondition(IQueryBuilder $query): void { + $qDU = $this->getQueryBuilder(); + $qDU->selectDistinct('userid') + ->from(self::PREFERENCES_TABLE) + ->where($qDU->expr()->eq('configkey', $qDU->expr()->literal('enabled'))) + ->andWhere($qDU->expr()->eq('configvalue', $qDU->expr()->literal('false'))); + $query->andWhere($query->expr()->notIn('a.uid', $query->createFunction($qDU->getSQL()))); + } } diff --git a/lib/Db/OC/FilecacheMapper.php b/lib/Db/OC/FilecacheMapper.php index 87156357f48f09c2426b95f763551c6601fbc82a..8869d32b4f2ff53c8e07fdca5328ffc43921e5f1 100644 --- a/lib/Db/OC/FilecacheMapper.php +++ b/lib/Db/OC/FilecacheMapper.php @@ -4,7 +4,6 @@ namespace OCA\SccuotNC\Db\OC; use OCA\SccuotNC\Db\ExtMapper; -use OCA\SccuotNC\Service\ConfigService; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; @@ -12,11 +11,9 @@ class FilecacheMapper extends ExtMapper { const FILECACHE_TABLE = 'filecache'; private string $accountsState = ''; - private ConfigService $configService; - public function __construct(IDBConnection $db, int $chunkSize, ConfigService $configService, string $accountsState = '') { + public function __construct(IDBConnection $db, int $chunkSize, string $accountsState = '') { parent::__construct($db, self::FILECACHE_TABLE, $chunkSize); - $this->configService = $configService; $this->accountsState = $accountsState; } @@ -136,12 +133,23 @@ class FilecacheMapper extends ExtMapper { } private function addUserAccountsCondition(IQueryBuilder $query) { - if ($this->accountsState === 'false') { - $deactivatedUsers = $this->configService->config()->getUsersForUserValue('core', 'enabled', 'false'); - $query->andWhere($query->expr()->in('a.uid', $query->createPositionalParameter($deactivatedUsers, IQueryBuilder::PARAM_STR_ARRAY))); + if ($this->accountsState != '') { + + $qb = $this->getQueryBuilder(); + $qb->selectDistinct('userid') + ->from(AccountsMapper::PREFERENCES_TABLE) + ->where($qb->expr()->eq('configkey', $qb->expr()->literal('enabled'))) + ->andWhere($qb->expr()->eq('configvalue', $qb->expr()->literal('false'))); + + if ($this->accountsState == 'false') { + $query->andWhere($query->expr()->in('a.uid', $query->createFunction($qb->getSQL()))); + } else { + $query->andWhere($query->expr()->notIn('a.uid', $query->createFunction($qb->getSQL()))); + } } } + private function addDirMimeTypeCondition(IQueryBuilder $query, $dirMimetype) { if ($dirMimetype != -1) { $query->andWhere($query->expr()->neq('fc.mimetype', $query->createPositionalParameter($dirMimetype, IQueryBuilder::PARAM_INT))); diff --git a/lib/Stats/Collector/FileTypesCountsCollector.php b/lib/Stats/Collector/FileTypesCountsCollector.php index f94fffe322fbd93c124a66d9cf192814afe19217..7e40e3155a0db2b65ca1feb542187bd2b95ee01c 100644 --- a/lib/Stats/Collector/FileTypesCountsCollector.php +++ b/lib/Stats/Collector/FileTypesCountsCollector.php @@ -10,7 +10,7 @@ use OCP\IDBConnection; class FileTypesCountsCollector extends BaseCollector { protected function collectData(IDBConnection $db, int $timestamp, int $chunkSize, ConfigService $config) { $fileCounts = []; - $mapper = new FilecacheMapper($db, $chunkSize, $config, $config->getSnapshotFiletypesFilterClosedAccounts() ? self::STATE_ENABLED : ''); + $mapper = new FilecacheMapper($db, $chunkSize,$config->getSnapshotFiletypesFilterClosedAccounts() ? self::STATE_ENABLED : ''); $counts = $mapper->queryFiletypesCounts(); foreach ($config->getSnapshotFileTypes()->groups() as $groupName => $group) { if (!$group->isCollectEnabled()) { diff --git a/lib/Stats/Collector/FilesCountCollector.php b/lib/Stats/Collector/FilesCountCollector.php index adb2978b835e38a537d24a6559fd6cb42e04f745..1ed2fbd58844ac7b8dca99b601eeee575407164a 100644 --- a/lib/Stats/Collector/FilesCountCollector.php +++ b/lib/Stats/Collector/FilesCountCollector.php @@ -11,7 +11,7 @@ use OCP\IDBConnection; class FilesCountCollector extends BaseCollector { protected function collectData(IDBConnection $db, int $timestamp, int $chunkSize, ConfigService $config) { - $mapper = new FilecacheMapper($db, $chunkSize, $config); + $mapper = new FilecacheMapper($db, $chunkSize); $totalCount = $mapper->queryTotalFilesCount(); $mapper->setAccountsState(self::STATE_DISABLED); $obsoleteCount = $mapper->queryTotalFilesCount(); diff --git a/lib/Stats/Collector/FilesSizeCollector.php b/lib/Stats/Collector/FilesSizeCollector.php index c65dcb1a4055e56d98a7c1256455768391bdb2db..62e065de22491e79e5d05b4ad8ae848e5f15f189 100644 --- a/lib/Stats/Collector/FilesSizeCollector.php +++ b/lib/Stats/Collector/FilesSizeCollector.php @@ -11,7 +11,7 @@ use OCP\IDBConnection; class FilesSizeCollector extends BaseCollector { protected function collectData(IDBConnection $db, int $timestamp, int $chunkSize, ConfigService $config) { - $mapper = new FilecacheMapper($db, $chunkSize, $config); + $mapper = new FilecacheMapper($db, $chunkSize); $totalCount = $mapper->queryTotalFilesSize(); $mapper->setAccountsState(self::STATE_DISABLED); $obsoleteCount = $mapper->queryTotalFilesSize();