Skip to content
Snippets Groups Projects
Commit 3479a1bd authored by Lidiya Gelemeev's avatar Lidiya Gelemeev
Browse files

Fix the fetching of the users

parent 6d56ccdc
No related branches found
No related tags found
1 merge request!9Fix the fetching of the users
This commit is part of merge request !9. Comments created here will be created in the context of that merge request.
......@@ -93,7 +93,7 @@ abstract class ExtMapper extends QBMapper {
protected function queryRows($query) {
$stmt = $query->execute();
$rows = [];
$rows = [];
while ($row = $stmt->fetch()) {
$rows[] = $row;
}
......
......@@ -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())));
}
}
......@@ -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)));
......
......@@ -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()) {
......
......@@ -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();
......
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment