]> git.mxchange.org Git - friendica.git/commitdiff
Fixups
authorPhilipp <admin@philipp.info>
Sun, 10 Oct 2021 20:45:25 +0000 (22:45 +0200)
committerPhilipp <admin@philipp.info>
Mon, 18 Oct 2021 21:32:42 +0000 (23:32 +0200)
src/BaseCollection.php
src/Module/Settings/Profile/Index.php
src/Profile/ProfileField/Depository/ProfileField.php
src/Profile/ProfileField/Entity/ProfileField.php
tests/Util/CollectionDouble.php [new file with mode: 0644]
tests/Util/EntityDouble.php [new file with mode: 0644]
tests/src/CollectionTest.php [new file with mode: 0644]

index 1aa13ae9611403df74bd3078f4b83bcd2989bfa2..d2212e244b921d3e6ec18fbcb0e03eb79f0e6861 100644 (file)
@@ -87,7 +87,7 @@ class BaseCollection extends \ArrayIterator
         */
        public function column($column, $index_key = null)
        {
-               return array_column($this->getArrayCopy(), $column, $index_key);
+               return array_column($this->getArrayCopy(true), $column, $index_key);
        }
 
        /**
@@ -124,4 +124,21 @@ class BaseCollection extends \ArrayIterator
        {
                return new static(array_reverse($this->getArrayCopy()), $this->getTotalCount());
        }
+
+       /**
+        * @inheritDoc
+        *
+        * includes recursion for entity::toArray() function
+        * @see BaseEntity::toArray()
+        */
+       public function getArrayCopy(bool $recursive = false): array
+       {
+               if (!$recursive) {
+                       return parent::getArrayCopy();
+               }
+
+               return array_map(function ($item) {
+                       return is_object($item) ? $item->toArray() : $item;
+               }, parent::getArrayCopy());
+       }
 }
index 92d6356b8d1bec86a413d7dac000cba5d11124de..efb3ac9d3e948ba387abadfed1fc7befa1a9a315 100644 (file)
@@ -287,6 +287,9 @@ class Index extends BaseSettings
                                $profileFieldInputs['new']['value'],
                                $permissionSet
                        ));
