diff options
author | Georg Ehrke <developer@georgehrke.com> | 2020-06-02 12:48:37 +0200 |
---|---|---|
committer | Georg Ehrke <developer@georgehrke.com> | 2020-07-31 16:45:27 +0200 |
commit | 0fad921840eb801492522af6ef795231163cff20 (patch) | |
tree | ddab0d1567d81eeb8d956ec98196180ad296cabd /apps/user_status/lib/Db | |
parent | fce6df06e2bd1d68ee5614621ae7f92c6f7fa53d (diff) | |
download | nextcloud-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.php | 90 | ||||
-rw-r--r-- | apps/user_status/lib/Db/UserStatusMapper.php | 104 |
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(); + } +} |