From 2254bee74d071e9c0717e219ab2cf3faa8efbca2 Mon Sep 17 00:00:00 2001 From: Art4 Date: Tue, 25 Feb 2025 08:30:27 +0000 Subject: [PATCH] Refactory PermissionSet Repository, add BaseRepository::_selectFirstRowAsArray() --- src/BaseRepository.php | 19 ++++++ .../Repository/PermissionSet.php | 59 ++++++------------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/BaseRepository.php b/src/BaseRepository.php index 068a9f4b63..afbb688bd9 100644 --- a/src/BaseRepository.php +++ b/src/BaseRepository.php @@ -129,6 +129,24 @@ abstract class BaseRepository return $Entities; } + /** + * Selects the fields of the first row as array + * + * @throws NotFoundException + * + * @return array The resulted fields as array + */ + protected function _selectFirstRowAsArray(array $condition, array $params = []): array + { + $fields = $this->db->selectFirst(static::$table_name, [], $condition, $params); + + if (!$this->db->isResult($fields)) { + throw new NotFoundException(); + } + + return $fields; + } + /** * @param array $condition * @param array $params @@ -138,6 +156,7 @@ abstract class BaseRepository protected function _selectOne(array $condition, array $params = []): BaseEntity { $fields = $this->db->selectFirst(static::$table_name, [], $condition, $params); + if (!$this->db->isResult($fields)) { throw new NotFoundException(); } diff --git a/src/Security/PermissionSet/Repository/PermissionSet.php b/src/Security/PermissionSet/Repository/PermissionSet.php index ec3e2745ec..c77baf0f2e 100644 --- a/src/Security/PermissionSet/Repository/PermissionSet.php +++ b/src/Security/PermissionSet/Repository/PermissionSet.php @@ -15,9 +15,9 @@ use Friendica\Model\Circle; use Friendica\Network\HTTPException\NotFoundException; use Friendica\Security\PermissionSet\Exception\PermissionSetNotFoundException; use Friendica\Security\PermissionSet\Exception\PermissionSetPersistenceException; -use Friendica\Security\PermissionSet\Factory; -use Friendica\Security\PermissionSet\Collection; -use Friendica\Security\PermissionSet\Entity; +use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory; +use Friendica\Security\PermissionSet\Collection\PermissionSets as PermissionSetsCollection; +use Friendica\Security\PermissionSet\Entity\PermissionSet as PermissionSetEntity; use Friendica\Util\ACLFormatter; use Psr\Log\LoggerInterface; @@ -26,7 +26,7 @@ class PermissionSet extends BaseRepository /** @var int Virtual permission set id for public permission */ const PUBLIC = 0; - /** @var Factory\PermissionSet */ + /** @var PermissionSetFactory */ protected $factory; protected static $table_name = 'permissionset'; @@ -34,7 +34,7 @@ class PermissionSet extends BaseRepository /** @var ACLFormatter */ private $aclFormatter; - public function __construct(Database $database, LoggerInterface $logger, Factory\PermissionSet $factory, ACLFormatter $aclFormatter) + public function __construct(Database $database, LoggerInterface $logger, PermissionSetFactory $factory, ACLFormatter $aclFormatter) { parent::__construct($database, $logger, $factory); @@ -42,34 +42,28 @@ class PermissionSet extends BaseRepository } /** - * @param array $condition - * @param array $params - * - * @return Entity\PermissionSet * @throws NotFoundException * @throws Exception */ - private function selectOne(array $condition, array $params = []): Entity\PermissionSet + private function selectOne(array $condition, array $params = []): PermissionSetEntity { - return parent::_selectOne($condition, $params); + $fields = parent::_selectFirstRowAsArray($condition, $params); + + return $this->factory->createFromTableRow($fields); } /** * @throws Exception */ - private function select(array $condition, array $params = []): Collection\PermissionSets + private function select(array $condition, array $params = []): PermissionSetsCollection { - return new Collection\PermissionSets(parent::_select($condition, $params)->getArrayCopy()); + return new PermissionSetsCollection(parent::_select($condition, $params)->getArrayCopy()); } /** * Converts a given PermissionSet into a DB compatible row array - * - * @param Entity\PermissionSet $permissionSet - * - * @return array */ - protected function convertToTableRow(Entity\PermissionSet $permissionSet): array + protected function convertToTableRow(PermissionSetEntity $permissionSet): array { return [ 'uid' => $permissionSet->uid, @@ -83,12 +77,11 @@ class PermissionSet extends BaseRepository /** * @param int $id A PermissionSet table row id or self::PUBLIC * @param int $uid The owner of the PermissionSet - * @return Entity\PermissionSet * * @throws PermissionSetNotFoundException * @throws PermissionSetPersistenceException */ - public function selectOneById(int $id, int $uid): Entity\PermissionSet + public function selectOneById(int $id, int $uid): PermissionSetEntity { if ($id === self::PUBLIC) { return $this->factory->createFromString($uid); @@ -109,11 +102,9 @@ class PermissionSet extends BaseRepository * @param int $cid Contact id of the visitor * @param int $uid User id whom the items belong, used for ownership check. * - * @return Collection\PermissionSets - * * @throws PermissionSetPersistenceException */ - public function selectByContactId(int $cid, int $uid): Collection\PermissionSets + public function selectByContactId(int $cid, int $uid): PermissionSetsCollection { try { $cdata = Contact::getPublicAndUserContactID($cid, $uid); @@ -162,16 +153,14 @@ class PermissionSet extends BaseRepository * * @param int $uid * - * @return Entity\PermissionSet - * * @throws PermissionSetPersistenceException */ - public function selectDefaultForUser(int $uid): Entity\PermissionSet + public function selectDefaultForUser(int $uid): PermissionSetEntity { try { $self_contact = Contact::selectFirst(['id'], ['uid' => $uid, 'self' => true]); } catch (Exception $exception) { - throw new PermissionSetPersistenceException(sprintf('Cannot select Contact for user %d', $uid)); + throw new PermissionSetPersistenceException(sprintf('Cannot select Contact for user %d', $uid), $exception); } if (!$this->db->isResult($self_contact)) { @@ -188,10 +177,8 @@ class PermissionSet extends BaseRepository * Fetch the public PermissionSet * * @param int $uid - * - * @return Entity\PermissionSet */ - public function selectPublicForUser(int $uid): Entity\PermissionSet + public function selectPublicForUser(int $uid): PermissionSetEntity { return $this->factory->createFromString($uid, '', '', '', '', self::PUBLIC); } @@ -199,13 +186,9 @@ class PermissionSet extends BaseRepository /** * Selects or creates a PermissionSet based on its fields * - * @param Entity\PermissionSet $permissionSet - * - * @return Entity\PermissionSet - * * @throws PermissionSetPersistenceException */ - public function selectOrCreate(Entity\PermissionSet $permissionSet): Entity\PermissionSet + public function selectOrCreate(PermissionSetEntity $permissionSet): PermissionSetEntity { if ($permissionSet->id) { return $permissionSet; @@ -226,13 +209,9 @@ class PermissionSet extends BaseRepository } /** - * @param Entity\PermissionSet $permissionSet - * - * @return Entity\PermissionSet - * * @throws PermissionSetPersistenceException */ - public function save(Entity\PermissionSet $permissionSet): Entity\PermissionSet + public function save(PermissionSetEntity $permissionSet): PermissionSetEntity { // Don't save/update the common public PermissionSet if ($permissionSet->isPublic()) {