+
+                       unset($profileFieldInputs['new']);
+                       unset($profileFieldOrder['new']);
                }
 
                foreach ($profileFieldInputs as $id => $profileFieldInput) {
index 228fc77605043d383011d6f0dd196d85afd6f102..590e3f45a877858372df658c00aa927704d7721b 100644 (file)
@@ -30,6 +30,7 @@ use Friendica\Profile\ProfileField\Factory;
 use Friendica\Profile\ProfileField\Entity;
 use Friendica\Profile\ProfileField\Collection;
 use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
+use Friendica\Util\DateTimeFormat;
 use Psr\Log\LoggerInterface;
 
 class ProfileField extends BaseDepository
@@ -46,7 +47,7 @@ class ProfileField extends BaseDepository
        {
                parent::__construct($database, $logger, $factory);
 
-               $this->permissionSetDepository = permissionSetDepository;
+               $this->permissionSetDepository = $permissionSetDepository;
        }
 
        /**
@@ -91,11 +92,13 @@ class ProfileField extends BaseDepository
        protected function convertToTableRow(Entity\ProfileField $profileField): array
        {
                return [
+                       'uid'     => $profileField->uid,
                        'label'   => $profileField->label,
                        'value'   => $profileField->value,
                        'order'   => $profileField->order,
-                       'created' => $profileField->created,
-                       'edited'  => $profileField->edited,
+                       'created' => $profileField->created->format(DateTimeFormat::MYSQL),
+                       'edited'  => $profileField->edited->format(DateTimeFormat::MYSQL),
+                       'psid'    => $profileField->permissionSetId
                ];
        }
 
@@ -205,7 +208,7 @@ class ProfileField extends BaseDepository
 
                try {
                        if ($profileField->id) {
-                               $this->db->update(self::$table_name, $fields, ['id' => $profileField]);
+                               $this->db->update(self::$table_name, $fields, ['id' => $profileField->id]);
                        } else {
                                $this->db->insert(self::$table_name, $fields);
 
@@ -233,7 +236,7 @@ class ProfileField extends BaseDepository
 
                // Update the order based on the new Profile Field Collection
                $order                 = 0;
-               $labelProfileFieldsOld = $profileFieldsOld->column('id', 'label');
+               $labelProfileFieldsOld = array_flip($profileFieldsOld->column('label'));
 
                foreach ($profileFields as $profileField) {
                        // Update existing field (preserve
index deab955d3c619c0a78971b60719d6559b4212ef5..c46ad12de86ef75563588b5be7f80b4b3226c16f 100644 (file)
@@ -58,7 +58,7 @@ class ProfileField extends BaseEntity
        /** @var int */
        protected $order;
        /** @var int */
-       protected $psid;
+       protected $permissionSetId;
        /** @var string */
        protected $label;
        /** @var string */
@@ -68,6 +68,9 @@ class ProfileField extends BaseEntity
        /** @var \DateTime */
        protected $edited;
 
+       /**
+        * @throws UnexpectedPermissionSetException In case no Permission Set can be retrieved
+        */
        public function __construct(PermissionSetDepository $permissionSetDepository, int $uid, int $order, int $permissionSetId, string $label, string $value, \DateTime $created, \DateTime $edited, int $id = null, PermissionSet $permissionSet = null)
        {
                $this->permissionSetDepository = $permissionSetDepository;
@@ -75,12 +78,16 @@ class ProfileField extends BaseEntity
 
                $this->uid     = $uid;
                $this->order   = $order;
-               $this->psid    = $permissionSetId;
+               $this->permissionSetId    = $permissionSetId ?? ($permissionSet ? $permissionSet->id : null);
                $this->label   = $label;
                $this->value   = $value;
                $this->created = $created;
                $this->edited  = $edited;
                $this->id      = $id;
+
+               if (is_null($this->permissionSetId)) {
+                       throw new UnexpectedPermissionSetException('Either set the permission set ID or the permission set itself');
+               }
        }
 
        /**
@@ -93,7 +100,7 @@ class ProfileField extends BaseEntity
                        case 'permissionSet':
                                if (empty($this->permissionSet)) {
                                        try {
-                                               $permissionSet = $this->permissionSetDepository->selectOneById($this->psid, $this->uid);
+                                               $permissionSet = $this->permissionSetDepository->selectOneById($this->permissionSetId, $this->uid);
                                                if ($permissionSet->uid !== $this->uid) {
                                                        throw new UnexpectedPermissionSetException(sprintf('PermissionSet %d (user-id: %d) for ProfileField %d (user-id: %d) is invalid.', $permissionSet->id, $permissionSet->uid, $this->id, $this->uid));
                                                }
@@ -130,7 +137,7 @@ class ProfileField extends BaseEntity
                $this->value         = $value;
                $this->order         = $order;
                $this->permissionSet = $permissionSet;
-               $this->psid          = $permissionSet->id;
+               $this->permissionSetId          = $permissionSet->id;
                $this->edited        = new \DateTime('now', new \DateTimeZone('UTC'));
        }
 
diff --git a/tests/Util/CollectionDouble.php b/tests/Util/CollectionDouble.php
new file mode 100644 (file)
index 0000000..ed5e371
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+
+namespace Friendica\Test\Util;
+
+use Friendica\BaseCollection;
+
+class CollectionDouble extends BaseCollection
+{
+}
diff --git a/tests/Util/EntityDouble.php b/tests/Util/EntityDouble.php
new file mode 100644 (file)
index 0000000..414e96d
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+namespace Friendica\Test\Util;
+
+use Friendica\BaseEntity;
+
+/**
+ * @property-read string $protString
+ * @property-read int $protInt
+ * @property-read \DateTime $protDateTime
+ */
+class EntityDouble extends BaseEntity
+{
+       protected $protString;
+       protected $protInt;
+       protected $protDateTime;
+       private $privString;
+
+       public function __construct(string $protString, int $protInt, \DateTime $protDateTime, string $privString)
+       {
+               $this->protString   = $protString;
+               $this->protInt      = $protInt;
+               $this->protDateTime = $protDateTime;
+               $this->privString   = $privString;
+       }
+}
diff --git a/tests/src/CollectionTest.php b/tests/src/CollectionTest.php
new file mode 100644 (file)
index 0000000..9e198c9
--- /dev/null
@@ -0,0 +1,24 @@
+<?php
+
+namespace Friendica\Test\src;
+
+use Friendica\Test\MockedTest;
+use Friendica\Test\Util\CollectionDouble;
+use Friendica\Test\Util\EntityDouble;
+
+class CollectionTest extends MockedTest
+{
+       /**
+        * Test if the BaseCollection::column() works as expected
+        */
+       public function testGetArrayCopy()
+       {
+               $collection = new CollectionDouble();
+               $collection->append(new EntityDouble('test', 23, new \DateTime('now', new \DateTimeZone('UTC')), 'privTest'));
+               $collection->append(new EntityDouble('test2', 25, new \DateTime('now', new \DateTimeZone('UTC')), 'privTest23'));
+
+               self::assertEquals(['test', 'test2'], $collection->column('protString'));
+               self::assertEmpty($collection->column('privString'));
+               self::assertEquals([23,25], $collection->column('protInt'));
+       }
+}