aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_status/lib/Db
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2020-06-02 12:48:37 +0200
committerGeorg Ehrke <developer@georgehrke.com>2020-07-31 16:45:27 +0200
commit0fad921840eb801492522af6ef795231163cff20 (patch)
treeddab0d1567d81eeb8d956ec98196180ad296cabd /apps/user_status/lib/Db
parentfce6df06e2bd1d68ee5614621ae7f92c6f7fa53d (diff)
downloadnextcloud-server-0fad921840eb801492522af6ef795231163cff20.tar.gz
nextcloud-server-0fad921840eb801492522af6ef795231163cff20.zip
Add user-status app
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
Diffstat (limited to 'apps/user_status/lib/Db')
-rw-r--r--apps/user_status/lib/Db/UserStatus.php90
-rw-r--r--apps/user_status/lib/Db/UserStatusMapper.php104
2 files changed, 194 insertions, 0 deletions
diff --git a/apps/user_status/lib/Db/UserStatus.php b/apps/user_status/lib/Db/UserStatus.php
new file mode 100644
index 00000000000..6faea6e0ecd
--- /dev/null
+++ b/apps/user_status/lib/Db/UserStatus.php
@@ -0,0 +1,90 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020, Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\UserStatus\Db;
+
+use OCP\AppFramework\Db\Entity;
+
+/**
+ * Class UserStatus
+ *
+ * @package OCA\UserStatus\Db
+ *
+ * @method int getId()
+ * @method void setId(int $id)
+ * @method string getUserId()
+ * @method void setUserId(string $userId)
+ * @method string getStatus()
+ * @method void setStatus(string $status)
+ * @method int getStatusTimestamp()
+ * @method void setStatusTimestamp(int $statusTimestamp)
+ * @method bool getIsUserDefined()
+ * @method void setIsUserDefined(bool $isUserDefined)
+ * @method string getMessageId()
+ * @method void setMessageId(string|null $messageId)
+ * @method string getCustomIcon()
+ * @method void setCustomIcon(string|null $customIcon)
+ * @method string getCustomMessage()
+ * @method void setCustomMessage(string|null $customMessage)
+ * @method int getClearAt()
+ * @method void setClearAt(int|null $clearAt)
+ */
+class UserStatus extends Entity {
+
+ /** @var string */
+ public $userId;
+
+ /** @var string */
+ public $status;
+
+ /** @var int */
+ public $statusTimestamp;
+
+ /** @var boolean */
+ public $isUserDefined;
+
+ /** @var string|null */
+ public $messageId;
+
+ /** @var string|null */
+ public $customIcon;
+
+ /** @var string|null */
+ public $customMessage;
+
+ /** @var int|null */
+ public $clearAt;
+
+ public function __construct() {
+ $this->addType('userId', 'string');
+ $this->addType('status', 'string');
+ $this->addType('statusTimestamp', 'int');
+ $this->addType('isUserDefined', 'boolean');
+ $this->addType('messageId', 'string');
+ $this->addType('customIcon', 'string');
+ $this->addType('customMessage', 'string');
+ $this->addType('clearAt', 'int');
+ }
+}
diff --git a/apps/user_status/lib/Db/UserStatusMapper.php b/apps/user_status/lib/Db/UserStatusMapper.php
new file mode 100644
index 00000000000..4e78ef11e05
--- /dev/null
+++ b/apps/user_status/lib/Db/UserStatusMapper.php
@@ -0,0 +1,104 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020, Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OCA\UserStatus\Db;
+
+use OCP\AppFramework\Db\QBMapper;
+use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IDBConnection;
+
+/**
+ * Class UserStatusMapper
+ *
+ * @package OCA\UserStatus\Db
+ *
+ * @method UserStatus insert(UserStatus $entity)
+ * @method UserStatus update(UserStatus $entity)
+ * @method UserStatus insertOrUpdate(UserStatus $entity)
+ * @method UserStatus delete(UserStatus $entity)
+ */
+class UserStatusMapper extends QBMapper {
+
+ /**
+ * @param IDBConnection $db
+ */
+ public function __construct(IDBConnection $db) {
+ parent::__construct($db, 'user_status');
+ }
+
+ /**
+ * @param int|null $limit
+ * @param int|null $offset
+ * @return UserStatus[]
+ */
+ public function findAll(?int $limit = null, ?int $offset = null):array {
+ $qb = $this->db->getQueryBuilder();
+ $qb
+ ->select('*')
+ ->from($this->tableName);
+
+ if ($limit !== null) {
+ $qb->setMaxResults($limit);
+ }
+ if ($offset !== null) {
+ $qb->setFirstResult($offset);
+ }
+
+ return $this->findEntities($qb);
+ }
+
+ /**
+ * @param string $userId
+ * @return UserStatus
+ * @throws \OCP\AppFramework\Db\DoesNotExistException
+ */
+ public function findByUserId(string $userId):UserStatus {
+ $qb = $this->db->getQueryBuilder();
+ $qb
+ ->select('*')
+ ->from($this->tableName)
+ ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId, IQueryBuilder::PARAM_STR)));
+
+ return $this->findEntity($qb);
+ }
+
+ /**
+ * Clear all statuses older than a given timestamp
+ *
+ * @param int $timestamp
+ */
+ public function clearOlderThan(int $timestamp): void {
+ $qb = $this->db->getQueryBuilder();
+ $qb->update($this->tableName)
+ ->set('message_id', $qb->createNamedParameter(null))
+ ->set('custom_icon', $qb->createNamedParameter(null))
+ ->set('custom_message', $qb->createNamedParameter(null))
+ ->set('clear_at', $qb->createNamedParameter(null))
+ ->where($qb->expr()->isNotNull('clear_at'))
+ ->andWhere($qb->expr()->lte('clear_at', $qb->createNamedParameter($timestamp, IQueryBuilder::PARAM_INT)));
+
+ $qb->execute();
+ }
+}