*/
public function column($column, $index_key = null)
{
- return array_column($this->getArrayCopy(), $column, $index_key);
+ return array_column($this->getArrayCopy(true), $column, $index_key);
}
/**
{
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());
+ }
}
$profileFieldInputs['new']['value'],
$permissionSet
));
+
+ unset($profileFieldInputs['new']);
+ unset($profileFieldOrder['new']);
}
foreach ($profileFieldInputs as $id => $profileFieldInput) {
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
{
parent::__construct($database, $logger, $factory);
- $this->permissionSetDepository = permissionSetDepository;
+ $this->permissionSetDepository = $permissionSetDepository;
}
/**
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
];
}
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);
// 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
/** @var int */
protected $order;
/** @var int */
- protected $psid;
+ protected $permissionSetId;
/** @var string */
protected $label;
/** @var string */
/** @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;
$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');
+ }
}
/**
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));
}
$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'));
}
--- /dev/null
+<?php
+
+namespace Friendica\Test\Util;
+
+use Friendica\BaseCollection;
+
+class CollectionDouble extends BaseCollection
+{
+}
--- /dev/null
+<?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;
+ }
+}
--- /dev/null
+<?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'));
+ }
+}