]> git.mxchange.org Git - friendica.git/commitdiff
Refactory PermissionSet Repository, add BaseRepository::_selectFirstRowAsArray()
authorArt4 <art4@wlabs.de>
Tue, 25 Feb 2025 08:30:27 +0000 (08:30 +0000)
committerArt4 <art4@wlabs.de>
Tue, 25 Feb 2025 08:30:27 +0000 (08:30 +0000)
src/BaseRepository.php
src/Security/PermissionSet/Repository/PermissionSet.php

index 068a9f4b63b9f6ad6a0dea6f223731dde9a6edc4..afbb688bd90ab73c1a4148c05ea6dc4624259dc8 100644 (file)
@@ -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();
                }
index ec3e2745ec994ece6522abb5ad45041785402ca5..c77baf0f2e17852dcd5dccaa16141841c0d6b352 100644 (file)
@@ -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()) {