Skip to content
Snippets Groups Projects

Fix the fetching of the users

Merged Lidiya Gelemeev requested to merge 5-fix-the-fetching-of-the-active-users into main
6 files
+ 31
42
Compare changes
  • Side-by-side
  • Inline
Files
6
+ 12
31
@@ -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())));
}
}
Loading