Skip to content

Commit 8565674

Browse files
committed
Initial config and dependency updates
1 parent ee57444 commit 8565674

12 files changed

Lines changed: 44 additions & 44 deletions

File tree

composer.json

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@
2626
"ext-simplexml": "*",
2727
"api-platform/core": "^4.2",
2828
"cocur/slugify": "^4.1",
29-
"doctrine/annotations": "^1.7.0",
30-
"doctrine/dbal": "^3.4",
31-
"doctrine/doctrine-bundle": "^2.7",
32-
"doctrine/doctrine-migrations-bundle": "^3.2",
33-
"doctrine/orm": "^2.9",
29+
"doctrine/dbal": "^4.0",
30+
"doctrine/doctrine-bundle": "^3.2",
31+
"doctrine/doctrine-migrations-bundle": "^3.7",
32+
"doctrine/orm": "^3.6",
3433
"imagine/imagine": "^1.3",
3534
"lcobucci/clock": "^2.0|^3.0",
3635
"lexik/jwt-authentication-bundle": "^3.1",
@@ -40,7 +39,7 @@
4039
"phpdocumentor/reflection-docblock": "^5.3",
4140
"ramsey/collection": "^1.2",
4241
"ramsey/uuid": "^4.5",
43-
"ramsey/uuid-doctrine": "^1.6",
42+
"ramsey/uuid-doctrine": "^2.1",
4443
"symfony/asset": "^7.2",
4544
"symfony/console": "^7.2",
4645
"symfony/doctrine-bridge": "^7.2",
@@ -56,6 +55,7 @@
5655
"symfony/twig-bundle": "^7.4",
5756
"symfony/type-info": "^7.4",
5857
"symfony/validator": "^7.4",
58+
"symfony/var-exporter": "^8",
5959
"twig/cssinliner-extra": "^3.0.3",
6060
"twig/extra-bundle": "^3.0.3",
6161
"twig/inky-extra": "^3.0.3",
@@ -65,8 +65,7 @@
6565
"behat/behat": "^3.13",
6666
"behat/mink": "*",
6767
"behatch/contexts": "dev-master",
68-
"doctrine/common": "^3.1",
69-
"doctrine/doctrine-fixtures-bundle": "^3.4",
68+
"doctrine/doctrine-fixtures-bundle": "^4.3",
7069
"friends-of-behat/mink-browserkit-driver": "^1.6",
7170
"friends-of-behat/mink-extension": "^2.7",
7271
"friends-of-behat/symfony-extension": "^2.4",
@@ -87,7 +86,6 @@
8786
"roave/security-advisories": "dev-master",
8887
"symfony/browser-kit": "^7.4",
8988
"symfony/css-selector": "^7.4",
90-
"symfony/debug": "^4",
9189
"symfony/dotenv": "^7.4",
9290
"symfony/http-client": "^7.4",
9391
"symfony/maker-bundle": "^1.0",
@@ -140,7 +138,6 @@
140138
"symfony/serializer": "<=6.1.2",
141139
"symfony/var-exporter": "<6.1",
142140
"symfony/web-link": "<=6.0",
143-
"doctrine/collections": "<1.7",
144-
"doctrine/orm": "<2.13"
141+
"doctrine/collections": "<1.7"
145142
}
146143
}

src/Doctrine/Extension/ORM/TablePrefixExtension.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
1515
use Doctrine\ORM\Mapping\ClassMetadata;
16-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
16+
use Doctrine\ORM\Mapping\ManyToManyOwningSideMapping;
1717
use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
1818

