%PDF- %PDF-
Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Db/ |
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Db/PasswordMapper.php |
<?php /** * This file is part of the Passwords App * created by Marius David Wieschollek * and licensed under the AGPL. */ namespace OCA\Passwords\Db; use Exception; use OCP\AppFramework\Db\Entity; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\MultipleObjectsReturnedException; /** * Class PasswordMapper * * @package OCA\Passwords\Db */ class PasswordMapper extends AbstractMapper { const TABLE_NAME = 'passwords_password'; /** * @return Password[] * @throws Exception */ public function findAllShared(): array { return $this->findAllByField('has_shares', true, IQueryBuilder::PARAM_BOOL); } /** * @param string $shareUuid * @param bool $source * * @return null|Password|Entity * @throws DoesNotExistException * @throws MultipleObjectsReturnedException */ public function findPasswordByShare(string $shareUuid, bool $source = true): ?Password { $sql = $this->db->getQueryBuilder(); $mapField = $source ? 'source_password':'target_password'; $sql->select('a.*') ->from(static::TABLE_NAME, 'a') ->innerJoin('a', ShareMapper::TABLE_NAME, 'b', "a.`uuid` = b.`{$mapField}`") ->where( $sql->expr()->eq('a.deleted', $sql->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)), $sql->expr()->eq('b.deleted', $sql->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)), $sql->expr()->eq('b.uuid', $sql->createNamedParameter($shareUuid)) )->andWhere( $sql->expr()->orX( $sql->expr()->eq('a.user_id', 'b.user_id'), $sql->expr()->eq('a.user_id', 'b.receiver') ) ); if ($this->userId !== null) { $sql->andWhere( $sql->expr()->eq('b.user_id', $sql->createNamedParameter($this->userId)), $sql->expr()->eq('b.receiver', $sql->createNamedParameter($this->userId)) ); } return $this->findEntity($sql); } /** * @return Password[] */ public function findAllOrphanedTargetPasswords(): array { $sql = $this->db->getQueryBuilder(); $sql->select('a.*') ->from(static::TABLE_NAME, 'a') ->innerJoin('a', ShareMapper::TABLE_NAME, 'b', 'a.`uuid` = b.`target_password`') ->where( $sql->expr()->eq('a.deleted', $sql->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)), $sql->expr()->eq('b.deleted', $sql->createNamedParameter(true, IQueryBuilder::PARAM_BOOL)) ) ->orWhere( $sql->expr()->isNull('b.uuid') ); return $this->findEntities($sql); } /** * @param string $folderUuid * * @return Password[] */ public function findAllByFolder(string $folderUuid): array { $sql = $this->getJoinStatement(PasswordRevisionMapper::TABLE_NAME); $sql->andWhere( $sql->expr()->eq('b.folder', $sql->createNamedParameter($folderUuid)) ); return $this->findEntities($sql); } /** * @param string $tagUuid * @param bool $includeHidden * * @return Password[] */ public function findAllByTag(string $tagUuid, bool $includeHidden = false): array { $sql = $this->getJoinStatement(PasswordTagRelationMapper::TABLE_NAME, 'uuid', 'password'); $sql->andWhere( $sql->expr()->eq('b.tag', $sql->createNamedParameter($tagUuid)) )->andWhere( $sql->expr()->eq('b.deleted', $sql->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)) ); if (!$includeHidden) { $sql->andWhere( $sql->expr()->eq('b.hidden', $sql->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)) ); } return $this->findEntities($sql); } }