Skip to content

Commit d032b53

Browse files
authored
Merge 1.x into 2.x
2 parents 4c19cca + d5a014b commit d032b53

12 files changed

+398
-176
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44

5+
## [1.18.0](https://github.com/sonata-project/EntityAuditBundle/compare/1.17.1...1.18.0) - 2024-07-14
6+
### Added
7+
- [[#590](https://github.com/sonata-project/EntityAuditBundle/pull/590)] Support for `doctrine/orm` 3 ([@franmomu](https://github.com/franmomu))
8+
9+
### Fixed
10+
- [[#627](https://github.com/sonata-project/EntityAuditBundle/pull/627)] Symfony 7.1 deprecation about `Symfony\Component\HttpKernel\DependencyInjection\Extension` usage ([@VincentLanglet](https://github.com/VincentLanglet))
11+
- [[#624](https://github.com/sonata-project/EntityAuditBundle/pull/624)] Crashing when an invalid value is passed as OneTo* relation. ([@VincentLanglet](https://github.com/VincentLanglet))
12+
513
## [1.17.1](https://github.com/sonata-project/EntityAuditBundle/compare/1.17.0...1.17.1) - 2024-04-17
614
### Fixed
715
- [[#617](https://github.com/sonata-project/EntityAuditBundle/pull/617)] Fix getting table name when the table schema is an empty string ([@X-Coder264](https://github.com/X-Coder264))

composer.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
"require": {
1212
"php": "^8.0",
1313
"doctrine/collections": "^1.8 || ^2.0",
14-
"doctrine/dbal": "^3.4",
14+
"doctrine/dbal": "^3.6",
1515
"doctrine/event-manager": "^1.2 || ^2.0",
16-
"doctrine/orm": "^2.14",
16+
"doctrine/orm": "^2.14 || ^3.0",
1717
"doctrine/persistence": "^3.0",
1818
"psr/clock": "^1.0",
1919
"symfony/config": "^5.4 || ^6.2 || ^7.0",
@@ -26,7 +26,7 @@
2626
"doctrine/doctrine-bundle": "^2.7",
2727
"doctrine/doctrine-fixtures-bundle": "^3.4",
2828
"friendsofphp/php-cs-fixer": "^3.4",
29-
"gedmo/doctrine-extensions": "^3.7",
29+
"gedmo/doctrine-extensions": "^3.15",
3030
"matthiasnoback/symfony-dependency-injection-test": "^4.2.1 || ^5.0",
3131
"phpstan/extension-installer": "^1.1",
3232
"phpstan/phpstan": "^1.0",

psalm-baseline.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<files psalm-version="4.11.1@e33492398bd4e5e2ab60e331d445979bd83feecd">
2+
<files psalm-version="5.15.0@5c774aca4746caf3d239d9c8cadb9f882ca29352">
33
<!-- NEXT_MAJOR: Remove this file -->
44
<file src="src/Controller/AuditController.php">
55
<UndefinedClass occurrences="1">

rector.php

-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
use Rector\Config\RectorConfig;
2121
use Rector\Php70\Rector\FunctionLike\ExceptionHandlerTypehintRector;
22-
use Rector\PHPUnit\CodeQuality\Rector\Class_\AddSeeTestAnnotationRector;
2322
use Rector\PHPUnit\CodeQuality\Rector\Class_\PreferPHPUnitThisCallRector;
2423
use Rector\PHPUnit\Set\PHPUnitSetList;
2524
use Rector\Set\ValueObject\LevelSetList;
@@ -40,7 +39,6 @@
4039
$rectorConfig->importShortClasses(false);
4140
$rectorConfig->skip([
4241
ExceptionHandlerTypehintRector::class,
43-
AddSeeTestAnnotationRector::class,
4442
PreferPHPUnitThisCallRector::class,
4543
]);
4644
};

src/AuditConfiguration.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace SimpleThings\EntityAudit;
1515

1616
use Doctrine\DBAL\Types\Types;
17-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
17+
use Doctrine\ORM\Mapping\ClassMetadata;
1818
use SimpleThings\EntityAudit\Metadata\MetadataFactory;
1919

2020
class AuditConfiguration
@@ -71,15 +71,15 @@ public static function forEntities(array $classes)
7171
}
7272

7373
/**
74-
* @param ClassMetadataInfo<object> $metadata
74+
* @param ClassMetadata<object> $metadata
7575
*
7676
* @return string
7777
*
7878
* @phpstan-return literal-string
7979
*
8080
* @psalm-suppress MoreSpecificReturnType,LessSpecificReturnStatement https://github.com/vimeo/psalm/issues/10910
8181
*/
82-
public function getTableName(ClassMetadataInfo $metadata)
82+
public function getTableName(ClassMetadata $metadata)
8383
{
8484
/** @var literal-string $tableName */
8585
$tableName = $metadata->getTableName();

src/AuditReader.php

+44-64
Large diffs are not rendered by default.

src/Collection/AuditedCollection.php

+9-8
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515

1616
use Doctrine\Common\Collections\ArrayCollection;
1717
use Doctrine\Common\Collections\Collection;
18-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
18+
use Doctrine\ORM\Mapping\AssociationMapping;
19+
use Doctrine\ORM\Mapping\ClassMetadata;
1920
use SimpleThings\EntityAudit\AuditConfiguration;
2021
use SimpleThings\EntityAudit\AuditReader;
2122
use SimpleThings\EntityAudit\Exception\AuditedCollectionException;
@@ -58,19 +59,19 @@ class AuditedCollection implements Collection
5859
protected $initialized = false;
5960

6061
/**
61-
* @param string $class
62-
* @param array<string, mixed> $associationDefinition
63-
* @param array<string, mixed> $foreignKeys
64-
* @param string|int $revision
62+
* @param string $class
63+
* @param array<string, mixed>|AssociationMapping $associationDefinition
64+
* @param array<string, mixed> $foreignKeys
65+
* @param string|int $revision
6566
*
6667
* @phpstan-param class-string<T> $class
67-
* @phpstan-param ClassMetadataInfo<T> $metadata
68+
* @phpstan-param ClassMetadata<T> $metadata
6869
*/
6970
public function __construct(
7071
protected AuditReader $auditReader,
7172
protected $class,
72-
protected ClassMetadataInfo $metadata,
73-
protected array $associationDefinition,
73+
protected ClassMetadata $metadata,
74+
protected array|AssociationMapping $associationDefinition,
7475
protected array $foreignKeys,
7576
protected $revision
7677
) {

src/DeferredChangedManyToManyEntityRevisionToPersist.php

+8-7
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,24 @@
1414
namespace SimpleThings\EntityAudit;
1515

1616
use Doctrine\ORM\Mapping\ClassMetadata;
17+
use Doctrine\ORM\Mapping\ManyToManyOwningSideMapping;
1718

1819
/**
1920
* @internal
2021
*/
2122
final class DeferredChangedManyToManyEntityRevisionToPersist
2223
{
2324
/**
24-
* @param array<string, mixed> $assoc
25-
* @param array<string, mixed> $entityData
26-
* @param ClassMetadata<object> $class
27-
* @param ClassMetadata<object> $targetClass
25+
* @param array<string, mixed>|ManyToManyOwningSideMapping $assoc
26+
* @param array<string, mixed> $entityData
27+
* @param ClassMetadata<object> $class
28+
* @param ClassMetadata<object> $targetClass
2829
*/
2930
public function __construct(
3031
private object $entity,
3132
private string $revType,
3233
private array $entityData,
33-
private array $assoc,
34+
private array|ManyToManyOwningSideMapping $assoc,
3435
private ClassMetadata $class,
3536
private ClassMetadata $targetClass
3637
) {
@@ -55,9 +56,9 @@ public function getEntityData(): array
5556
}
5657

5758
/**
58-
* @return array<string, mixed>
59+
* @return array<string, mixed>|ManyToManyOwningSideMapping
5960
*/
60-
public function getAssoc(): array
61+
public function getAssoc(): array|ManyToManyOwningSideMapping
6162
{
6263
return $this->assoc;
6364
}

src/EventListener/CreateSchemaListener.php

+13-9
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,22 @@
1919
use Doctrine\DBAL\Schema\Table;
2020
use Doctrine\DBAL\Types\Type;
2121
use Doctrine\DBAL\Types\Types;
22-
use Doctrine\ORM\Mapping\ClassMetadataInfo;
22+
use Doctrine\ORM\Mapping\ClassMetadata;
2323
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
2424
use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs;
2525
use Doctrine\ORM\Tools\ToolEvents;
2626
use SimpleThings\EntityAudit\AuditConfiguration;
2727
use SimpleThings\EntityAudit\AuditManager;
2828
use SimpleThings\EntityAudit\Metadata\MetadataFactory;
29+
use SimpleThings\EntityAudit\Utils\ORMCompatibilityTrait;
2930

3031
/**
3132
* NEXT_MAJOR: do not implement EventSubscriber interface anymore.
3233
*/
3334
class CreateSchemaListener implements EventSubscriber
3435
{
36+
use ORMCompatibilityTrait;
37+
3538
private AuditConfiguration $config;
3639

3740
private MetadataFactory $metadataFactory;
@@ -61,6 +64,9 @@ public function getSubscribedEvents()
6164
];
6265
}
6366

67+
/**
68+
* @psalm-suppress TypeDoesNotContainType, NoValue
69+
*/
6470
public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs): void
6571
{
6672
$cm = $eventArgs->getClassMetadata();
@@ -95,7 +101,7 @@ public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
95101
}
96102
$revisionTable->addColumn($this->config->getRevisionFieldName(), $this->config->getRevisionIdFieldType());
97103
$revisionTable->addColumn($this->config->getRevisionTypeFieldName(), Types::STRING, ['length' => 4]);
98-
if (!\in_array($cm->inheritanceType, [ClassMetadataInfo::INHERITANCE_TYPE_NONE, ClassMetadataInfo::INHERITANCE_TYPE_JOINED, ClassMetadataInfo::INHERITANCE_TYPE_SINGLE_TABLE], true)) {
104+
if (!\in_array($cm->inheritanceType, [ClassMetadata::INHERITANCE_TYPE_NONE, ClassMetadata::INHERITANCE_TYPE_JOINED, ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE], true)) {
99105
throw new \Exception(sprintf('Inheritance type "%s" is not yet supported', $cm->inheritanceType));
100106
}
101107

@@ -108,13 +114,11 @@ public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
108114
$revisionTable->addIndex([$this->config->getRevisionFieldName()], $revIndexName);
109115

110116
foreach ($cm->associationMappings as $associationMapping) {
111-
if ($associationMapping['isOwningSide'] && isset($associationMapping['joinTable'])) {
112-
if (isset($associationMapping['joinTable']['name'])) {
113-
if ($schema->hasTable($associationMapping['joinTable']['name'])) {
114-
$this->createRevisionJoinTableForJoinTable($schema, $associationMapping['joinTable']['name']);
115-
} else {
116-
$this->defferedJoinTablesToCreate[] = $associationMapping['joinTable']['name'];
117-
}
117+
if (self::isManyToManyOwningSideMapping($associationMapping)) {
118+
if ($schema->hasTable(self::getMappingJoinTableNameValue($associationMapping))) {
119+
$this->createRevisionJoinTableForJoinTable($schema, self::getMappingJoinTableNameValue($associationMapping));
120+
} else {
121+
$this->defferedJoinTablesToCreate[] = self::getMappingJoinTableNameValue($associationMapping);
118122
}
119123
}
120124
}

0 commit comments

Comments
 (0)