diff options
author | Julius Härtl <jus@bitgrid.net> | 2021-01-13 19:58:14 +0300 |
---|---|---|
committer | Julius Härtl <jus@bitgrid.net> | 2021-01-13 21:34:02 +0300 |
commit | 6cca6b1aa51c957aa188f3f30d37bc38c6bb34f1 (patch) | |
tree | 680f735379fb31b4a7e422e8853f448b96004457 /lib | |
parent | 5226f52ecb26303a22018cdc245869655ec88c10 (diff) |
Keep session information as long as we need it for steps
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Db/SessionMapper.php | 35 | ||||
-rw-r--r-- | lib/Service/ApiService.php | 2 | ||||
-rw-r--r-- | lib/Service/SessionService.php | 15 |
3 files changed, 41 insertions, 11 deletions
diff --git a/lib/Db/SessionMapper.php b/lib/Db/SessionMapper.php index 8c62a73ef..4849e9e6a 100644 --- a/lib/Db/SessionMapper.php +++ b/lib/Db/SessionMapper.php @@ -63,8 +63,17 @@ class SessionMapper extends QBMapper { return Session::fromRow($data); } + public function findAll($documentId) { + $qb = $this->db->getQueryBuilder(); + $qb->select('id','color','document_id', 'last_contact','user_id','guest_name') + ->from($this->getTableName()) + ->where($qb->expr()->eq('document_id', $qb->createNamedParameter($documentId))) + ->execute(); + + return $this->findEntities($qb); + } + public function findAllActive($documentId) { - /* @var $qb IQueryBuilder */ $qb = $this->db->getQueryBuilder(); $qb->select('id','color','document_id', 'last_contact','user_id','guest_name') ->from($this->getTableName()) @@ -76,7 +85,6 @@ class SessionMapper extends QBMapper { } public function findAllInactive() { - /* @var $qb IQueryBuilder */ $qb = $this->db->getQueryBuilder(); $qb->select('id','color','document_id', 'last_contact','user_id','guest_name') ->from($this->getTableName()) @@ -87,20 +95,29 @@ class SessionMapper extends QBMapper { } public function deleteInactive($documentId = -1) { - /* @var $qb IQueryBuilder */ + $qb = $this->db->getQueryBuilder(); + $qb->select('session_id') + ->from('text_steps'); + if ($documentId !== null) { + $qb->where($qb->expr()->eq('document_id', $qb->createNamedParameter($documentId))); + } + $result = $qb + ->groupBy('session_id') + ->execute(); + $activeSessions = $result->fetchAll(\PDO::FETCH_COLUMN); + $result->closeCursor(); + $qb = $this->db->getQueryBuilder(); $qb->delete($this->getTableName()); - if ($documentId === null) { - $qb->where($qb->expr()->lt('last_contact', $qb->createNamedParameter(time() - SessionService::SESSION_VALID_TIME))); - } else { - $qb->where($qb->expr()->eq('document_id', $qb->createNamedParameter($documentId))) - ->andWhere($qb->expr()->lt('last_contact', $qb->createNamedParameter(time() - SessionService::SESSION_VALID_TIME))); + $qb->where($qb->expr()->lt('last_contact', $qb->createNamedParameter(time() - SessionService::SESSION_VALID_TIME))); + if ($documentId !== null) { + $qb->andWhere($qb->expr()->eq('document_id', $qb->createNamedParameter($documentId))); } + $qb->andWhere($qb->expr()->notIn('id', $qb->createNamedParameter($activeSessions, IQueryBuilder::PARAM_INT_ARRAY))); return $qb->execute(); } public function deleteByDocumentId($documentId) { - /* @var $qb IQueryBuilder */ $qb = $this->db->getQueryBuilder(); $qb->delete($this->getTableName()) ->where($qb->expr()->eq('document_id', $qb->createNamedParameter($documentId))); diff --git a/lib/Service/ApiService.php b/lib/Service/ApiService.php index dcb107206..b7148c6d1 100644 --- a/lib/Service/ApiService.php +++ b/lib/Service/ApiService.php @@ -158,7 +158,7 @@ class ApiService { try { $result = [ 'steps' => $this->documentService->getSteps($documentId, $version), - 'sessions' => $this->sessionService->getActiveSessions($documentId), + 'sessions' => $this->sessionService->getAllSessions($documentId), 'document' => $this->documentService->get($documentId) ]; diff --git a/lib/Service/SessionService.php b/lib/Service/SessionService.php index 493172045..cb673335f 100644 --- a/lib/Service/SessionService.php +++ b/lib/Service/SessionService.php @@ -35,7 +35,7 @@ use OCP\IRequest; use OCP\Security\ISecureRandom; class SessionService { - public const SESSION_VALID_TIME = 60 * 5; + public const SESSION_VALID_TIME = 5 * 60; /** @var SessionMapper */ private $sessionMapper; @@ -117,6 +117,19 @@ class SessionService { } } + public function getAllSessions($documentId): array { + $sessions = $this->sessionMapper->findAll($documentId); + return array_map(function (Session $session) { + $result = $session->jsonSerialize(); + $userManager = \OC::$server->getUserManager(); + $user = $userManager->get($session->getUserId()); + if ($user) { + $result['displayName'] = $user->getDisplayName(); + } + return $result; + }, $sessions); + } + public function getActiveSessions($documentId): array { $sessions = $this->sessionMapper->findAllActive($documentId); return array_map(function (Session $session) { |