Skip to content

Commit 5be509e

Browse files
committed
IBX-9727: Defined generic types for Forms transformers after SF 7 upgrade
1 parent bcca9b2 commit 5be509e

19 files changed

+98
-109
lines changed

src/lib/FieldType/DataTransformer/AbstractBinaryBaseTransformer.php

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,33 @@
1010

1111
use Ibexa\Contracts\Core\Repository\FieldType;
1212
use Ibexa\Core\FieldType\Value;
13-
use Symfony\Component\Form\Exception\TransformationFailedException;
1413

1514
/**
16-
* Base transformer for binary file based field types.
17-
*
18-
* {@inheritdoc}
15+
* Base transformer for binary file-based field types.
1916
*/
2017
abstract class AbstractBinaryBaseTransformer
2118
{
2219
protected FieldType $fieldType;
2320

2421
protected Value $initialValue;
2522

26-
/** @var string */
27-
protected $valueClass;
23+
/** @phpstan-var class-string */
24+
protected string $valueClass;
2825

2926
/**
30-
* @param \Ibexa\Contracts\Core\Repository\FieldType $fieldType
31-
* @param \Ibexa\Core\FieldType\Value $initialValue
32-
* @param string $valueClass
27+
* @phpstan-param class-string $valueClass
3328
*/
34-
public function __construct(FieldType $fieldType, Value $initialValue, $valueClass)
29+
public function __construct(FieldType $fieldType, Value $initialValue, string $valueClass)
3530
{
3631
$this->fieldType = $fieldType;
3732
$this->initialValue = $initialValue;
3833
$this->valueClass = $valueClass;
3934
}
4035

4136
/**
42-
* @return array|null
37+
* @return array{file: string|null, remove: bool}
4338
*/
44-
public function getDefaultProperties()
39+
public function getDefaultProperties(): array
4540
{
4641
return [
4742
'file' => null,
@@ -50,23 +45,17 @@ public function getDefaultProperties()
5045
}
5146

5247
/**
53-
* @param array $value
54-
*
55-
* @return \Ibexa\Core\FieldType\Value
48+
* @param array<string, mixed> $value
5649
*
5750
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
5851
*/
59-
public function getReverseTransformedValue($value)
52+
public function getReverseTransformedValue(array $value): Value
6053
{
61-
if (!is_array($value)) {
62-
throw new TransformationFailedException(sprintf('Received %s instead of an array', gettype($value)));
63-
}
64-
6554
if ($value['remove']) {
6655
return $this->fieldType->getEmptyValue();
6756
}
6857

69-
/* in case file is not modified, overwrite settings only */
58+
/* in case the file is not modified, overwrite settings only */
7059
if (null === $value['file']) {
7160
return clone $this->initialValue;
7261
}

src/lib/FieldType/DataTransformer/AuthorValueTransformer.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,23 @@
1414

1515
/**
1616
* DataTransformer for Author\Value.
17+
*
18+
* @phpstan-type TAuthorData array{id: int, name: string, email: string}|array{}
19+
*
20+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\Author\Value, list<TAuthorData>>
1721
*/
1822
class AuthorValueTransformer implements DataTransformerInterface
1923
{
24+
/**
25+
* @phpstan-return list<TAuthorData>|array{}
26+
*/
2027
public function transform(mixed $value): array
2128
{
2229
if (is_array($value)) {
2330
return $value;
2431
}
2532

26-
if (!$value instanceof Value || $value->authors->count() == 0) {
33+
if (!$value instanceof Value || $value->authors->count() === 0) {
2734
return [[]];
2835
}
2936

@@ -41,7 +48,7 @@ public function transform(mixed $value): array
4148

4249
public function reverseTransform(mixed $value): ?Value
4350
{
44-
if ($value === null || !is_array($value)) {
51+
if (!is_array($value)) {
4552
return null;
4653
}
4754

src/lib/FieldType/DataTransformer/BinaryFileValueTransformer.php

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@
1212
use Symfony\Component\Form\DataTransformerInterface;
1313

1414
/**
15-
* Data transformer for ezbinaryfile field type.
15+
* Data transformer for an `ezbinaryfile` field type.
1616
*
17-
* {@inheritdoc}
17+
* @phpstan-type TBinaryFileData array{file: string|null, remove: bool, downloadCount: int}
18+
*
19+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\BinaryFile\Value, TBinaryFileData>
1820
*/
1921
class BinaryFileValueTransformer extends AbstractBinaryBaseTransformer implements DataTransformerInterface
2022
{
21-
/**
22-
* @param \Ibexa\Core\FieldType\BinaryFile\Value $value
23-
*
24-
* @return array
25-
*/
2623
public function transform(mixed $value): array
2724
{
2825
if (null === $value) {
@@ -36,21 +33,13 @@ public function transform(mixed $value): array
3633
}
3734

3835
/**
39-
* @param array $value
40-
*
41-
* @return \Ibexa\Core\FieldType\BinaryFile\Value
36+
* @phpstan-param TBinaryFileData $value
4237
*
4338
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
4439
*/
4540
public function reverseTransform(mixed $value): ?Value
4641
{
47-
/** @var \Ibexa\Core\FieldType\BinaryFile\Value $valueObject */
48-
$valueObject = $this->getReverseTransformedValue($value);
49-
50-
if ($this->fieldType->isEmptyValue($valueObject)) {
51-
return $valueObject;
52-
}
53-
54-
return $valueObject;
42+
/** @var \Ibexa\Core\FieldType\BinaryFile\Value */
43+
return $this->getReverseTransformedValue($value);
5544
}
5645
}

src/lib/FieldType/DataTransformer/DateTimeValueTransformer.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414

1515
/**
1616
* DataTransformer for DateAndTime\Value.
17+
*
18+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\DateAndTime\Value, int|null>
1719
*/
1820
class DateTimeValueTransformer implements DataTransformerInterface
1921
{
2022
/**
21-
* @param mixed $value
22-
*
23-
* @return int|null
24-
*
2523
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
2624
*/
2725
public function transform(mixed $value): ?int
@@ -44,10 +42,7 @@ public function transform(mixed $value): ?int
4442
}
4543

4644
/**
47-
* @param mixed $value
48-
*
49-
* @return \Ibexa\Core\FieldType\DateAndTime\Value|null
50-
*
45+
* @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException
5146
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
5247
*/
5348
public function reverseTransform(mixed $value): ?Value

src/lib/FieldType/DataTransformer/DateValueTransformer.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414

1515
/**
1616
* DataTransformer for Date\Value.
17+
*
18+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\Date\Value, int|null>
1719
*/
1820
class DateValueTransformer implements DataTransformerInterface
1921
{
2022
/**
21-
* @param mixed $value
22-
*
23-
* @return int|null
24-
*
2523
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
2624
*/
2725
public function transform(mixed $value): ?int

src/lib/FieldType/DataTransformer/FieldValueTransformer.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
/**
1616
* Generic data transformer for FieldTypes values.
1717
* Uses FieldType::toHash() / FieldType::fromHash().
18+
*
19+
* @implements \Symfony\Component\Form\DataTransformerInterface<mixed, mixed>
1820
*/
1921
class FieldValueTransformer implements DataTransformerInterface
2022
{
@@ -29,9 +31,7 @@ public function __construct(FieldType $fieldType)
2931
* Transforms a FieldType Value into a hash using `FieldTpe::toHash()`.
3032
* This hash is compatible with `reverseTransform()`.
3133
*
32-
* @param mixed $value
33-
*
34-
* @return array|null the value's hash, or null if $value was not a FieldType Value
34+
* @return mixed the value's hash, or null if $value was not a FieldType Value
3535
*/
3636
public function transform(mixed $value): mixed
3737
{
@@ -45,10 +45,6 @@ public function transform(mixed $value): mixed
4545
/**
4646
* Transforms a hash into a FieldType Value using `FieldType::fromHash()`.
4747
* The FieldValue is compatible with `transform()`.
48-
*
49-
* @param mixed $value
50-
*
51-
* @return \Ibexa\Contracts\Core\FieldType\Value
5248
*/
5349
public function reverseTransform(mixed $value): Value
5450
{

src/lib/FieldType/DataTransformer/ImageAssetValueTransformer.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
use Symfony\Component\Form\DataTransformerInterface;
1313
use Symfony\Component\Form\Exception\TransformationFailedException;
1414

15+
/**
16+
* @phpstan-type TImageAssetData array{file: string|null, remove: boolean, destinationContentId: int, alternativeText: string|null}
17+
*
18+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\ImageAsset\Value, TImageAssetData|null>
19+
*/
1520
class ImageAssetValueTransformer extends AbstractBinaryBaseTransformer implements DataTransformerInterface
1621
{
1722
/**
18-
* @param \Ibexa\Core\FieldType\ImageAsset\Value|null $value
19-
*
2023
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
21-
*
22-
* @return array|null
2324
*/
2425
public function transform($value): ?array
2526
{
@@ -36,7 +37,7 @@ public function transform($value): ?array
3637
return array_merge(
3738
$this->getDefaultProperties(),
3839
[
39-
'destinationContentId' => $value->destinationContentId,
40+
'destinationContentId' => (int)$value->destinationContentId,
4041
'alternativeText' => $value->alternativeText,
4142
]
4243
);

src/lib/FieldType/DataTransformer/ImageValueTransformer.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313

1414
/**
1515
* Data transformer for the `ezimage` field type.
16+
*
17+
* @phpstan-type TImageData array{file: string|null, remove: boolean, alternativeText: string|null, additionalData: array<string>}
18+
*
19+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\Image\Value, array<string, mixed>>
1620
*/
1721
class ImageValueTransformer extends AbstractBinaryBaseTransformer implements DataTransformerInterface
1822
{

src/lib/FieldType/DataTransformer/KeywordValueTransformer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
/**
1515
* DataTransformer for Keyword\Value.
16+
*
17+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\Keyword\Value, string|null>
1618
*/
1719
class KeywordValueTransformer implements DataTransformerInterface
1820
{

src/lib/FieldType/DataTransformer/MediaValueTransformer.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,12 @@
1414
/**
1515
* Data transformer for ezmedia field type.
1616
*
17-
* {@inheritdoc}
17+
* @phpstan-type TMediaData array{file: string|null, remove: bool, hasController: bool, loop: bool, autoplay: bool, width: int, height: int}
18+
*
19+
* @implements \Symfony\Component\Form\DataTransformerInterface<\Ibexa\Core\FieldType\Media\Value, TMediaData>
1820
*/
1921
class MediaValueTransformer extends AbstractBinaryBaseTransformer implements DataTransformerInterface
2022
{
21-
/**
22-
* @param \Ibexa\Core\FieldType\Media\Value $value
23-
*
24-
* @return array
25-
*/
2623
public function transform(mixed $value): array
2724
{
2825
if (null === $value) {
@@ -42,9 +39,7 @@ public function transform(mixed $value): array
4239
}
4340

4441
/**
45-
* @param array $value
46-
*
47-
* @return \Ibexa\Core\FieldType\Media\Value
42+
* @phpstan-param TMediaData $value
4843
*
4944
* @throws \Symfony\Component\Form\Exception\TransformationFailedException
5045
*/

0 commit comments

Comments
 (0)