Skip to content

Commit 4eba967

Browse files
committed
fix: getLastLoggedInUsers moved from AllConfig/IConfig to IUserManager/Manager
Signed-off-by: yemkareems <yemkareems@gmail.com>
1 parent 6ac49e5 commit 4eba967

File tree

5 files changed

+55
-57
lines changed

5 files changed

+55
-57
lines changed

apps/provisioning_api/lib/Controller/UsersController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ public function getLastLoggedInUsers(string $search = '',
293293
$users = [];
294294

295295
// For Admin alone user sorting based on lastLogin. For sub admin and groups this is not supported
296-
$users = $this->config->getLastLoggedInUsers($limit, $offset, $search);
296+
$users = $this->userManager->getLastLoggedInUsers($limit, $offset, $search);
297297

298298
$usersDetails = [];
299299
foreach ($users as $userId) {

lib/private/AllConfig.php

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -491,51 +491,6 @@ public function getUsersForUserValue($appName, $key, $value) {
491491
return $userIDs;
492492
}
493493

494-
/**
495-
* Gets the list of user ids sorted by lastLogin, from most recent to least recent
496-
*
497-
* @param int|null $limit how many users to fetch
498-
* @param int $offset from which offset to fetch
499-
* @param string $search search users based on search params
500-
* @return list<string> list of user IDs
501-
*/
502-
public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array {
503-
// TODO - FIXME
504-
$this->fixDIInit();
505-
506-
$query = $this->connection->getQueryBuilder();
507-
$query->selectDistinct('uid')
508-
->from('users', 'u')
509-
->leftJoin('u', 'preferences', 'p', $query->expr()->andX(
510-
$query->expr()->eq('p.userid', 'uid'),
511-
$query->expr()->eq('p.appid', $query->expr()->literal('login')),
512-
$query->expr()->eq('p.configkey', $query->expr()->literal('lastLogin')))
513-
);
514-
if($search !== '') {
515-
$query->leftJoin('u', 'preferences', 'p1', $query->expr()->andX(
516-
$query->expr()->eq('p1.userid', 'uid'),
517-
$query->expr()->eq('p1.appid', $query->expr()->literal('settings')),
518-
$query->expr()->eq('p1.configkey', $query->expr()->literal('email')))
519-
)
520-
// sqlite doesn't like re-using a single named parameter here
521-
->where($query->expr()->iLike('uid', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
522-
->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
523-
->orWhere($query->expr()->iLike('p1.configvalue', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))
524-
);
525-
}
526-
$query->orderBy($query->func()->lower('p.configvalue'), 'DESC')
527-
->addOrderBy('uid_lower', 'ASC')
528-
->setFirstResult($offset)
529-
->setMaxResults($limit);
530-
531-
$result = $query->executeQuery();
532-
/** @var list<string> $uids */
533-
$uids = $result->fetchAll(\PDO::FETCH_COLUMN);
534-
$result->closeCursor();
535-
536-
return $uids;
537-
}
538-
539494
/**
540495
* Determines the users that have the given value set for a specific app-key-pair
541496
*

lib/private/User/Manager.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,49 @@ public function validateUserId(string $uid, bool $checkDataDirectory = false): v
733733
}
734734
}
735735

736+
/**
737+
* Gets the list of user ids sorted by lastLogin, from most recent to least recent
738+
*
739+
* @param int|null $limit how many users to fetch
740+
* @param int $offset from which offset to fetch
741+
* @param string $search search users based on search params
742+
* @return list<string> list of user IDs
743+
*/
744+
public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array {
745+
$connection = \OC::$server->getDatabaseConnection();
746+
$queryBuilder = $connection->getQueryBuilder();
747+
$queryBuilder->selectDistinct('uid')
748+
->from('users', 'u')
749+
->leftJoin('u', 'preferences', 'p', $queryBuilder->expr()->andX(
750+
$queryBuilder->expr()->eq('p.userid', 'uid'),
751+
$queryBuilder->expr()->eq('p.appid', $queryBuilder->expr()->literal('login')),
752+
$queryBuilder->expr()->eq('p.configkey', $queryBuilder->expr()->literal('lastLogin')))
753+
);
754+
if($search !== '') {
755+
$queryBuilder->leftJoin('u', 'preferences', 'p1', $queryBuilder->expr()->andX(
756+
$queryBuilder->expr()->eq('p1.userid', 'uid'),
757+
$queryBuilder->expr()->eq('p1.appid', $queryBuilder->expr()->literal('settings')),
758+
$queryBuilder->expr()->eq('p1.configkey', $queryBuilder->expr()->literal('email')))
759+
)
760+
// sqlite doesn't like re-using a single named parameter here
761+
->where($queryBuilder->expr()->iLike('uid', $queryBuilder->createPositionalParameter('%' . $connection->escapeLikeParameter($search) . '%')))
762+
->orWhere($queryBuilder->expr()->iLike('displayname', $queryBuilder->createPositionalParameter('%' . $connection->escapeLikeParameter($search) . '%')))
763+
->orWhere($queryBuilder->expr()->iLike('p1.configvalue', $queryBuilder->createPositionalParameter('%' . $connection->escapeLikeParameter($search) . '%'))
764+
);
765+
}
766+
$queryBuilder->orderBy($queryBuilder->func()->lower('p.configvalue'), 'DESC')
767+
->addOrderBy('uid_lower', 'ASC')
768+
->setFirstResult($offset)
769+
->setMaxResults($limit);
770+
771+
$result = $queryBuilder->executeQuery();
772+
/** @var list<string> $uids */
773+
$uids = $result->fetchAll(\PDO::FETCH_COLUMN);
774+
$result->closeCursor();
775+
776+
return $uids;
777+
}
778+
736779
private function verifyUid(string $uid, bool $checkDataDirectory = false): bool {
737780
$appdata = 'appdata_' . $this->config->getSystemValueString('instanceid');
738781

lib/public/IConfig.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -249,15 +249,4 @@ public function deleteAppFromAllUsers($appName);
249249
* @since 8.0.0
250250
*/
251251
public function getUsersForUserValue($appName, $key, $value);
252-
253-
/**
254-
* Gets the list of users sorted by lastLogin, from most recent to least recent
255-
*
256-
* @param int|null $limit how many records to fetch
257-
* @param int $offset from which offset to fetch
258-
* @param string $search search users based on search params
259-
* @return list<string> list of user IDs
260-
* @since 30.0.0
261-
*/
262-
public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array;
263252
}

lib/public/IUserManager.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,15 @@ public function getByEmail($email);
210210
* @since 26.0.0
211211
*/
212212
public function validateUserId(string $uid, bool $checkDataDirectory = false): void;
213+
214+
/**
215+
* Gets the list of users sorted by lastLogin, from most recent to least recent
216+
*
217+
* @param int|null $limit how many records to fetch
218+
* @param int $offset from which offset to fetch
219+
* @param string $search search users based on search params
220+
* @return list<string> list of user IDs
221+
* @since 30.0.0
222+
*/
223+
public function getLastLoggedInUsers(?int $limit = null, int $offset = 0, string $search = ''): array;
213224
}

0 commit comments

Comments
 (0)