1919
/**
@@ -61,10 +61,18 @@ private function setPrimaryTable(ClassMetadata $classMetadata): void
6161
private function setJoinTableName(ClassMetadata $classMetadata): void
6262
{
6363
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
64-
if (ClassMetadataInfo::MANY_TO_MANY === $mapping['type'] && $mapping['isOwningSide'] && !\array_key_exists('inherited', $mapping)) {
65-
$mappedTableName = $mapping['joinTable']['name'];
66-
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
64+
if (!$mapping instanceof ManyToManyOwningSideMapping) {
65+
continue;
6766
}
67+
68+
if ($mapping->inherited !== null) {
69+
continue;
70+
}
71+
72+
$mapping->joinTable->name = $this->prefix . $mapping->joinTable->name;
73+
74+
// May not be needed, because $mapping is already the same object stored internally.
75+
$classMetadata->associationMappings[$fieldName] = $mapping;
6876
}
6977
}
7078

src/EventListener/Doctrine/PropagateUpdatesListener.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use ApiPlatform\Metadata\IriConverterInterface;
1717
use ApiPlatform\Metadata\ResourceClassResolverInterface;
1818
use ApiPlatform\Metadata\UrlGeneratorInterface;
19-
use Doctrine\Common\Util\ClassUtils;
2019
use Doctrine\ORM\EntityRepository;
2120
use Doctrine\ORM\Event\OnFlushEventArgs;
2221
use Doctrine\ORM\Event\PostFlushEventArgs;
@@ -25,6 +24,7 @@
2524
use Doctrine\Persistence\ManagerRegistry;
2625
use Doctrine\Persistence\ObjectManager;
2726
use Doctrine\Persistence\ObjectRepository;
27+
use Doctrine\Persistence\Proxy;
2828
use Silverback\ApiComponentsBundle\DataProvider\PageDataProvider;
2929
use Silverback\ApiComponentsBundle\Entity\Component\Collection;
3030
use Silverback\ApiComponentsBundle\Entity\Core\PageDataInterface;
@@ -121,7 +121,11 @@ private function gatherResourceAndAssociated(object $entity, string $type, Objec
121121
$changeSet = $uow->getEntityChangeSet($entity);
122122
$this->collectUpdatedResource($entity, $type);
123123

124-
$associationMappings = $em->getClassMetadata(ClassUtils::getClass($entity))->getAssociationMappings();
124+
$class = $entity instanceof Proxy
125+
? get_parent_class($entity)
126+
: $entity::class;
127+
128+
$associationMappings = $em->getClassMetadata($class)->getAssociationMappings();
125129

126130
if ($entity instanceof PageDataInterface) {
127131
$this->pageDataPropertiesChanged = array_keys($changeSet);

src/EventListener/Doctrine/PublishableListener.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Silverback\ApiComponentsBundle\EventListener\Doctrine;
1313

1414
use Doctrine\ORM\EntityManagerInterface;
15-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
15+
use Doctrine\ORM\Mapping\ClassMetadata;
1616
use Doctrine\Persistence\Event\LoadClassMetadataEventArgs;
1717
use Silverback\ApiComponentsBundle\AttributeReader\PublishableAttributeReader;
1818

@@ -30,7 +30,7 @@ public function __construct(PublishableAttributeReader $publishableStatusChecker
3030

3131
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
3232
{
33-
/** @var ClassMetadataInfo $metadata */
33+
/** @var ClassMetadata $metadata */
3434
$metadata = $eventArgs->getClassMetadata();
3535
if (!$this->publishableStatusChecker->isConfigured($metadata->getName())) {
3636
return;
@@ -61,7 +61,10 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
6161
'targetEntity' => $metadata->getName(),
6262
'joinColumns' => [
6363
[
64-
'name' => $namingStrategy->joinKeyColumnName($metadata->getName()),
64+
'name' => $namingStrategy->joinKeyColumnName(
65+
$configuration->associationName,
66+
$metadata->getName()
67+
),
6568
'referencedColumnName' => $namingStrategy->referenceColumnName(),
6669
'onDelete' => 'SET NULL',
6770
'nullable' => true,

src/EventListener/Doctrine/TimestampedListener.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
namespace Silverback\ApiComponentsBundle\EventListener\Doctrine;
1313

14-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
14+
use Doctrine\ORM\Mapping\ClassMetadata;
1515
use Doctrine\Persistence\Event\LoadClassMetadataEventArgs;
1616
use Silverback\ApiComponentsBundle\AttributeReader\TimestampedAttributeReader;
1717

@@ -29,7 +29,7 @@ public function __construct(TimestampedAttributeReader $annotationReader)
2929

3030
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
3131
{
32-
/** @var ClassMetadataInfo $metadata */
32+
/** @var ClassMetadata $metadata */
3333
$metadata = $eventArgs->getClassMetadata();
3434
if (!$this->annotationReader->isConfigured($metadata->getName())) {
3535
return;

src/EventListener/Doctrine/UploadableListener.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Silverback\ApiComponentsBundle\EventListener\Doctrine;
1313

1414
use Doctrine\ORM\EntityManagerInterface;
15-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
15+
use Doctrine\ORM\Mapping\ClassMetadata;
1616
use Doctrine\Persistence\Event\LoadClassMetadataEventArgs;
1717
use Silverback\ApiComponentsBundle\AttributeReader\UploadableAttributeReader;
1818

@@ -30,7 +30,7 @@ public function __construct(UploadableAttributeReader $uploadableAnnotationReade
3030

3131
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
3232
{
33-
/** @var ClassMetadataInfo $metadata */
33+
/** @var ClassMetadata $metadata */
3434
$metadata = $eventArgs->getClassMetadata();
3535
$className = $metadata->getName();
3636
if (!$this->uploadableAnnotationReader->isConfigured($className)) {

src/Resources/config/doctrine-orm/Core.ComponentGroup.orm.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
<many-to-many field="layouts" target-entity="Silverback\ApiComponentsBundle\Entity\Core\Layout" mapped-by="componentGroups" fetch="LAZY"/>
1717
<many-to-many field="pages" target-entity="Silverback\ApiComponentsBundle\Entity\Core\Page" mapped-by="componentGroups" fetch="LAZY"/>
1818
<many-to-many field="components" target-entity="Silverback\ApiComponentsBundle\Entity\Core\AbstractComponent" mapped-by="componentGroups" fetch="LAZY"/>
19-
<field name="allowedComponents" column="allowed_components" type="array" nullable="true"/>
19+
<field name="allowedComponents" column="allowed_components" type="json" nullable="true"/>
2020
</entity>
2121
</doctrine-mapping>

src/Resources/config/doctrine-orm/User.AbstractUser.orm.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
</indexes>
99
<field name="username" length="255" column="username"/>
1010
<field name="emailAddress" length="255" column="email_address"/>
11-
<field name="roles" column="roles" type="array"/>
11+
<field name="roles" column="roles" type="json"/>
1212
<field name="enabled" column="enabled" type="boolean"/>
1313
<field name="password" column="password" length="255"/>
1414
<field name="newPasswordConfirmationToken" column="new_password_confirmation_token" nullable="true"/>

src/Serializer/Normalizer/ComponentPositionNormalizer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
namespace Silverback\ApiComponentsBundle\Serializer\Normalizer;
1313

1414
use ApiPlatform\Metadata\IriConverterInterface;
15-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
15+
use Doctrine\ORM\Mapping\ClassMetadata;
1616
use Doctrine\Persistence\ManagerRegistry;
1717
use Silverback\ApiComponentsBundle\DataProvider\PageDataProvider;
1818
use Silverback\ApiComponentsBundle\Entity\Core\AbstractComponent;
@@ -135,7 +135,7 @@ private function normalizePublishableComponent(AbstractComponent $component)
135135
if (!$em) {
136136
throw new InvalidArgumentException(\sprintf('Could not find entity manager for class %s', $type));
137137
}
138-
/** @var ClassMetadataInfo $classMetadata */
138+
/** @var ClassMetadata $classMetadata */
139139
$classMetadata = $em->getClassMetadata($type);
140140
$draft = $classMetadata->getFieldValue($component, $configuration->reverseAssociationName);
141141

src/Serializer/Normalizer/PublishableNormalizer.php

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use ApiPlatform\Validator\Exception\ValidationException;
1616
use ApiPlatform\Validator\ValidatorInterface;
1717
use Doctrine\Common\Collections\ArrayCollection;
18-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
18+
use Doctrine\ORM\Mapping\ClassMetadata;
1919
use Doctrine\Persistence\ManagerRegistry;
2020
use Doctrine\Persistence\ObjectManager;
2121
use Silverback\ApiComponentsBundle\Annotation\Publishable;
@@ -84,7 +84,7 @@ public function normalize($object, $format = null, array $context = []): float|a
8484

8585
$configuration = $this->publishableStatusChecker->getAttributeReader()->getConfiguration($type);
8686
$em = $this->getManagerFromType($type);
87-
$classMetadata = $this->getClassMetadataInfo($em, $type);
87+
$classMetadata = $em->getClassMetadata($type);
8888

8989
$publishedAtDateTime = $classMetadata->getFieldValue($object, $configuration->fieldName);
9090
if ($publishedAtDateTime instanceof \DateTimeInterface) {
@@ -213,7 +213,7 @@ private function unsetRestrictedData($type, array $data, Publishable $configurat
213213
public function createDraft(object $object, Publishable $configuration, string $type): object
214214
{
215215
$em = $this->getManagerFromType($type);
216-
$classMetadata = $this->getClassMetadataInfo($em, $type);
216+
$classMetadata = $em->getClassMetadata($type);
217217

218218
// Resource is a draft: nothing to do here anymore
219219
if (null !== $classMetadata->getFieldValue($object, $configuration->associationName)) {
@@ -234,7 +234,7 @@ public function createDraft(object $object, Publishable $configuration, string $
234234
// Clear any writable one-to-many fields, these should still reference the published component, such as component positions
235235
// Doesn't matter usually it seems, but where we process uploadable, the one-to-many is not then reassigned later back to the publishable during normalization
236236
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
237-
if (ClassMetadataInfo::ONE_TO_MANY === $mapping['type'] && $this->propertyAccessor->isWritable($draft, $fieldName)) {
237+
if (ClassMetadata::ONE_TO_MANY === $mapping['type'] && $this->propertyAccessor->isWritable($draft, $fieldName)) {
238238
$this->propertyAccessor->setValue($draft, $fieldName, new ArrayCollection());
239239
}
240240
}
@@ -272,16 +272,6 @@ private function getManagerFromType(string $type): ObjectManager
272272
return $em;
273273
}
274274

275-
private function getClassMetadataInfo(ObjectManager $em, string $type): ClassMetadataInfo
276-
{
277-
$classMetadata = $em->getClassMetadata($type);
278-
if (!$classMetadata instanceof ClassMetadataInfo) {
279-
throw new InvalidArgumentException(\sprintf('Class metadata for %s was not an instance of %s', $type, ClassMetadataInfo::class));
280-
}
281-
282-
return $classMetadata;
283-
}
284-
285275
public function getSupportedTypes(?string $format): array
286276
{
287277
return ['object' => false];

0 commit comments

Comments
 (0)