Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2021-01-13 19:58:14 +0300
committerJulius Härtl <jus@bitgrid.net>2021-01-13 21:34:02 +0300
commit6cca6b1aa51c957aa188f3f30d37bc38c6bb34f1 (patch)
tree680f735379fb31b4a7e422e8853f448b96004457 /lib
parent5226f52ecb26303a22018cdc245869655ec88c10 (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.php35
-rw-r--r--lib/Service/ApiService.php2
-rw-r--r--lib/Service/SessionService.php15
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) {