diff options
author | Vitor Mattos <vitor@php.rio> | 2022-06-13 12:22:36 -0300 |
---|---|---|
committer | Vitor Mattos <vitor@php.rio> | 2022-06-15 11:58:29 -0300 |
commit | c59b0c2ff7701916fbab4c5d544f43a49acabc34 (patch) | |
tree | 8d7e2e9bf196d6d39d6e87957791f1e263bab5cd /lib/private | |
parent | 596ead787ba7f7148fceb04de9d7c08cece936bc (diff) | |
download | nextcloud-server-c59b0c2ff7701916fbab4c5d544f43a49acabc34.tar.gz nextcloud-server-c59b0c2ff7701916fbab4c5d544f43a49acabc34.zip |
Add comments expire date
https://github.com/nextcloud/spreed/pull/7327
Signed-off-by: Vitor Mattos <vitor@php.rio>
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/Comments/Comment.php | 16 | ||||
-rw-r--r-- | lib/private/Comments/Manager.php | 21 |
2 files changed, 37 insertions, 0 deletions
diff --git a/lib/private/Comments/Comment.php b/lib/private/Comments/Comment.php index 2b338efc75f..0128dc8defd 100644 --- a/lib/private/Comments/Comment.php +++ b/lib/private/Comments/Comment.php @@ -45,6 +45,7 @@ class Comment implements IComment { 'creationDT' => null, 'latestChildDT' => null, 'reactions' => null, + 'expire_date' => null, ]; /** @@ -447,6 +448,21 @@ class Comment implements IComment { } /** + * @inheritDoc + */ + public function setExpireDate(?\DateTime $dateTime): IComment { + $this->data['expire_date'] = $dateTime; + return $this; + } + + /** + * @inheritDoc + */ + public function getExpireDate(): ?\DateTime { + return $this->data['expire_date']; + } + + /** * sets the comment data based on an array with keys as taken from the * database. * diff --git a/lib/private/Comments/Manager.php b/lib/private/Comments/Manager.php index b7532222c33..f21f9ec76b2 100644 --- a/lib/private/Comments/Manager.php +++ b/lib/private/Comments/Manager.php @@ -107,6 +107,9 @@ class Manager implements ICommentsManager { if (!is_null($data['latest_child_timestamp'])) { $data['latest_child_timestamp'] = new \DateTime($data['latest_child_timestamp']); } + if (!is_null($data['expire_date'])) { + $data['expire_date'] = new \DateTime($data['expire_date']); + } $data['children_count'] = (int)$data['children_count']; $data['reference_id'] = $data['reference_id'] ?? null; if ($this->supportReactions()) { @@ -1203,6 +1206,7 @@ class Manager implements ICommentsManager { 'latest_child_timestamp' => $qb->createNamedParameter($comment->getLatestChildDateTime(), 'datetime'), 'object_type' => $qb->createNamedParameter($comment->getObjectType()), 'object_id' => $qb->createNamedParameter($comment->getObjectId()), + 'expire_date' => $qb->createNamedParameter($comment->getExpireDate(), 'datetime'), ]; if ($tryWritingReferenceId) { @@ -1642,4 +1646,21 @@ class Manager implements ICommentsManager { $this->initialStateService->provideInitialState('comments', 'max-message-length', IComment::MAX_MESSAGE_LENGTH); Util::addScript('comments', 'comments-app'); } + + /** + * @inheritDoc + */ + public function deleteMessageExpiredAtObject(string $objectType, string $objectId): bool { + $qb = $this->dbConn->getQueryBuilder(); + $affectedRows = $qb->delete('comments') + ->where($qb->expr()->lt('expire_date', + $qb->createNamedParameter($this->timeFactory->getDateTime(), IQueryBuilder::PARAM_DATE))) + ->andWhere($qb->expr()->eq('object_type', $qb->createNamedParameter($objectType))) + ->andWhere($qb->expr()->eq('object_id', $qb->createNamedParameter($objectId))) + ->executeStatement(); + + $this->commentsCache = []; + + return $affectedRows > 0; + } } |