diff --git a/.gitignore b/.gitignore index 4c05685..e575e6c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ /.phpunit.result.cache /composer.lock /bin +.idea +.env.test +phpunit.xml +tests/Fixtures/app/var/ \ No newline at end of file diff --git a/composer.json b/composer.json index 815fb7f..eb8553f 100644 --- a/composer.json +++ b/composer.json @@ -11,28 +11,28 @@ ], "require": { "php": ">=8.1", - "doctrine/annotations": "^1.14", + "doctrine/annotations": "2.*", "doctrine/doctrine-bundle": "^2.8", - "doctrine/orm": "^2.14", + "doctrine/orm": "^3.3.1", "elasticsearch/elasticsearch": "^7.1", - "symfony/dotenv": "6.4.*", - "symfony/expression-language": "6.4.*", - "symfony/framework-bundle": "^6.4", - "symfony/messenger": "6.4.*", - "symfony/property-info": "6.4.*", - "symfony/runtime": "6.4.*", - "symfony/serializer": "6.4.*", - "symfony/validator": "6.4.*", - "symfony/yaml": "6.4.*", + "symfony/dotenv": "7.2.*", + "symfony/expression-language": "7.2.*", + "symfony/framework-bundle": "7.2.*", + "symfony/messenger": "7.2.*", + "symfony/property-info": "7.2.*", + "symfony/runtime": "7.2.*", + "symfony/serializer": "7.2.*", + "symfony/validator": "7.2.*", + "symfony/yaml": "7.2.*", "ext-simplexml": "*", - "symfony/security-bundle": "^6.4", - "symfony/finder": "^6.4" + "symfony/security-bundle": "7.2.*", + "symfony/finder": "7.2.*" }, "require-dev": { - "symfony/browser-kit": "6.4.*", - "symfony/css-selector": "6.4.*", - "symfony/console": "6.4.*", - "symfony/phpunit-bridge": "^6.4", + "symfony/browser-kit": "7.2.*", + "symfony/css-selector": "7.2.*", + "symfony/console": "7.2.*", + "symfony/phpunit-bridge": "7.2.*", "symfony/test-pack": "^1.1" }, "prefer-stable": true, @@ -48,7 +48,7 @@ "dev-master": "1.0-dev" }, "symfony": { - "require": "6.4.*" + "require": "7.2.*" } }, "conflict": { diff --git a/src/Metadata/LoggableContext/Factory/AnnotationLoggableContextCollectionFactory.php b/src/Metadata/LoggableContext/Factory/AnnotationLoggableContextCollectionFactory.php index 39e90b7..cc23f1e 100644 --- a/src/Metadata/LoggableContext/Factory/AnnotationLoggableContextCollectionFactory.php +++ b/src/Metadata/LoggableContext/Factory/AnnotationLoggableContextCollectionFactory.php @@ -2,7 +2,6 @@ namespace Locastic\Loggastic\Metadata\LoggableContext\Factory; -use Doctrine\Common\Annotations\Reader; use Locastic\Loggastic\Annotation\Loggable; use Locastic\Loggastic\Metadata\LoggableContext\LoggableContextCollection; use Locastic\Loggastic\Util\RecursiveClassIterator; @@ -12,9 +11,10 @@ final class AnnotationLoggableContextCollectionFactory implements LoggableContex /** * @param string[] $loggablePaths */ - public function __construct(private readonly LoggableContextCollectionFactoryInterface $decorated, private readonly Reader $reader, private readonly array $loggablePaths) - { - } + public function __construct( + private readonly LoggableContextCollectionFactoryInterface $decorated, + private readonly array $loggablePaths + ) {} public function create(): LoggableContextCollection { @@ -34,10 +34,6 @@ public function create(): LoggableContextCollection if ($loggable = $this->getLoggableAttribute($reflectionClass)) { $classes[$className] = ['groups' => $loggable->getGroups()]; } - - if (null !== $this->reader && $loggable = $this->reader->getClassAnnotation($reflectionClass, Loggable::class)) { - $classes[$className] = $loggable->getGroups(); - } } return new LoggableContextCollection($classes); @@ -53,4 +49,4 @@ private function getLoggableAttribute(\ReflectionClass $reflectionClass): ?Logga return null; } -} +} \ No newline at end of file diff --git a/src/Resources/config/loggable_context.yaml b/src/Resources/config/loggable_context.yaml index 6a05e01..3c20420 100644 --- a/src/Resources/config/loggable_context.yaml +++ b/src/Resources/config/loggable_context.yaml @@ -31,7 +31,6 @@ services: decorates: 'locastic_activity_log.metadata.loggable.context_collection_factory' arguments: - '@.inner' - - '@annotations.reader' - '%locastic_activity_log.dir.loggable_classes%' Locastic\Loggastic\Metadata\LoggableContext\Factory\LoggableContextFactoryInterface: diff --git a/src/Serializer/ActivityLogCollectionNormalizer.php b/src/Serializer/ActivityLogCollectionNormalizer.php index 2c83b39..af05c6f 100644 --- a/src/Serializer/ActivityLogCollectionNormalizer.php +++ b/src/Serializer/ActivityLogCollectionNormalizer.php @@ -48,4 +48,9 @@ public function supportsNormalization($data, string $format = null, array $conte { return $data instanceof Collection && self::FORMAT === $format; } + + public function getSupportedTypes(?string $format): array + { + return []; + } } diff --git a/src/Util/ArrayDiff.php b/src/Util/ArrayDiff.php index a9ff129..b66f57c 100644 --- a/src/Util/ArrayDiff.php +++ b/src/Util/ArrayDiff.php @@ -11,9 +11,17 @@ public static function arrayDiffRecursive($array1, $array2): array foreach ($array1 as $key => $value) { if (is_array($array2) && array_key_exists($key, $array2)) { if (is_array($value)) { - $recursiveDiff = self::arrayDiffRecursive($value, $array2[$key]); - if (count($recursiveDiff)) { - $return[$key] = $recursiveDiff; + if (isset($value['id'])) { + $id = $value['id']; + $recursiveDiff = self::arrayDiffRecursive($value, $array2[$key] ?? []); + if (count($recursiveDiff)) { + $return[$id] = $recursiveDiff; + } + } else { + $recursiveDiff = self::arrayDiffRecursive($value, $array2[$key]); + if (count($recursiveDiff)) { + $return[$key] = $recursiveDiff; + } } } else { if ($value != $array2[$key]) { @@ -27,4 +35,4 @@ public static function arrayDiffRecursive($array1, $array2): array return $return; } -} +} \ No newline at end of file diff --git a/tests/Fixtures/app/Model/DummyBlogPost.php b/tests/Fixtures/app/Model/DummyBlogPost.php index b2accac..4f60e9d 100644 --- a/tests/Fixtures/app/Model/DummyBlogPost.php +++ b/tests/Fixtures/app/Model/DummyBlogPost.php @@ -7,29 +7,27 @@ use Locastic\Loggastic\Annotation\Loggable; use Symfony\Component\Serializer\Annotation\Groups; -/** - * @Loggable(groups={"dummy_blog_post_log"}) - */ +#[Loggable(groups: ["dummy_blog_post_log"])] class DummyBlogPost { private int $id; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private ?string $title; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private array $tags = []; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private int $position = 0; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private ?\DateTime $publishAt; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private bool $enabled; - /** @Groups({"dummy_blog_post_log"}) */ + #[Groups(["dummy_blog_post_log"])] private Collection $photos; public function __construct() diff --git a/tests/FunctionalTests/ActivityLogTest.php b/tests/FunctionalTests/ActivityLogTest.php index 8f1e6f1..14b6ed4 100644 --- a/tests/FunctionalTests/ActivityLogTest.php +++ b/tests/FunctionalTests/ActivityLogTest.php @@ -116,10 +116,9 @@ public function testLogEdit(): void $this->activityLogger->logUpdatedItem($this->blogPost); $activityLogs = $this->activityLogProvider->getActivityLogsByClassAndId(DummyBlogPost::class, 15); - self::assertCount(4, $activityLogs); - $editedLog = $activityLogs[3]; + $editedLog = end($activityLogs); self::assertInstanceOf(ActivityLogInterface::class, $editedLog); self::assertEquals(ActivityLogAction::EDITED, $editedLog->getAction()); @@ -193,7 +192,7 @@ public function testProviderByClassAndIndexLimitAndOffset(): void { $activityLogs = $this->activityLogProvider->getActivityLogsByIndexAndId('dummy_blog_post_activity_log',15, [],20, 3); - $editedLog = $activityLogs[0]; + $editedLog = reset($activityLogs); self::assertCount(1, $activityLogs); self::assertInstanceOf(ActivityLogInterface::class, $editedLog);