From 311802be6b7f05a0a9f744615c2172f2ea959b98 Mon Sep 17 00:00:00 2001 From: lubiana Date: Thu, 15 Aug 2024 18:31:10 +0200 Subject: [PATCH 01/66] #42: fix bug --- src/Controller/MenuItemController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php index c7d9aaf..db4eb0e 100644 --- a/src/Controller/MenuItemController.php +++ b/src/Controller/MenuItemController.php @@ -48,6 +48,8 @@ final class MenuItemController extends AbstractController $entityManager->flush(); } - return $this->redirectToRoute('app_menu_item_index', [], Response::HTTP_SEE_OTHER); + return $this->redirectToRoute('app_food_vendor_show', [ + 'id' => $menuItem->getFoodVendor()->getId() + ], Response::HTTP_SEE_OTHER); } } From a4f62868fd21fecbf88f37c8f1d6c477c14b36e1 Mon Sep 17 00:00:00 2001 From: lubiana Date: Thu, 15 Aug 2024 18:33:33 +0200 Subject: [PATCH 02/66] #42 linting --- src/Controller/MenuItemController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php index db4eb0e..ce85e9c 100644 --- a/src/Controller/MenuItemController.php +++ b/src/Controller/MenuItemController.php @@ -49,7 +49,8 @@ final class MenuItemController extends AbstractController } return $this->redirectToRoute('app_food_vendor_show', [ - 'id' => $menuItem->getFoodVendor()->getId() + 'id' => $menuItem->getFoodVendor() + ->getId(), ], Response::HTTP_SEE_OTHER); } } From 6f23c3c1b765962931c48013261c09c7b80fce85 Mon Sep 17 00:00:00 2001 From: lubiana Date: Fri, 16 Aug 2024 11:14:41 +0200 Subject: [PATCH 03/66] improve test coverage --- src/Entity/FoodOrder.php | 12 ++- tests/Controller/FoodOrderControllerTest.php | 34 ++++++++ tests/Controller/OrderItemControllerTest.php | 88 ++++++++++++++++++++ 3 files changed, 132 insertions(+), 2 deletions(-) diff --git a/src/Entity/FoodOrder.php b/src/Entity/FoodOrder.php index c09fe16..89ccccf 100644 --- a/src/Entity/FoodOrder.php +++ b/src/Entity/FoodOrder.php @@ -58,7 +58,7 @@ class FoodOrder return $this->closedAt; } - public function setClosedAt(DateTimeImmutable|null $closedAt): static + public function setClosedAt(DateTimeImmutable|null $closedAt = null): static { $this->closedAt = $closedAt; @@ -67,7 +67,15 @@ class FoodOrder public function isClosed(): bool { - return $this->closedAt instanceof DateTimeImmutable && $this->closedAt->getTimestamp() <= (new DateTimeImmutable)->getTimestamp(); + if ($this->closedAt === null) { + return false; + } + + if ($this->closedAt < new DateTimeImmutable) { + return true; + } + + return false; } public function close(): static diff --git a/tests/Controller/FoodOrderControllerTest.php b/tests/Controller/FoodOrderControllerTest.php index e262ccf..00b225e 100644 --- a/tests/Controller/FoodOrderControllerTest.php +++ b/tests/Controller/FoodOrderControllerTest.php @@ -182,6 +182,40 @@ final class FoodOrderControllerTest extends DbWebTest self::assertSame(1, $this->repository->count([])); } + public function testOpen(): void + { + $order = new FoodOrder; + $order->setFoodVendor($this->vendor); + $order->close(); + + $this->assertTrue($order->isClosed()); + $this->manager->persist($order); + $this->manager->flush(); + + + $this->client->request('GET', sprintf('%s%s/open', $this->path, $order->getId())); + self::assertResponseRedirects("{$this->path}{$order->getId()}"); + $openOrder = $this->repository->find($order->getId()); + $this->assertFalse($openOrder->isClosed()); + } + + public function testClose(): void + { + $order = new FoodOrder; + $order->setClosedAt(); + $order->setFoodVendor($this->vendor); + + $this->assertFalse($order->isClosed()); + $this->manager->persist($order); + $this->manager->flush(); + + + $this->client->request('GET', sprintf('%s%s/close', $this->path, $order->getId())); + self::assertResponseRedirects("{$this->path}{$order->getId()}"); + $openOrder = $this->repository->find($order->getId()); + $this->assertTrue($openOrder->isClosed()); + } + private function generatePaginatedOrders(): void { foreach (range(1, 35) as $i) { diff --git a/tests/Controller/OrderItemControllerTest.php b/tests/Controller/OrderItemControllerTest.php index 0cb58b3..aff847d 100644 --- a/tests/Controller/OrderItemControllerTest.php +++ b/tests/Controller/OrderItemControllerTest.php @@ -63,6 +63,23 @@ final class OrderItemControllerTest extends DbWebTest self::assertSame(1, $this->menuItemRepository->count([])); } + public function testNewOrderClosed(): void + { + + $this->order->setClosedAt(new \DateTimeImmutable('-1 Hour')); + $this->manager->persist($this->order); + $this->manager->flush(); + + $this->client->request( + 'GET', + sprintf('%snew/%s', $this->path, $this->order->getId()) + ); + + self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); + + self::assertSame(0, $this->repository->count([])); + } + public function testNewCreateMenuItem(): void { $this->client->request( @@ -101,6 +118,26 @@ final class OrderItemControllerTest extends DbWebTest self::assertSame(0, $this->repository->count([])); } + public function testOrderClosed(): void + { + $fixture = new OrderItem; + $fixture->setName('Testing'); + $fixture->setExtras('Value'); + $fixture->setMenuItem($this->menuItem); + $fixture->setFoodOrder($this->order); + + $this->order->close(); + + $this->manager->persist($this->order); + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%sdelete/%s', $this->path, $fixture->getId())); + + self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); + self::assertSame(1, $this->repository->count([])); + } + public function testEdit(): void { $orderItem = new OrderItem; @@ -124,6 +161,35 @@ final class OrderItemControllerTest extends DbWebTest 'My Extra', $extrasElem->attr('value') ); + + $this->client->submitForm('Update', [ + 'order_item[name]' => 'Testing-1', + 'order_item[extras]' => 'Testing-1', + ]); + + self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); + + self::assertSame(1, $this->repository->count([])); + self::assertSame(2, $this->menuItemRepository->count([])); + + + } + + public function testEditOrderClosed(): void + { + $orderItem = new OrderItem; + $orderItem->setName('Testing'); + $orderItem->setExtras('My Extra'); + $orderItem->setFoodOrder($this->order); + $orderItem->setMenuItem($this->menuItem); + $this->order->close(); + + $this->manager->persist($orderItem); + $this->manager->persist($this->order); + $this->manager->flush(); + + $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $orderItem->getId())); + self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); } public function testCopy(): void @@ -150,6 +216,28 @@ final class OrderItemControllerTest extends DbWebTest } } + public function testCopyOrderClosed(): void + { + $orderItem = new OrderItem; + $orderItem->setName('My Title'); + $orderItem->setExtras('My Title'); + $orderItem->setFoodOrder($this->order); + $orderItem->setMenuItem($this->menuItem); + + $this->order->close(); + $this->manager->persist($this->order); + $this->manager->persist($orderItem); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s/copy', $this->path, $orderItem->getId())); + self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); + + $result = $this->repository->findBy([ + 'foodOrder' => $this->order->getId(), + ]); + $this->assertCount(1, $result); + } + #[Override] public function getEntityClass(): string { From 2a28465626e414cc3cd8a285d076b3d92f2ea829 Mon Sep 17 00:00:00 2001 From: lubiana Date: Fri, 16 Aug 2024 11:15:23 +0200 Subject: [PATCH 04/66] lint --- src/Entity/FoodOrder.php | 9 ++------- tests/Controller/FoodOrderControllerTest.php | 2 -- tests/Controller/OrderItemControllerTest.php | 7 ++++--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Entity/FoodOrder.php b/src/Entity/FoodOrder.php index 89ccccf..4fe29f5 100644 --- a/src/Entity/FoodOrder.php +++ b/src/Entity/FoodOrder.php @@ -67,15 +67,10 @@ class FoodOrder public function isClosed(): bool { - if ($this->closedAt === null) { + if (! $this->closedAt instanceof DateTimeImmutable) { return false; } - - if ($this->closedAt < new DateTimeImmutable) { - return true; - } - - return false; + return $this->closedAt < new DateTimeImmutable; } public function close(): static diff --git a/tests/Controller/FoodOrderControllerTest.php b/tests/Controller/FoodOrderControllerTest.php index 00b225e..a7c222e 100644 --- a/tests/Controller/FoodOrderControllerTest.php +++ b/tests/Controller/FoodOrderControllerTest.php @@ -192,7 +192,6 @@ final class FoodOrderControllerTest extends DbWebTest $this->manager->persist($order); $this->manager->flush(); - $this->client->request('GET', sprintf('%s%s/open', $this->path, $order->getId())); self::assertResponseRedirects("{$this->path}{$order->getId()}"); $openOrder = $this->repository->find($order->getId()); @@ -209,7 +208,6 @@ final class FoodOrderControllerTest extends DbWebTest $this->manager->persist($order); $this->manager->flush(); - $this->client->request('GET', sprintf('%s%s/close', $this->path, $order->getId())); self::assertResponseRedirects("{$this->path}{$order->getId()}"); $openOrder = $this->repository->find($order->getId()); diff --git a/tests/Controller/OrderItemControllerTest.php b/tests/Controller/OrderItemControllerTest.php index aff847d..1c65fb8 100644 --- a/tests/Controller/OrderItemControllerTest.php +++ b/tests/Controller/OrderItemControllerTest.php @@ -8,6 +8,7 @@ use App\Entity\MenuItem; use App\Entity\OrderItem; use App\Repository\MenuItemRepository; use App\Tests\DbWebTest; +use DateTimeImmutable; use Override; use function sprintf; @@ -66,7 +67,7 @@ final class OrderItemControllerTest extends DbWebTest public function testNewOrderClosed(): void { - $this->order->setClosedAt(new \DateTimeImmutable('-1 Hour')); + $this->order->setClosedAt(new DateTimeImmutable('-1 Hour')); $this->manager->persist($this->order); $this->manager->flush(); @@ -172,7 +173,6 @@ final class OrderItemControllerTest extends DbWebTest self::assertSame(1, $this->repository->count([])); self::assertSame(2, $this->menuItemRepository->count([])); - } public function testEditOrderClosed(): void @@ -182,13 +182,14 @@ final class OrderItemControllerTest extends DbWebTest $orderItem->setExtras('My Extra'); $orderItem->setFoodOrder($this->order); $orderItem->setMenuItem($this->menuItem); + $this->order->close(); $this->manager->persist($orderItem); $this->manager->persist($this->order); $this->manager->flush(); - $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $orderItem->getId())); + $this->client->request('GET', sprintf('%s%s/edit', $this->path, $orderItem->getId())); self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); } From 34171d6c2bc76e928501d47b7b2abeba2a236663 Mon Sep 17 00:00:00 2001 From: lubiana Date: Fri, 16 Aug 2024 13:44:16 +0200 Subject: [PATCH 05/66] 100% test coverage --- phpunit.xml.dist | 4 + src/Controller/MenuItemController.php | 4 +- src/Entity/FoodVendor.php | 15 ++-- src/Entity/MenuItem.php | 16 ++-- tests/Controller/MenuItemControllerTest.php | 98 +++++++++++++++++++++ tests/Entity/FoodOrderTest.php | 23 +++++ tests/Entity/FoodVendorTest.php | 43 +++++++++ tests/Entity/MenuItemTest.php | 27 ++++++ 8 files changed, 214 insertions(+), 16 deletions(-) create mode 100644 tests/Controller/MenuItemControllerTest.php create mode 100644 tests/Entity/FoodOrderTest.php create mode 100644 tests/Entity/FoodVendorTest.php create mode 100644 tests/Entity/MenuItemTest.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 3417900..a57e50a 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -28,6 +28,10 @@ src + + src/Command + src/Service/FakeData.php + diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php index ce85e9c..dc3f63c 100644 --- a/src/Controller/MenuItemController.php +++ b/src/Controller/MenuItemController.php @@ -30,7 +30,9 @@ final class MenuItemController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $entityManager->flush(); - return $this->redirectToRoute('app_menu_item_index', [], Response::HTTP_SEE_OTHER); + return $this->redirectToRoute('app_menu_item_show', [ + 'id' => $menuItem->getId(), + ], Response::HTTP_SEE_OTHER); } return $this->render('menu_item/edit.html.twig', [ diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index c867c9c..e05d777 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -13,12 +13,6 @@ use Symfony\Component\Uid\Ulid; #[ORM\Entity(repositoryClass: FoodVendorRepository::class)] class FoodVendor { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: 'CUSTOM')] - #[ORM\Column(type: UlidType::NAME, unique: true)] - #[ORM\CustomIdGenerator(class: UlidGenerator::class)] - private Ulid|null $id = null; - #[ORM\Column(length: 50)] private string|null $name = null; @@ -34,8 +28,13 @@ class FoodVendor #[ORM\OneToMany(targetEntity: MenuItem::class, mappedBy: 'foodVendor', orphanRemoval: true)] private Collection $menuItems; - public function __construct() - { + public function __construct( + #[ORM\Id] + #[ORM\GeneratedValue(strategy: 'CUSTOM')] + #[ORM\Column(type: UlidType::NAME, unique: true)] + #[ORM\CustomIdGenerator(class: UlidGenerator::class)] + private Ulid|null $id = new Ulid + ) { $this->foodOrders = new ArrayCollection; $this->menuItems = new ArrayCollection; } diff --git a/src/Entity/MenuItem.php b/src/Entity/MenuItem.php index 6e54dc3..259b175 100644 --- a/src/Entity/MenuItem.php +++ b/src/Entity/MenuItem.php @@ -12,12 +12,6 @@ use Symfony\Component\Uid\Ulid; #[ORM\Entity(repositoryClass: MenuItemRepository::class)] class MenuItem { - #[ORM\Id] - #[ORM\GeneratedValue(strategy: 'CUSTOM')] - #[ORM\Column(type: UlidType::NAME, unique: true)] - #[ORM\CustomIdGenerator(class: UlidGenerator::class)] - private Ulid|null $id = null; - #[ORM\Column(length: 255)] private string|null $name = null; @@ -28,6 +22,14 @@ class MenuItem #[ORM\Column(nullable: true)] private DateTimeImmutable|null $deletedAt = null; + public function __construct( + #[ORM\Id] + #[ORM\GeneratedValue(strategy: 'CUSTOM')] + #[ORM\Column(type: UlidType::NAME, unique: true)] + #[ORM\CustomIdGenerator(class: UlidGenerator::class)] + private Ulid|null $id = new Ulid + ) {} + public function getId(): Ulid|null { return $this->id; @@ -64,7 +66,7 @@ class MenuItem public function delete(): static { - $this->setDeletedAt(); + $this->setDeletedAt(new DateTimeImmutable); return $this; } diff --git a/tests/Controller/MenuItemControllerTest.php b/tests/Controller/MenuItemControllerTest.php new file mode 100644 index 0000000..9dc0058 --- /dev/null +++ b/tests/Controller/MenuItemControllerTest.php @@ -0,0 +1,98 @@ +vendor = new FoodVendor; + $this->vendor->setName('Food Vendor'); + + $this->manager->persist($this->vendor); + $this->manager->flush(); + } + + #[Override] + public function getEntityClass(): string + { + return MenuItem::class; + } + + public function testShow(): void + { + $menuItem = new MenuItem; + $menuItem->setName('Testing 1 2'); + + $this->vendor->addMenuItem($menuItem); + $this->manager->persist($this->vendor); + $this->manager->persist($menuItem); + $this->manager->flush(); + + $crawler = $this->client->request('GET', "{$this->path}{$menuItem->getId()}"); + $idValue = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' + )->text(); + $nameValue = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2)' + )->text(); + self::assertResponseStatusCodeSame(200); + $this->assertEquals($idValue, $menuItem->getId()); + $this->assertEquals($nameValue, $menuItem->getName()); + } + + public function testEdit(): void + { + $menuItem = new MenuItem; + $menuItem->setName('Testing 1 2'); + + $this->vendor->addMenuItem($menuItem); + $this->manager->persist($this->vendor); + $this->manager->persist($menuItem); + $this->manager->flush(); + + $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $menuItem->getId())); + $nameElem = $crawler->filter('#menu_item_name'); + $this->assertEquals( + 'Testing 1 2', + $nameElem->attr('value') + ); + + $this->client->submitForm('Update', [ + 'menu_item[name]' => 'Testing-1', + ]); + + self::assertResponseRedirects(sprintf('/menu/item/%s', $menuItem->getId())); + } + + public function testDelete(): void + { + $menuItem = new MenuItem; + $menuItem->setName('Testing 1 2'); + + $this->vendor->addMenuItem($menuItem); + $this->manager->persist($this->vendor); + $this->manager->persist($menuItem); + $this->manager->flush(); + $this->assertFalse($menuItem->isDeleted()); + + $this->client->request('GET', "{$this->path}{$menuItem->getId()}"); + $this->client->submitForm('Delete', []); + + $menuItem = $this->repository->find($menuItem->getId()); + + $this->assertTrue($menuItem->isDeleted()); + } +} diff --git a/tests/Entity/FoodOrderTest.php b/tests/Entity/FoodOrderTest.php new file mode 100644 index 0000000..08fe6e6 --- /dev/null +++ b/tests/Entity/FoodOrderTest.php @@ -0,0 +1,23 @@ +assertCount(0, $order->getOrderItems()); + $order->addOrderItem($orderItem); + $order->addOrderItem($orderItem); + $this->assertCount(1, $order->getOrderItems()); + $order->removeOrderItem($orderItem); + $this->assertCount(0, $order->getOrderItems()); + + } +} diff --git a/tests/Entity/FoodVendorTest.php b/tests/Entity/FoodVendorTest.php new file mode 100644 index 0000000..8df1836 --- /dev/null +++ b/tests/Entity/FoodVendorTest.php @@ -0,0 +1,43 @@ +setName('Test'); + $this->assertEquals('Test', $vendor->getName()); + $this->assertInstanceOf(Ulid::class, $vendor->getId()); + + $this->assertCount(0, $vendor->getFoodOrders()); + $order1 = new FoodOrder; + $vendor->addFoodOrder($order1); + $vendor->addFoodOrder($order1); + $this->assertCount(1, $vendor->getFoodOrders()); + $vendor->removeFoodOrder($order1); + $this->assertCount(0, $vendor->getFoodOrders()); + + $menuItem1 = new MenuItem; + $menuItem2 = new MenuItem; + $this->assertCount(0, $vendor->getMenuItems()); + $vendor->addMenuItem($menuItem1); + $vendor->addMenuItem($menuItem1); + $this->assertCount(1, $vendor->getMenuItems()); + $vendor->removeMenuItem($menuItem1); + $this->assertCount(0, $vendor->getMenuItems()); + $vendor->addMenuItem($menuItem1); + $menuItem2->delete(); + $vendor->addMenuItem($menuItem2); + $this->assertCount(1, $vendor->getMenuItems()); + $this->assertCount(2, $vendor->getMenuItems(true)); + + } +} diff --git a/tests/Entity/MenuItemTest.php b/tests/Entity/MenuItemTest.php new file mode 100644 index 0000000..4a0fd91 --- /dev/null +++ b/tests/Entity/MenuItemTest.php @@ -0,0 +1,27 @@ +setName('Test'); + $this->assertEquals('Test', $item->getName()); + + $vendor = new FoodVendor; + $vendor->setName('Test'); + + $item->setFoodVendor($vendor); + $this->assertEquals($vendor, $item->getFoodVendor()); + + $this->assertFalse($item->isDeleted()); + $item->delete(); + $this->assertTrue($item->isDeleted()); + } +} From 56206acd8abd8b85604f574b8799beda4c65d6be Mon Sep 17 00:00:00 2001 From: lubiana Date: Fri, 16 Aug 2024 21:52:53 +0200 Subject: [PATCH 06/66] #37 add external link to foodvendor --- migrations/Version20240816193410.php | 35 +++++++++++++++++++ src/Entity/FoodVendor.php | 15 ++++++++ src/Form/FoodVendorType.php | 1 + templates/food_vendor/show.html.twig | 4 +++ templates/order_item/new.html.twig | 8 +++++ tests/Controller/FoodVendorControllerTest.php | 20 ++++++++--- 6 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 migrations/Version20240816193410.php diff --git a/migrations/Version20240816193410.php b/migrations/Version20240816193410.php new file mode 100644 index 0000000..dbcb6e8 --- /dev/null +++ b/migrations/Version20240816193410.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE food_vendor ADD COLUMN menu_link VARCHAR(255) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TEMPORARY TABLE __temp__food_vendor AS SELECT name, id FROM food_vendor'); + $this->addSql('DROP TABLE food_vendor'); + $this->addSql('CREATE TABLE food_vendor (name VARCHAR(50) NOT NULL, id BLOB NOT NULL, PRIMARY KEY(id))'); + $this->addSql('INSERT INTO food_vendor (name, id) SELECT name, id FROM __temp__food_vendor'); + $this->addSql('DROP TABLE __temp__food_vendor'); + } +} diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index e05d777..e4e430a 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -28,6 +28,9 @@ class FoodVendor #[ORM\OneToMany(targetEntity: MenuItem::class, mappedBy: 'foodVendor', orphanRemoval: true)] private Collection $menuItems; + #[ORM\Column(length: 255, nullable: true)] + private string|null $menuLink = null; + public function __construct( #[ORM\Id] #[ORM\GeneratedValue(strategy: 'CUSTOM')] @@ -116,4 +119,16 @@ class FoodVendor return $this; } + + public function getMenuLink(): string|null + { + return $this->menuLink; + } + + public function setMenuLink(string|null $menuLink): static + { + $this->menuLink = $menuLink; + + return $this; + } } diff --git a/src/Form/FoodVendorType.php b/src/Form/FoodVendorType.php index fcbdce4..9c155f6 100644 --- a/src/Form/FoodVendorType.php +++ b/src/Form/FoodVendorType.php @@ -15,6 +15,7 @@ final class FoodVendorType extends AbstractType { $builder ->add('name') + ->add('menuLink') ; } diff --git a/templates/food_vendor/show.html.twig b/templates/food_vendor/show.html.twig index a063d4c..c4f76b4 100644 --- a/templates/food_vendor/show.html.twig +++ b/templates/food_vendor/show.html.twig @@ -11,6 +11,10 @@ Name {{ food_vendor.name }} + + Menu + {{ food_vendor.menuLink }} + diff --git a/templates/order_item/new.html.twig b/templates/order_item/new.html.twig index 53aff8d..0bcddd5 100644 --- a/templates/order_item/new.html.twig +++ b/templates/order_item/new.html.twig @@ -7,6 +7,14 @@ {{ include('order_item/_form.html.twig') }} +
+ + {% if food_order.foodVendor.menuLink != '' %} + + External link to Menu + + {% endif %} +
click a button to select a given menuitem
diff --git a/tests/Controller/FoodVendorControllerTest.php b/tests/Controller/FoodVendorControllerTest.php index 9f75673..6c4c52b 100644 --- a/tests/Controller/FoodVendorControllerTest.php +++ b/tests/Controller/FoodVendorControllerTest.php @@ -38,6 +38,7 @@ final class FoodVendorControllerTest extends DbWebTest { $fixture = new FoodVendor; $fixture->setName('My Title'); + $fixture->setMenuLink('https://example.com/'); $this->manager->persist($fixture); $this->manager->flush(); @@ -45,9 +46,17 @@ final class FoodVendorControllerTest extends DbWebTest $crawler = $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); $this->assertResponseIsSuccessful(); + $nameNode = $crawler->filter('td') ->last(); - $this->assertSame('My Title', $nameNode->text()); + $nameNode = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' + )->text(); + $menuLinkNode = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > a:nth-child(1)' + )->text(); + $this->assertSame('My Title', $nameNode); + $this->assertSame('https://example.com/', $menuLinkNode); } public function testShowMenuItems(): void @@ -91,9 +100,10 @@ final class FoodVendorControllerTest extends DbWebTest $crawler = $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); $this->assertResponseIsSuccessful(); - $nameNode = $crawler->filter('td') - ->last(); - $this->assertSame('My Title', $nameNode->text()); + $nameNode = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' + )->text(); + $this->assertSame('My Title', $nameNode); $itemNodes = $crawler->filter('li'); @@ -112,6 +122,7 @@ final class FoodVendorControllerTest extends DbWebTest $this->client->submitForm('Update', [ 'food_vendor[name]' => 'Something New', + 'food_vendor[menuLink]' => 'https://example.com/', ]); self::assertResponseRedirects('/food/vendor/'); @@ -119,6 +130,7 @@ final class FoodVendorControllerTest extends DbWebTest $fixture = $this->repository->findAll(); self::assertSame('Something New', $fixture[0]->getName()); + self::assertSame('https://example.com/', $fixture[0]->getMenuLink()); } #[Override] From 3f3ede85486650b23072e2090518689ad8985d5a Mon Sep 17 00:00:00 2001 From: lubiana Date: Fri, 16 Aug 2024 21:57:49 +0200 Subject: [PATCH 07/66] fix issue link --- templates/base.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base.html.twig b/templates/base.html.twig index d783e77..9bac562 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -27,7 +27,7 @@ Orders / Vendors / Create Issue From b1e82037c7939a769a2d3cb98b65a3e2ed26c645 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sun, 18 Aug 2024 09:19:12 +0200 Subject: [PATCH 08/66] update dependencies --- composer.json | 16 +-- composer.lock | 345 +++++++++++++++++++++++++------------------------- 2 files changed, 181 insertions(+), 180 deletions(-) diff --git a/composer.json b/composer.json index efc1b62..74eed1e 100644 --- a/composer.json +++ b/composer.json @@ -7,14 +7,14 @@ "php": ">=8.3", "ext-ctype": "*", "ext-iconv": "*", - "doctrine/dbal": "^4", + "doctrine/dbal": "^4.1", "doctrine/doctrine-bundle": "^2.12", - "doctrine/doctrine-migrations-bundle": "^3.3", - "doctrine/orm": "^3.2", + "doctrine/doctrine-migrations-bundle": "^3.3.1", + "doctrine/orm": "^3.2.1", "psr/clock": "^1.0", "symfony/console": "7.1.*", "symfony/dotenv": "7.1.*", - "symfony/flex": "^2", + "symfony/flex": "^2.4.6", "symfony/form": "7.1.*", "symfony/framework-bundle": "7.1.*", "symfony/runtime": "7.1.*", @@ -25,13 +25,13 @@ "symfony/yaml": "7.1.*" }, "require-dev": { - "lubiana/code-quality": "^1.7", - "phpunit/phpunit": "^9.6.19", + "lubiana/code-quality": "^1.7.2", + "phpunit/phpunit": "^9.6.20", "symfony/browser-kit": "7.1.*", "symfony/css-selector": "7.1.*", "symfony/maker-bundle": "^1.60", - "symfony/phpunit-bridge": "^7.1", - "symplify/config-transformer": "^12.3" + "symfony/phpunit-bridge": "^7.1.3", + "symplify/config-transformer": "^12.3.4" }, "config": { "allow-plugins": { diff --git a/composer.lock b/composer.lock index 703a034..9c978c5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2196ad236d40a68b165bf39ce4543bfc", + "content-hash": "0bd724c70530c5264dc15e7e7803e7e6", "packages": [ { "name": "doctrine/cache", @@ -187,16 +187,16 @@ }, { "name": "doctrine/dbal", - "version": "4.0.4", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "50fda19f80724b55ff770bb4ff352407008e63c5" + "reference": "2377cd41609aa51bee822c8d207317a3f363a558" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/50fda19f80724b55ff770bb4ff352407008e63c5", - "reference": "50fda19f80724b55ff770bb4ff352407008e63c5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/2377cd41609aa51bee822c8d207317a3f363a558", + "reference": "2377cd41609aa51bee822c8d207317a3f363a558", "shasum": "" }, "require": { @@ -209,13 +209,13 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.11.5", + "phpstan/phpstan": "1.11.7", "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.22", + "phpunit/phpunit": "10.5.28", "psalm/plugin-phpunit": "0.19.0", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.1", + "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^6.3.8|^7.0", "symfony/console": "^5.4|^6.3|^7.0", "vimeo/psalm": "5.24.0" @@ -275,7 +275,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.0.4" + "source": "https://github.com/doctrine/dbal/tree/4.1.0" }, "funding": [ { @@ -291,7 +291,7 @@ "type": "tidelift" } ], - "time": "2024-06-19T11:57:23+00:00" + "time": "2024-08-15T07:37:07+00:00" }, { "name": "doctrine/deprecations", @@ -1170,16 +1170,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc" + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", "shasum": "" }, "require": { @@ -1219,9 +1219,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0" + "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" }, - "time": "2024-05-08T08:12:09+00:00" + "time": "2024-08-05T20:32:22+00:00" }, { "name": "psr/cache", @@ -1475,16 +1475,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae" + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/e933e1d947ffb88efcdd34a2bd51561cab7deaae", - "reference": "e933e1d947ffb88efcdd34a2bd51561cab7deaae", + "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e", + "reference": "8ac37acee794372f9732fe8a61a8221f6762148e", "shasum": "" }, "require": { @@ -1552,7 +1552,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.2" + "source": "https://github.com/symfony/cache/tree/v7.1.3" }, "funding": [ { @@ -1568,7 +1568,7 @@ "type": "tidelift" } ], - "time": "2024-06-11T13:32:38+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/cache-contracts", @@ -1723,16 +1723,16 @@ }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -1796,7 +1796,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -1812,20 +1812,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9" + "reference": "8126f0be4ff984e4db0140e60917900a53facb49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6e108cded928bdafaf1da3fabe30dd5af20e36b9", - "reference": "6e108cded928bdafaf1da3fabe30dd5af20e36b9", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49", + "reference": "8126f0be4ff984e4db0140e60917900a53facb49", "shasum": "" }, "require": { @@ -1876,7 +1876,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.2" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.3" }, "funding": [ { @@ -1892,7 +1892,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T07:35:39+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1963,16 +1963,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6" + "reference": "b526822483124b62ff3cda14237418408f444e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/9fc4bebf69f00d4ebb12ee904d808b496035e2f6", - "reference": "9fc4bebf69f00d4ebb12ee904d808b496035e2f6", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b526822483124b62ff3cda14237418408f444e4d", + "reference": "b526822483124b62ff3cda14237418408f444e4d", "shasum": "" }, "require": { @@ -2051,7 +2051,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.3" }, "funding": [ { @@ -2067,20 +2067,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/dotenv", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede" + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/efa715ec40c098f2fba62444f4fd75d0d4248ede", - "reference": "efa715ec40c098f2fba62444f4fd75d0d4248ede", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/a26be30fd61678dab694a18a85084cea7673bbf3", + "reference": "a26be30fd61678dab694a18a85084cea7673bbf3", "shasum": "" }, "require": { @@ -2125,7 +2125,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.1" + "source": "https://github.com/symfony/dotenv/tree/v7.1.3" }, "funding": [ { @@ -2141,20 +2141,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-09T19:36:07+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -2200,7 +2200,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.2" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -2216,7 +2216,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -2442,16 +2442,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -2486,7 +2486,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -2502,20 +2502,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/flex", - "version": "v2.4.5", + "version": "v2.4.6", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "b0a405f40614c9f584b489d54f91091817b0e26e" + "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/b0a405f40614c9f584b489d54f91091817b0e26e", - "reference": "b0a405f40614c9f584b489d54f91091817b0e26e", + "url": "https://api.github.com/repos/symfony/flex/zipball/4dc11919791f81d087a12db2ab4c7e044431ef6b", + "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b", "shasum": "" }, "require": { @@ -2551,7 +2551,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.5" + "source": "https://github.com/symfony/flex/tree/v2.4.6" }, "funding": [ { @@ -2567,20 +2567,20 @@ "type": "tidelift" } ], - "time": "2024-03-02T08:16:47+00:00" + "time": "2024-04-27T10:22:22+00:00" }, { "name": "symfony/form", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5" + "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/b23a44f0edaceb8d70b0e7f8937feae81e6dede5", - "reference": "b23a44f0edaceb8d70b0e7f8937feae81e6dede5", + "url": "https://api.github.com/repos/symfony/form/zipball/11df2e2e142161824eb341e96cbb3c56c3bb57dc", + "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc", "shasum": "" }, "require": { @@ -2648,7 +2648,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.1.1" + "source": "https://github.com/symfony/form/tree/v7.1.3" }, "funding": [ { @@ -2664,20 +2664,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-19T08:30:01+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2" + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/54a84f49658e2e87167396b2259a55e55e11f4a2", - "reference": "54a84f49658e2e87167396b2259a55e55e11f4a2", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061", + "reference": "a32ec544bd501eb4619eb977860ad3076ee55061", "shasum": "" }, "require": { @@ -2795,7 +2795,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.2" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.3" }, "funding": [ { @@ -2811,20 +2811,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T13:24:34+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -2872,7 +2872,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -2888,20 +2888,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { @@ -2986,7 +2986,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -3002,7 +3002,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T13:13:31+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/options-resolver", @@ -3699,16 +3699,16 @@ }, { "name": "symfony/property-info", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16" + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/d7b91e4aa07e822a9b935fc29a7254c12d502f16", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", "shasum": "" }, "require": { @@ -3763,7 +3763,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.2" + "source": "https://github.com/symfony/property-info/tree/v7.1.3" }, "funding": [ { @@ -3779,20 +3779,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T07:21:35+00:00" + "time": "2024-07-26T07:36:36+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -3844,7 +3844,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -3860,7 +3860,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/runtime", @@ -3943,16 +3943,16 @@ }, { "name": "symfony/security-core", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f" + "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/d615960211a11913e70f8576e5c38cd05d90ec3f", - "reference": "d615960211a11913e70f8576e5c38cd05d90ec3f", + "url": "https://api.github.com/repos/symfony/security-core/zipball/aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", + "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", "shasum": "" }, "require": { @@ -4009,7 +4009,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.2" + "source": "https://github.com/symfony/security-core/tree/v7.1.3" }, "funding": [ { @@ -4025,7 +4025,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/security-csrf", @@ -4242,16 +4242,16 @@ }, { "name": "symfony/string", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -4309,7 +4309,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -4325,7 +4325,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation-contracts", @@ -4756,16 +4756,16 @@ }, { "name": "symfony/validator", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7" + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/bed12b7d5bd4dac452db5fa6203331c876b489e7", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7", + "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", "shasum": "" }, "require": { @@ -4833,7 +4833,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.2" + "source": "https://github.com/symfony/validator/tree/v7.1.3" }, "funding": [ { @@ -4849,20 +4849,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -4916,7 +4916,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -4932,7 +4932,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-exporter", @@ -5083,16 +5083,16 @@ }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", "shasum": "" }, "require": { @@ -5100,7 +5100,8 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php80": "^1.22", + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -5146,7 +5147,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.11.0" }, "funding": [ { @@ -5158,7 +5159,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-08-08T16:15:16+00:00" } ], "packages-dev": [ @@ -5242,17 +5243,17 @@ }, { "name": "lubiana/code-quality", - "version": "1.7.0", + "version": "1.7.2", "source": { "type": "git", "url": "https://git.php.fail/lubiana/code-quality.git", - "reference": "2793c36fa9c9daf0c51f4bf0fce1fce76ccc85fc" + "reference": "b7e3418f0fa3225d2cdab9cfdcba266bc74775a4" }, "require": { "php": "^8.3", - "rector/rector": "^1.0.4", - "slevomat/coding-standard": "^8.15.0", - "symplify/easy-coding-standard": "^12.1.14" + "rector/rector": "^1.0.5", + "slevomat/coding-standard": "^8.15", + "symplify/easy-coding-standard": "^12.3.5" }, "type": "library", "autoload": { @@ -5267,7 +5268,7 @@ "keywords": [ "dev" ], - "time": "2024-05-04T18:26:43+00:00" + "time": "2024-08-18T07:17:23+00:00" }, { "name": "masterminds/html5", @@ -5621,16 +5622,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.7", + "version": "1.11.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d" + "reference": "640410b32995914bde3eed26fa89552f9c2c082f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f", "shasum": "" }, "require": { @@ -5675,7 +5676,7 @@ "type": "github" } ], - "time": "2024-07-06T11:17:41+00:00" + "time": "2024-08-08T09:02:50+00:00" }, { "name": "phpunit/php-code-coverage", @@ -6101,21 +6102,21 @@ }, { "name": "rector/rector", - "version": "1.2.0", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65" + "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/2fa387553db22b6f9bcccf5ff16f2c2c18a52a65", - "reference": "2fa387553db22b6f9bcccf5ff16f2c2c18a52a65", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39", + "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.11.9" }, "conflict": { "rector/rector-doctrine": "*", @@ -6148,7 +6149,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.0" + "source": "https://github.com/rectorphp/rector/tree/1.2.3" }, "funding": [ { @@ -6156,7 +6157,7 @@ "type": "github" } ], - "time": "2024-07-01T14:24:45+00:00" + "time": "2024-08-12T16:36:46+00:00" }, { "name": "sebastian/cli-parser", @@ -7188,16 +7189,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.1", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877" + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877", - "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", "shasum": "" }, "require": { @@ -7264,7 +7265,7 @@ "type": "open_collective" } ], - "time": "2024-05-22T21:24:41+00:00" + "time": "2024-07-21T23:26:44+00:00" }, { "name": "symfony/browser-kit", @@ -7560,16 +7561,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8" + "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", - "reference": "8eb63f1c0e2001f97b3cd9ed550b18765cdeb1c8", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e823122d31935eb711e2767c31f3d71cb0b87fb1", + "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1", "shasum": "" }, "require": { @@ -7622,7 +7623,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.2" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.3" }, "funding": [ { @@ -7638,20 +7639,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { @@ -7683,7 +7684,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -7699,7 +7700,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symplify/config-transformer", @@ -7745,16 +7746,16 @@ }, { "name": "symplify/easy-coding-standard", - "version": "12.3.1", + "version": "12.3.5", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "bd670feae8d0b6da891d29a3c549bd0f4aa48711" + "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/bd670feae8d0b6da891d29a3c549bd0f4aa48711", - "reference": "bd670feae8d0b6da891d29a3c549bd0f4aa48711", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", + "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", "shasum": "" }, "require": { @@ -7790,7 +7791,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.1" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.5" }, "funding": [ { @@ -7802,7 +7803,7 @@ "type": "github" } ], - "time": "2024-07-06T12:33:15+00:00" + "time": "2024-08-08T08:43:50+00:00" }, { "name": "theseer/tokenizer", From 12ff38ecd67f0c19ec8f758cf10b13aa0063dacc Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 31 Aug 2024 21:40:05 +0200 Subject: [PATCH 09/66] bump deps --- composer.lock | 350 +++++++++++++++++++++++------------------------ phpunit.xml.dist | 2 +- 2 files changed, 176 insertions(+), 176 deletions(-) diff --git a/composer.lock b/composer.lock index 9c978c5..23daf70 100644 --- a/composer.lock +++ b/composer.lock @@ -883,16 +883,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c" + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/535a70dcbd88b8c6ba945be050977457f4f4c06c", - "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877", + "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877", "shasum": "" }, "require": { @@ -915,6 +915,7 @@ "doctrine/persistence": "^2 || ^3", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", + "fig/log-test": "^1", "phpstan/phpstan": "^1.10", "phpstan/phpstan-deprecation-rules": "^1.1", "phpstan/phpstan-phpunit": "^1.3", @@ -965,7 +966,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.0" + "source": "https://github.com/doctrine/migrations/tree/3.8.1" }, "funding": [ { @@ -981,20 +982,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T14:12:46+00:00" + "time": "2024-08-28T13:17:28+00:00" }, { "name": "doctrine/orm", - "version": "3.2.1", + "version": "3.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "722cea6536775206e81744542b36fa7c9a4ea3e5" + "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/722cea6536775206e81744542b36fa7c9a4ea3e5", - "reference": "722cea6536775206e81744542b36fa7c9a4ea3e5", + "url": "https://api.github.com/repos/doctrine/orm/zipball/831a1eb7d260925528cdbb49cc1866c0357cf147", + "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147", "shasum": "" }, "require": { @@ -1067,9 +1068,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.2.1" + "source": "https://github.com/doctrine/orm/tree/3.2.2" }, - "time": "2024-06-26T21:48:58+00:00" + "time": "2024-08-23T10:03:52+00:00" }, { "name": "doctrine/persistence", @@ -1425,16 +1426,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "79dff0b268932c640297f5208d6298f71855c03e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", + "reference": "79dff0b268932c640297f5208d6298f71855c03e", "shasum": "" }, "require": { @@ -1469,22 +1470,22 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.1" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-08-21T13:31:24+00:00" }, { "name": "symfony/cache", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "8ac37acee794372f9732fe8a61a8221f6762148e" + "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e", - "reference": "8ac37acee794372f9732fe8a61a8221f6762148e", + "url": "https://api.github.com/repos/symfony/cache/zipball/b61e464d7687bb7e8f677d5031c632bf3820df18", + "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18", "shasum": "" }, "require": { @@ -1552,7 +1553,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.3" + "source": "https://github.com/symfony/cache/tree/v7.1.4" }, "funding": [ { @@ -1568,7 +1569,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/cache-contracts", @@ -1723,16 +1724,16 @@ }, { "name": "symfony/console", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", - "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", "shasum": "" }, "require": { @@ -1796,7 +1797,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.3" + "source": "https://github.com/symfony/console/tree/v7.1.4" }, "funding": [ { @@ -1812,20 +1813,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-15T22:48:53+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "8126f0be4ff984e4db0140e60917900a53facb49" + "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49", - "reference": "8126f0be4ff984e4db0140e60917900a53facb49", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5320e0bc2c9e2d7450bb4091e497a305a68b28ed", + "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed", "shasum": "" }, "require": { @@ -1876,7 +1877,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.3" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.4" }, "funding": [ { @@ -1892,7 +1893,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:35:39+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1963,16 +1964,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "b526822483124b62ff3cda14237418408f444e4d" + "reference": "5c31b278a52023970f4ef398e42ab9048483abfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b526822483124b62ff3cda14237418408f444e4d", - "reference": "b526822483124b62ff3cda14237418408f444e4d", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/5c31b278a52023970f4ef398e42ab9048483abfa", + "reference": "5c31b278a52023970f4ef398e42ab9048483abfa", "shasum": "" }, "require": { @@ -2051,7 +2052,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.3" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.4" }, "funding": [ { @@ -2067,7 +2068,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-13T10:29:23+00:00" }, { "name": "symfony/dotenv", @@ -2442,16 +2443,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "717c6329886f32dc65e27461f80f2a465412fdca" + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", - "reference": "717c6329886f32dc65e27461f80f2a465412fdca", + "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", + "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", "shasum": "" }, "require": { @@ -2486,7 +2487,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.3" + "source": "https://github.com/symfony/finder/tree/v7.1.4" }, "funding": [ { @@ -2502,7 +2503,7 @@ "type": "tidelift" } ], - "time": "2024-07-24T07:08:44+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/flex", @@ -2571,16 +2572,16 @@ }, { "name": "symfony/form", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc" + "reference": "3018ad169ea7532eec19e001f2c9f049ff051bd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/11df2e2e142161824eb341e96cbb3c56c3bb57dc", - "reference": "11df2e2e142161824eb341e96cbb3c56c3bb57dc", + "url": "https://api.github.com/repos/symfony/form/zipball/3018ad169ea7532eec19e001f2c9f049ff051bd6", + "reference": "3018ad169ea7532eec19e001f2c9f049ff051bd6", "shasum": "" }, "require": { @@ -2648,7 +2649,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.1.3" + "source": "https://github.com/symfony/form/tree/v7.1.4" }, "funding": [ { @@ -2664,20 +2665,20 @@ "type": "tidelift" } ], - "time": "2024-07-19T08:30:01+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "a32ec544bd501eb4619eb977860ad3076ee55061" + "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061", - "reference": "a32ec544bd501eb4619eb977860ad3076ee55061", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/711af4eefcb4054a9c93e44b403626e1826bcddd", + "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd", "shasum": "" }, "require": { @@ -2795,7 +2796,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.3" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.4" }, "funding": [ { @@ -2811,7 +2812,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T13:24:34+00:00" + "time": "2024-08-11T16:10:02+00:00" }, { "name": "symfony/http-foundation", @@ -2892,16 +2893,16 @@ }, { "name": "symfony/http-kernel", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" + "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", - "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", + "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", "shasum": "" }, "require": { @@ -2986,7 +2987,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.4" }, "funding": [ { @@ -3002,7 +3003,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T14:58:15+00:00" + "time": "2024-08-30T17:02:28+00:00" }, { "name": "symfony/options-resolver", @@ -3623,16 +3624,16 @@ }, { "name": "symfony/property-access", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a" + "reference": "6c709f97103355016e5782d0622437ae381012ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", - "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a", + "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", + "reference": "6c709f97103355016e5782d0622437ae381012ad", "shasum": "" }, "require": { @@ -3679,7 +3680,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.1" + "source": "https://github.com/symfony/property-access/tree/v7.1.4" }, "funding": [ { @@ -3695,7 +3696,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/property-info", @@ -3783,16 +3784,16 @@ }, { "name": "symfony/routing", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", - "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", "shasum": "" }, "require": { @@ -3844,7 +3845,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.3" + "source": "https://github.com/symfony/routing/tree/v7.1.4" }, "funding": [ { @@ -3860,7 +3861,7 @@ "type": "tidelift" } ], - "time": "2024-07-17T06:10:24+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/runtime", @@ -3943,16 +3944,16 @@ }, { "name": "symfony/security-core", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7" + "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", - "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7", + "url": "https://api.github.com/repos/symfony/security-core/zipball/f5ccd9d005993e5ff7251e57fe4a0615c8535866", + "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866", "shasum": "" }, "require": { @@ -4009,7 +4010,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.3" + "source": "https://github.com/symfony/security-core/tree/v7.1.4" }, "funding": [ { @@ -4025,7 +4026,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/security-csrf", @@ -4242,16 +4243,16 @@ }, { "name": "symfony/string", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" + "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", - "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", + "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", "shasum": "" }, "require": { @@ -4309,7 +4310,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.3" + "source": "https://github.com/symfony/string/tree/v7.1.4" }, "funding": [ { @@ -4325,7 +4326,7 @@ "type": "tidelift" } ], - "time": "2024-07-22T10:25:37+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/translation-contracts", @@ -4407,16 +4408,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8" + "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/96e6e12a63db80bcedefc012042d2cb2d1a015f8", - "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2db32cfe8fc57797908ef0bee232b90dbe42af66", + "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66", "shasum": "" }, "require": { @@ -4496,7 +4497,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.1" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.4" }, "funding": [ { @@ -4512,7 +4513,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-29T08:16:25+00:00" }, { "name": "symfony/twig-bundle", @@ -4682,16 +4683,16 @@ }, { "name": "symfony/uid", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277" + "reference": "82177535395109075cdb45a70533aa3d7a521cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/bb59febeecc81528ff672fad5dab7f06db8c8277", - "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277", + "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", + "reference": "82177535395109075cdb45a70533aa3d7a521cdf", "shasum": "" }, "require": { @@ -4736,7 +4737,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.1" + "source": "https://github.com/symfony/uid/tree/v7.1.4" }, "funding": [ { @@ -4752,20 +4753,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "symfony/validator", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" + "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", - "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", + "url": "https://api.github.com/repos/symfony/validator/zipball/0d7e0dfd41702d6b9356214b76110421c1e74368", + "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368", "shasum": "" }, "require": { @@ -4833,7 +4834,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.3" + "source": "https://github.com/symfony/validator/tree/v7.1.4" }, "funding": [ { @@ -4849,20 +4850,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-30T15:58:06+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", - "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", "shasum": "" }, "require": { @@ -4916,7 +4917,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.4" }, "funding": [ { @@ -4932,7 +4933,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-30T16:12:47+00:00" }, { "name": "symfony/var-exporter", @@ -5012,16 +5013,16 @@ }, { "name": "symfony/yaml", - "version": "v7.1.1", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2" + "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", - "reference": "fa34c77015aa6720469db7003567b9f772492bf2", + "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b", + "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b", "shasum": "" }, "require": { @@ -5063,7 +5064,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.1" + "source": "https://github.com/symfony/yaml/tree/v7.1.4" }, "funding": [ { @@ -5079,28 +5080,27 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-08-12T09:59:40+00:00" }, { "name": "twig/twig", - "version": "v3.11.0", + "version": "v3.12.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d" + "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", - "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea", + "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22", "symfony/polyfill-php81": "^1.29" }, "require-dev": { @@ -5147,7 +5147,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.11.0" + "source": "https://github.com/twigphp/Twig/tree/v3.12.0" }, "funding": [ { @@ -5159,7 +5159,7 @@ "type": "tidelift" } ], - "time": "2024-08-08T16:15:16+00:00" + "time": "2024-08-29T09:51:12+00:00" } ], "packages-dev": [ @@ -5575,16 +5575,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.29.1", + "version": "1.30.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4" + "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4", - "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f", + "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f", "shasum": "" }, "require": { @@ -5616,22 +5616,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0" }, - "time": "2024-05-31T08:52:43+00:00" + "time": "2024-08-29T09:54:52+00:00" }, { "name": "phpstan/phpstan", - "version": "1.11.10", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "640410b32995914bde3eed26fa89552f9c2c082f" + "reference": "384af967d35b2162f69526c7276acadce534d0e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", - "reference": "640410b32995914bde3eed26fa89552f9c2c082f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1", + "reference": "384af967d35b2162f69526c7276acadce534d0e1", "shasum": "" }, "require": { @@ -5676,39 +5676,39 @@ "type": "github" } ], - "time": "2024-08-08T09:02:50+00:00" + "time": "2024-08-27T09:18:05+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -5717,7 +5717,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -5746,7 +5746,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -5754,7 +5754,7 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6102,21 +6102,21 @@ }, { "name": "rector/rector", - "version": "1.2.3", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39" + "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39", - "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381", + "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11.9" + "phpstan/phpstan": "^1.11.11" }, "conflict": { "rector/rector-doctrine": "*", @@ -6149,7 +6149,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.3" + "source": "https://github.com/rectorphp/rector/tree/1.2.4" }, "funding": [ { @@ -6157,7 +6157,7 @@ "type": "github" } ], - "time": "2024-08-12T16:36:46+00:00" + "time": "2024-08-23T09:03:01+00:00" }, { "name": "sebastian/cli-parser", @@ -7469,16 +7469,16 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.60.0", + "version": "v1.61.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "c305a02a22974670f359d4274c9431e1a191f559" + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c305a02a22974670f359d4274c9431e1a191f559", - "reference": "c305a02a22974670f359d4274c9431e1a191f559", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", "shasum": "" }, "require": { @@ -7541,7 +7541,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.60.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" }, "funding": [ { @@ -7557,20 +7557,20 @@ "type": "tidelift" } ], - "time": "2024-06-10T06:03:18+00:00" + "time": "2024-08-29T22:50:23+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.3", + "version": "v7.1.4", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1" + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e823122d31935eb711e2767c31f3d71cb0b87fb1", - "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", "shasum": "" }, "require": { @@ -7623,7 +7623,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.3" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4" }, "funding": [ { @@ -7639,7 +7639,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-08-13T14:28:19+00:00" }, { "name": "symfony/process", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index a57e50a..4e78739 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,7 +6,7 @@ backupGlobals="false" colors="true" bootstrap="tests/bootstrap.php" - convertDeprecationsToExceptions="false" + convertDeprecationsToExceptions="true" > From 7674b6a6bd929d61c7460ffeee286cdba6b8bbf8 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sun, 15 Sep 2024 22:11:42 +0200 Subject: [PATCH 10/66] add mutation testing --- .forgejo/workflows/pull_request.yml | 11 +- .forgejo/workflows/push.yml | 2 +- composer.json | 7 +- composer.lock | 1126 ++++++++++++++++- infection.json5 | 19 + phpunit.xml.dist | 6 +- src/Command/FakeDataCommand.php | 35 - .../MigrateOrderitemsMenuitemsCommand.php | 66 - src/Controller/FoodOrderController.php | 6 +- src/Controller/MenuItemController.php | 1 - src/Entity/FoodOrder.php | 2 +- src/Entity/FoodVendor.php | 4 +- src/Form/FoodOrderType.php | 10 - src/Form/UserNameFormType.php | 13 +- src/Repository/FoodOrderRepository.php | 4 +- src/Service/FakeData.php | 100 -- tests/Controller/FoodVendorControllerTest.php | 8 +- tests/Controller/HomeControllerTest.php | 15 + tests/Controller/OrderItemControllerTest.php | 25 +- tests/Entity/FoodOrderTest.php | 3 +- tests/Entity/FoodVendorTest.php | 20 + tests/Entity/MenuItemTest.php | 3 + 22 files changed, 1239 insertions(+), 247 deletions(-) create mode 100644 infection.json5 delete mode 100644 src/Command/FakeDataCommand.php delete mode 100644 src/Command/MigrateOrderitemsMenuitemsCommand.php delete mode 100644 src/Service/FakeData.php diff --git a/.forgejo/workflows/pull_request.yml b/.forgejo/workflows/pull_request.yml index 4530c52..3dcf937 100644 --- a/.forgejo/workflows/pull_request.yml +++ b/.forgejo/workflows/pull_request.yml @@ -23,7 +23,16 @@ jobs: - name: lint run: composer lint - name: test - run: composer test + run: composer mutation + - name: Add comment to pull request + run: | + cat var/log/infection.txt >> /tmp/pull-request-comment + cat var/log/summary.log >> /tmp/pull-request-comment + curl -X POST \ + -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Content-Type: application/json" \ + -d '{"body": "$(cat /tmp/pull-request-comment)"}' \ + "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/issues/${GITHUB_EVENT_PULL_REQUEST_NUMBER}/comments" - name: GIT commit and push all changed files env: CI_COMMIT_MESSAGE: Continuous Integration Fixes diff --git a/.forgejo/workflows/push.yml b/.forgejo/workflows/push.yml index 837b78f..259579e 100644 --- a/.forgejo/workflows/push.yml +++ b/.forgejo/workflows/push.yml @@ -27,7 +27,7 @@ jobs: - name: lint run: composer lint - name: test - run: composer test + run: composer mutation - name: GIT commit and push all changed files env: CI_COMMIT_MESSAGE: Continuous Integration Fixes diff --git a/composer.json b/composer.json index 74eed1e..4a14071 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "symfony/yaml": "7.1.*" }, "require-dev": { + "infection/infection": "^0.29.6", "lubiana/code-quality": "^1.7.2", "phpunit/phpunit": "^9.6.20", "symfony/browser-kit": "7.1.*", @@ -38,7 +39,8 @@ "php-http/discovery": true, "symfony/flex": true, "symfony/runtime": true, - "dealerdirect/phpcodesniffer-composer-installer": true + "dealerdirect/phpcodesniffer-composer-installer": true, + "infection/extension-installer": true }, "sort-packages": true, "platform": { @@ -81,7 +83,8 @@ "rector", "ecs --fix || ecs --fix" ], - "test": "bin/phpunit" + "test": "bin/phpunit", + "mutation": "infection --threads=8 --show-mutations" }, "conflict": { "symfony/symfony": "*" diff --git a/composer.lock b/composer.lock index 23daf70..ed05a1b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0bd724c70530c5264dc15e7e7803e7e6", + "content-hash": "bc40af7a698e5c0c5eb44b337b8b1274", "packages": [ { "name": "doctrine/cache", @@ -5163,6 +5163,239 @@ } ], "packages-dev": [ + { + "name": "colinodell/json5", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/colinodell/json5.git", + "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinodell/json5/zipball/5724d21bc5c910c2560af1b8915f0cc0163579c8", + "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "mikehaertl/php-shellcommand": "^1.7.0", + "phpstan/phpstan": "^1.10.57", + "scrutinizer/ocular": "^1.9", + "squizlabs/php_codesniffer": "^3.8.1", + "symfony/finder": "^6.0|^7.0", + "symfony/phpunit-bridge": "^7.0.3" + }, + "bin": [ + "bin/json5" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "files": [ + "src/global.php" + ], + "psr-4": { + "ColinODell\\Json5\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Developer" + } + ], + "description": "UTF-8 compatible JSON5 parser for PHP", + "homepage": "https://github.com/colinodell/json5", + "keywords": [ + "JSON5", + "json", + "json5_decode", + "json_decode" + ], + "support": { + "issues": "https://github.com/colinodell/json5/issues", + "source": "https://github.com/colinodell/json5/tree/v3.0.0" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + } + ], + "time": "2024-02-09T13:06:12+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.11.10", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-08-27T18:44:43+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, { "name": "dealerdirect/phpcodesniffer-composer-installer", "version": "v1.0.0", @@ -5241,6 +5474,493 @@ }, "time": "2023-01-05T11:28:13+00:00" }, + { + "name": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "infection/abstract-testframework-adapter", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/infection/abstract-testframework-adapter.git", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.17", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\AbstractTestFramework\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Abstract Test Framework Adapter for Infection", + "support": { + "issues": "https://github.com/infection/abstract-testframework-adapter/issues", + "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-17T18:49:12+00:00" + }, + { + "name": "infection/extension-installer", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/infection/extension-installer.git", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0" + }, + "require-dev": { + "composer/composer": "^1.9 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.18, <2.19", + "infection/infection": "^0.15.2", + "php-coveralls/php-coveralls": "^2.4", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.10", + "phpstan/phpstan-phpunit": "^0.12.6", + "phpstan/phpstan-strict-rules": "^0.12.2", + "phpstan/phpstan-webmozart-assert": "^0.12.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.8" + }, + "type": "composer-plugin", + "extra": { + "class": "Infection\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Infection\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Infection Extension Installer", + "support": { + "issues": "https://github.com/infection/extension-installer/issues", + "source": "https://github.com/infection/extension-installer/tree/0.1.2" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-10-20T22:08:34+00:00" + }, + { + "name": "infection/include-interceptor", + "version": "0.2.5", + "source": { + "type": "git", + "url": "https://github.com/infection/include-interceptor.git", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", + "shasum": "" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "infection/infection": "^0.15.0", + "phan/phan": "^2.4 || ^3", + "php-coveralls/php-coveralls": "^2.2", + "phpstan/phpstan": "^0.12.8", + "phpunit/phpunit": "^8.5", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\StreamWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", + "support": { + "issues": "https://github.com/infection/include-interceptor/issues", + "source": "https://github.com/infection/include-interceptor/tree/0.2.5" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-09T10:03:57+00:00" + }, + { + "name": "infection/infection", + "version": "0.29.6", + "source": { + "type": "git", + "url": "https://github.com/infection/infection.git", + "reference": "a8510c1d472892dda2ae32e2c4b2e795533db810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/infection/zipball/a8510c1d472892dda2ae32e2c4b2e795533db810", + "reference": "a8510c1d472892dda2ae32e2c4b2e795533db810", + "shasum": "" + }, + "require": { + "colinodell/json5": "^2.2 || ^3.0", + "composer-runtime-api": "^2.0", + "composer/xdebug-handler": "^2.0 || ^3.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "fidry/cpu-core-counter": "^0.4.0 || ^0.5.0 || ^1.0", + "infection/abstract-testframework-adapter": "^0.5.0", + "infection/extension-installer": "^0.1.0", + "infection/include-interceptor": "^0.2.5", + "infection/mutator": "^0.4", + "justinrainbow/json-schema": "^5.2.10", + "nikic/php-parser": "^5.0", + "ondram/ci-detector": "^4.1.0", + "php": "^8.1", + "sanmai/later": "^0.1.1", + "sanmai/pipeline": "^5.1 || ^6", + "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/safe": "^2.1.2", + "webmozart/assert": "^1.11" + }, + "conflict": { + "antecedent/patchwork": "<2.1.25", + "dg/bypass-finals": "<1.4.1", + "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" + }, + "require-dev": { + "ext-simplexml": "*", + "fidry/makefile": "^1.0", + "helmich/phpunit-json-assert": "^3.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.10.15", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpstan/phpstan-webmozart-assert": "^1.0.2", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "sidz/phpstan-rules": "^0.4", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/phpstan-safe-rule": "^1.2.0" + }, + "bin": [ + "bin/infection" + ], + "type": "library", + "autoload": { + "psr-4": { + "Infection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com", + "homepage": "https://twitter.com/maks_rafalko" + }, + { + "name": "Oleg Zhulnev", + "homepage": "https://github.com/sidz" + }, + { + "name": "Gert de Pagter", + "homepage": "https://github.com/BackEndTea" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com", + "homepage": "https://twitter.com/tfidry" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com" + }, + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", + "keywords": [ + "coverage", + "mutant", + "mutation framework", + "mutation testing", + "testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/infection/infection/issues", + "source": "https://github.com/infection/infection/tree/0.29.6" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2024-06-21T10:21:05+00:00" + }, + { + "name": "infection/mutator", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/infection/mutator.git", + "reference": "51d6d01a2357102030aee9d603063c4bad86b144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/mutator/zipball/51d6d01a2357102030aee9d603063c4bad86b144", + "reference": "51d6d01a2357102030aee9d603063c4bad86b144", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\Mutator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Mutator interface to implement custom mutators (mutation operators) for Infection", + "support": { + "issues": "https://github.com/infection/mutator/issues", + "source": "https://github.com/infection/mutator/tree/0.4.0" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2024-05-14T22:39:59+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "support": { + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + }, + "time": "2024-07-06T21:00:26+00:00" + }, { "name": "lubiana/code-quality", "version": "1.7.2", @@ -5455,6 +6175,84 @@ }, "time": "2024-07-01T20:03:41+00:00" }, + { + "name": "ondram/ci-detector", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.13.2", + "lmc/coding-standard": "^3.0.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpunit/phpunit": "^9.6.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect continuous integration environment and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "Wercker", + "adapter", + "appveyor", + "aws", + "aws codebuild", + "azure", + "azure devops", + "azure pipelines", + "bamboo", + "bitbucket", + "buddy", + "ci-info", + "codebuild", + "continuous integration", + "continuousphp", + "devops", + "drone", + "github", + "gitlab", + "interface", + "jenkins", + "pipelines", + "sourcehut", + "teamcity", + "travis" + ], + "support": { + "issues": "https://github.com/OndraM/ci-detector/issues", + "source": "https://github.com/OndraM/ci-detector/tree/4.2.0" + }, + "time": "2024-03-12T13:22:30+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -6159,6 +6957,135 @@ ], "time": "2024-08-23T09:03:01+00:00" }, + { + "name": "sanmai/later", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://github.com/sanmai/later.git", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.35.1", + "infection/infection": ">=0.27.6", + "phan/phan": ">=2", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": ">=1.4.5", + "phpunit/phpunit": ">=9.5 <10", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Later\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "Later: deferred wrapper object", + "support": { + "issues": "https://github.com/sanmai/later/issues", + "source": "https://github.com/sanmai/later/tree/0.1.4" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2023-10-24T00:25:28+00:00" + }, + { + "name": "sanmai/pipeline", + "version": "v6.11", + "source": { + "type": "git", + "url": "https://github.com/sanmai/pipeline.git", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.17", + "infection/infection": ">=0.10.5", + "league/pipeline": "^0.3 || ^1.0", + "phan/phan": ">=1.1", + "php-coveralls/php-coveralls": "^2.4.1", + "phpstan/phpstan": ">=0.10", + "phpunit/phpunit": ">=9.4", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v6.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Pipeline\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "General-purpose collections pipeline", + "support": { + "issues": "https://github.com/sanmai/pipeline/issues", + "source": "https://github.com/sanmai/pipeline/tree/v6.11" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2024-06-15T03:11:19+00:00" + }, { "name": "sebastian/cli-parser", "version": "1.0.2", @@ -7805,6 +8732,145 @@ ], "time": "2024-08-08T08:43:50+00:00" }, + { + "name": "thecodingmachine/safe", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.2", + "thecodingmachine/phpstan-strict-rules": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "files": [ + "deprecated/apc.php", + "deprecated/array.php", + "deprecated/datetime.php", + "deprecated/libevent.php", + "deprecated/misc.php", + "deprecated/password.php", + "deprecated/mssql.php", + "deprecated/stats.php", + "deprecated/strings.php", + "lib/special_cases.php", + "deprecated/mysqli.php", + "generated/apache.php", + "generated/apcu.php", + "generated/array.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gettext.php", + "generated/gmp.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/mysql.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ], + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "deprecated/Exceptions/", + "generated/Exceptions/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error", + "support": { + "issues": "https://github.com/thecodingmachine/safe/issues", + "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" + }, + "time": "2023-04-05T11:54:14+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.3", @@ -7854,6 +8920,64 @@ } ], "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], diff --git a/infection.json5 b/infection.json5 new file mode 100644 index 0000000..e6f50cc --- /dev/null +++ b/infection.json5 @@ -0,0 +1,19 @@ +{ + "$schema": "vendor/infection/infection/resources/schema.json", + "source": { + "directories": [ + "src" + ] + }, + "timeout": 30, + "logs": { + "text": "var/log/infection.txt", + "summary": "var/log/summary.log", + }, + "mutators": { + "@default": true, + "global-ignore": [ + "App\\Service\\Favicon::__toString" + ] + } +} \ No newline at end of file diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 4e78739..e0c28a4 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -7,6 +7,8 @@ colors="true" bootstrap="tests/bootstrap.php" convertDeprecationsToExceptions="true" + executionOrder="random" + resolveDependencies="true" > @@ -28,10 +30,6 @@ src - - src/Command - src/Service/FakeData.php - diff --git a/src/Command/FakeDataCommand.php b/src/Command/FakeDataCommand.php deleted file mode 100644 index c4fdd5d..0000000 --- a/src/Command/FakeDataCommand.php +++ /dev/null @@ -1,35 +0,0 @@ -fakeData->resetDb(); - $this->fakeData->generate(); - - $io->success('Added some fake data to database'); - return Command::SUCCESS; - } -} diff --git a/src/Command/MigrateOrderitemsMenuitemsCommand.php b/src/Command/MigrateOrderitemsMenuitemsCommand.php deleted file mode 100644 index 101d354..0000000 --- a/src/Command/MigrateOrderitemsMenuitemsCommand.php +++ /dev/null @@ -1,66 +0,0 @@ -orderItemRepository->findAll(); - - foreach ($orderItems as $orderItem) { - - $menuItem = $this->menuItemRepository->findOneBy([ - 'name' => $orderItem->getName(), - 'foodVendor' => $orderItem->getFoodOrder() - ->getFoodVendor(), - ]); - - if ($menuItem === null) { - $menuItem = new MenuItem; - $menuItem->setName($orderItem->getName()); - $menuItem->setFoodVendor($orderItem->getFoodOrder()->getFoodVendor()); - $this->entityManager->persist($menuItem); - $this->entityManager->flush(); - $output->writeln(sprintf('Menu item %s added', $menuItem->getName())); - } - $orderItem->setMenuItem($menuItem); - $this->entityManager->persist($orderItem); - } - - $this->entityManager->flush(); - $io->success('You have a new command! Now make it your own! Pass --help to see your options.'); - - return Command::SUCCESS; - } -} diff --git a/src/Controller/FoodOrderController.php b/src/Controller/FoodOrderController.php index f78cd09..250c2e4 100644 --- a/src/Controller/FoodOrderController.php +++ b/src/Controller/FoodOrderController.php @@ -95,7 +95,8 @@ final class FoodOrderController extends AbstractController #[Route('/{id}/close', name: 'app_food_order_close', methods: ['GET'])] public function close(FoodOrder $foodOrder, FoodOrderRepository $repository): Response { - $repository->save($foodOrder->close()); + $foodOrder->close(); + $repository->save(); return $this->redirectToRoute('app_food_order_show', [ 'id' => $foodOrder->getId(), ], Response::HTTP_SEE_OTHER); @@ -104,7 +105,8 @@ final class FoodOrderController extends AbstractController #[Route('/{id}/open', name: 'app_food_order_open', methods: ['GET'])] public function open(FoodOrder $foodOrder, FoodOrderRepository $repository): Response { - $repository->save($foodOrder->open()); + $foodOrder->open(); + $repository->save(); return $this->redirectToRoute('app_food_order_show', [ 'id' => $foodOrder->getId(), ], Response::HTTP_SEE_OTHER); diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php index dc3f63c..ea91e86 100644 --- a/src/Controller/MenuItemController.php +++ b/src/Controller/MenuItemController.php @@ -46,7 +46,6 @@ final class MenuItemController extends AbstractController { if ($this->isCsrfTokenValid('delete' . $menuItem->getId(), $request->getPayload()->getString('_token'))) { $menuItem->delete(); - $entityManager->persist($menuItem); $entityManager->flush(); } diff --git a/src/Entity/FoodOrder.php b/src/Entity/FoodOrder.php index 4fe29f5..0672e5c 100644 --- a/src/Entity/FoodOrder.php +++ b/src/Entity/FoodOrder.php @@ -134,7 +134,7 @@ class FoodOrder public function removeOrderItem(OrderItem $orderItem): static { // set the owning side to null (unless already changed) - if ($this->orderItems->removeElement($orderItem) && $orderItem->getFoodOrder() === $this) { + if ($this->orderItems->removeElement($orderItem)) { $orderItem->setFoodOrder(null); } diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index e4e430a..b688136 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -80,7 +80,7 @@ class FoodVendor public function removeFoodOrder(FoodOrder $foodOrder): static { // set the owning side to null (unless already changed) - if ($this->foodOrders->removeElement($foodOrder) && $foodOrder->getFoodVendor() === $this) { + if ($this->foodOrders->removeElement($foodOrder)) { $foodOrder->setFoodVendor(null); } @@ -113,7 +113,7 @@ class FoodVendor public function removeMenuItem(MenuItem $menuItem): static { // set the owning side to null (unless already changed) - if ($this->menuItems->removeElement($menuItem) && $menuItem->getFoodVendor() === $this) { + if ($this->menuItems->removeElement($menuItem)) { $menuItem->setFoodVendor(null); } diff --git a/src/Form/FoodOrderType.php b/src/Form/FoodOrderType.php index f45f35f..73eee66 100644 --- a/src/Form/FoodOrderType.php +++ b/src/Form/FoodOrderType.php @@ -2,13 +2,11 @@ namespace App\Form; -use App\Entity\FoodOrder; use App\Entity\FoodVendor; use Override; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\OptionsResolver\OptionsResolver; final class FoodOrderType extends AbstractType { @@ -31,12 +29,4 @@ final class FoodOrderType extends AbstractType $builder->setAction($action); } } - - #[Override] - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - 'data_class' => FoodOrder::class, - ]); - } } diff --git a/src/Form/UserNameFormType.php b/src/Form/UserNameFormType.php index 6d2a011..292be12 100644 --- a/src/Form/UserNameFormType.php +++ b/src/Form/UserNameFormType.php @@ -5,7 +5,6 @@ namespace App\Form; use Override; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\OptionsResolver\OptionsResolver; final class UserNameFormType extends AbstractType { @@ -13,17 +12,7 @@ final class UserNameFormType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $builder - ->add(child: 'username', options: [ - 'required' => false, - ]) + ->add(child: 'username') ; } - - #[Override] - public function configureOptions(OptionsResolver $resolver): void - { - $resolver->setDefaults([ - // Configure your form options here - ]); - } } diff --git a/src/Repository/FoodOrderRepository.php b/src/Repository/FoodOrderRepository.php index c0b2405..0df83aa 100644 --- a/src/Repository/FoodOrderRepository.php +++ b/src/Repository/FoodOrderRepository.php @@ -19,10 +19,8 @@ final class FoodOrderRepository extends ServiceEntityRepository parent::__construct($registry, FoodOrder::class); } - public function save(FoodOrder $order): void + public function save(): void { - $this->getEntityManager() - ->persist($order); $this->getEntityManager() ->flush(); } diff --git a/src/Service/FakeData.php b/src/Service/FakeData.php deleted file mode 100644 index 379f8e7..0000000 --- a/src/Service/FakeData.php +++ /dev/null @@ -1,100 +0,0 @@ -orderItemRepository->findAll() as $item) { - $this->entityManager->remove($item); - } - foreach ($this->foodOrderRepository->findAll() as $item) { - $this->entityManager->remove($item); - } - foreach ($this->foodVendorRepository->findAll() as $item) { - $this->entityManager->remove($item); - } - } - - public function generate(int $vendorAmount = 3, int $orderAmount = 4, int $itemAmount = 10): void - { - $vendors = $this->generateVendors($vendorAmount); - foreach ($vendors as $vendor) { - $orders = $this->generateOrdersForVendor($vendor, $orderAmount); - foreach ($orders as $order) { - $this->generateItemsForOrder($order, $itemAmount); - } - } - $this->entityManager->flush(); - } - - /** - * @return FoodVendor[] - */ - public function generateVendors(int $amount = 10): array - { - $vendors = []; - foreach (range(1, $amount) as $i) { - $vendor = new FoodVendor; - $vendor->setName('Food Vendor ' . $i); - $this->entityManager->persist($vendor); - $vendors[] = $vendor; - } - return $vendors; - } - - /** - * @return FoodOrder[] - */ - public function generateOrdersForVendor(FoodVendor $vendor, int $amount = 10): array - { - $orders = []; - foreach (range(1, $amount) as $i) { - $order = new FoodOrder; - $order->setFoodVendor($vendor); - if ($i % 2 === 0) { - $order->close(); - } - $this->entityManager->persist($order); - $orders[] = $order; - } - return $orders; - } - - /** - * @return OrderItem[] - */ - public function generateItemsForOrder(FoodOrder $order, int $amount = 10): array - { - $items = []; - foreach (range(1, $amount) as $i) { - $item = new OrderItem; - $item->setName('Item ' . $i); - $item->setFoodOrder($order); - if ($i % 2 === 0) { - $item->setExtras('Extra ' . $i); - } - $this->entityManager->persist($item); - $items[] = $item; - } - return $items; - } -} diff --git a/tests/Controller/FoodVendorControllerTest.php b/tests/Controller/FoodVendorControllerTest.php index 6c4c52b..b475fa1 100644 --- a/tests/Controller/FoodVendorControllerTest.php +++ b/tests/Controller/FoodVendorControllerTest.php @@ -118,7 +118,13 @@ final class FoodVendorControllerTest extends DbWebTest $this->manager->persist($fixture); $this->manager->flush(); - $this->client->request('GET', sprintf('%s%s/edit', $this->path, $fixture->getId())); + $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $fixture->getId())); + $this->assertSame( + $crawler->filter('#food_vendor_name') + ->last() + ->attr('value', ''), + 'Value' + ); $this->client->submitForm('Update', [ 'food_vendor[name]' => 'Something New', diff --git a/tests/Controller/HomeControllerTest.php b/tests/Controller/HomeControllerTest.php index 821e8f4..cc6080c 100644 --- a/tests/Controller/HomeControllerTest.php +++ b/tests/Controller/HomeControllerTest.php @@ -34,6 +34,21 @@ final class HomeControllerTest extends DbWebTest self::assertResponseStatusCodeSame(302); self::assertResponseHeaderSame('Location', '/food/order/list'); self::assertResponseCookieValueSame('username', 'Testing-1'); + + $crawler = $this->client->request( + 'GET', + '/username', + ); + + self::assertResponseStatusCodeSame(200); + + $this->assertSame( + $crawler->filter('#user_name_form_username') + ->last() + ->attr('value', ''), + 'Testing-1' + ); + } public function testRemoveUsername(): void diff --git a/tests/Controller/OrderItemControllerTest.php b/tests/Controller/OrderItemControllerTest.php index 1c65fb8..2c9c9ad 100644 --- a/tests/Controller/OrderItemControllerTest.php +++ b/tests/Controller/OrderItemControllerTest.php @@ -38,6 +38,16 @@ final class OrderItemControllerTest extends DbWebTest $this->menuItem->setName('Testing'); $this->menuItem->setFoodVendor($this->vendor); + $vendor2 = new FoodVendor; + $vendor2->setName('Vendor 2'); + + $menuItem2 = new MenuItem; + $menuItem2->setName('Testing2'); + $menuItem2->setFoodVendor($vendor2); + + $this->manager->persist($vendor2); + $this->manager->persist($menuItem2); + $this->manager->persist($this->menuItem); $this->manager->flush(); @@ -46,11 +56,16 @@ final class OrderItemControllerTest extends DbWebTest public function testNew(): void { - $this->client->request( + $crawler = $this->client->request( 'GET', sprintf('%snew/%s', $this->path, $this->order->getId()) ); + $children = $crawler->filter('body > main:nth-child(2) > div:nth-child(5)') + ->children(); + + $this->assertCount(1, $children); + self::assertResponseStatusCodeSame(200); $this->client->submitForm('Save', [ @@ -61,7 +76,9 @@ final class OrderItemControllerTest extends DbWebTest self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); self::assertSame(1, $this->repository->count([])); - self::assertSame(1, $this->menuItemRepository->count([])); + self::assertSame(1, $this->menuItemRepository->count([ + 'foodVendor' => $this->vendor->getId(), + ])); } public function testNewOrderClosed(): void @@ -98,7 +115,7 @@ final class OrderItemControllerTest extends DbWebTest self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); self::assertSame(1, $this->repository->count([])); - self::assertSame(2, $this->menuItemRepository->count([])); + self::assertSame(3, $this->menuItemRepository->count([])); } public function testRemove(): void @@ -171,7 +188,7 @@ final class OrderItemControllerTest extends DbWebTest self::assertResponseRedirects(sprintf('/food/order/%s', $this->order->getId())); self::assertSame(1, $this->repository->count([])); - self::assertSame(2, $this->menuItemRepository->count([])); + self::assertSame(3, $this->menuItemRepository->count([])); } diff --git a/tests/Entity/FoodOrderTest.php b/tests/Entity/FoodOrderTest.php index 08fe6e6..5ed5ca7 100644 --- a/tests/Entity/FoodOrderTest.php +++ b/tests/Entity/FoodOrderTest.php @@ -16,8 +16,9 @@ final class FoodOrderTest extends TestCase $order->addOrderItem($orderItem); $order->addOrderItem($orderItem); $this->assertCount(1, $order->getOrderItems()); + $this->assertSame($order, $orderItem->getFoodOrder()); $order->removeOrderItem($orderItem); $this->assertCount(0, $order->getOrderItems()); - + $this->assertNull($orderItem->getFoodOrder()); } } diff --git a/tests/Entity/FoodVendorTest.php b/tests/Entity/FoodVendorTest.php index 8df1836..daa90c6 100644 --- a/tests/Entity/FoodVendorTest.php +++ b/tests/Entity/FoodVendorTest.php @@ -22,9 +22,16 @@ final class FoodVendorTest extends TestCase $vendor->addFoodOrder($order1); $vendor->addFoodOrder($order1); $this->assertCount(1, $vendor->getFoodOrders()); + $this->assertSame($vendor, $order1->getFoodVendor()); $vendor->removeFoodOrder($order1); $this->assertCount(0, $vendor->getFoodOrders()); + $this->assertNull($order1->getFoodVendor()); + } + + public function testMenuItem(): void + { + $vendor = new FoodVendor; $menuItem1 = new MenuItem; $menuItem2 = new MenuItem; $this->assertCount(0, $vendor->getMenuItems()); @@ -33,11 +40,24 @@ final class FoodVendorTest extends TestCase $this->assertCount(1, $vendor->getMenuItems()); $vendor->removeMenuItem($menuItem1); $this->assertCount(0, $vendor->getMenuItems()); + $this->assertNull($menuItem1->getFoodVendor()); $vendor->addMenuItem($menuItem1); $menuItem2->delete(); $vendor->addMenuItem($menuItem2); $this->assertCount(1, $vendor->getMenuItems()); $this->assertCount(2, $vendor->getMenuItems(true)); + } + public function testRemoveForeignMenuItem(): void + { + $vendor1 = new FoodVendor; + $vendor2 = new FoodVendor; + $item1 = new MenuItem; + + $vendor1->addMenuItem($item1); + $this->assertCount(1, $vendor1->getMenuItems()); + $vendor2->removeMenuItem($item1); + $this->assertCount(1, $vendor1->getMenuItems()); + $this->assertSame($vendor1, $item1->getFoodVendor()); } } diff --git a/tests/Entity/MenuItemTest.php b/tests/Entity/MenuItemTest.php index 4a0fd91..ccc34d6 100644 --- a/tests/Entity/MenuItemTest.php +++ b/tests/Entity/MenuItemTest.php @@ -4,6 +4,7 @@ namespace App\Tests\Entity; use App\Entity\FoodVendor; use App\Entity\MenuItem; +use DateTimeImmutable; use PHPUnit\Framework\TestCase; final class MenuItemTest extends TestCase @@ -21,7 +22,9 @@ final class MenuItemTest extends TestCase $this->assertEquals($vendor, $item->getFoodVendor()); $this->assertFalse($item->isDeleted()); + $this->assertNull($item->getDeletedAt()); $item->delete(); $this->assertTrue($item->isDeleted()); + $this->assertInstanceOf(DateTimeImmutable::class, $item->getDeletedAt()); } } From 441568bdb79801a465a7fe75fb08f6f1baefdb76 Mon Sep 17 00:00:00 2001 From: lubiana Date: Tue, 17 Sep 2024 18:16:41 +0200 Subject: [PATCH 11/66] add pr feedback --- .forgejo/workflows/pull_request.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/pull_request.yml b/.forgejo/workflows/pull_request.yml index 3dcf937..34cc06d 100644 --- a/.forgejo/workflows/pull_request.yml +++ b/.forgejo/workflows/pull_request.yml @@ -26,13 +26,16 @@ jobs: run: composer mutation - name: Add comment to pull request run: | + echo '```' >> /tmp/pull-request-comment cat var/log/infection.txt >> /tmp/pull-request-comment cat var/log/summary.log >> /tmp/pull-request-comment + echo '```' >> /tmp/pull-request-comment + jq -n --arg msg "$(cat /tmp/pull-request-comment)" '{"body": $msg}' > /tmp/git-msg curl -X POST \ -H "Authorization: token ${GITHUB_TOKEN}" \ -H "Content-Type: application/json" \ - -d '{"body": "$(cat /tmp/pull-request-comment)"}' \ - "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/issues/${GITHUB_EVENT_PULL_REQUEST_NUMBER}/comments" + -d @/tmp/git-msg \ + "${{ env.GITHUB_SERVER_URL }}/api/v1/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" - name: GIT commit and push all changed files env: CI_COMMIT_MESSAGE: Continuous Integration Fixes From 9e354992693b2394521ae78f8b911f07ddea86a5 Mon Sep 17 00:00:00 2001 From: lubiana Date: Mon, 23 Sep 2024 19:02:17 +0200 Subject: [PATCH 12/66] do not show deleted menuitems --- infection.json5 | 3 ++- src/Controller/OrderItemController.php | 1 + tests/Controller/MenuItemControllerTest.php | 12 ++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/infection.json5 b/infection.json5 index e6f50cc..1a80eed 100644 --- a/infection.json5 +++ b/infection.json5 @@ -13,7 +13,8 @@ "mutators": { "@default": true, "global-ignore": [ - "App\\Service\\Favicon::__toString" + "App\\Service\\Favicon::__toString", + "ORM\\Column.*" ] } } \ No newline at end of file diff --git a/src/Controller/OrderItemController.php b/src/Controller/OrderItemController.php index c973d97..ee1ef4b 100644 --- a/src/Controller/OrderItemController.php +++ b/src/Controller/OrderItemController.php @@ -56,6 +56,7 @@ final class OrderItemController extends AbstractController } $menuItems = $menuItemRepository->findBy([ 'foodVendor' => $foodOrder->getFoodVendor(), + 'deletedAt' => null, ]); return $this->render('order_item/new.html.twig', [ diff --git a/tests/Controller/MenuItemControllerTest.php b/tests/Controller/MenuItemControllerTest.php index 9dc0058..b3b799e 100644 --- a/tests/Controller/MenuItemControllerTest.php +++ b/tests/Controller/MenuItemControllerTest.php @@ -2,6 +2,7 @@ namespace App\Tests\Controller; +use App\Entity\FoodOrder; use App\Entity\FoodVendor; use App\Entity\MenuItem; use App\Tests\DbWebTest; @@ -85,6 +86,10 @@ final class MenuItemControllerTest extends DbWebTest $this->vendor->addMenuItem($menuItem); $this->manager->persist($this->vendor); $this->manager->persist($menuItem); + + $order = new FoodOrder(); + $order->setFoodVendor($this->vendor); + $this->manager->persist($order); $this->manager->flush(); $this->assertFalse($menuItem->isDeleted()); @@ -94,5 +99,12 @@ final class MenuItemControllerTest extends DbWebTest $menuItem = $this->repository->find($menuItem->getId()); $this->assertTrue($menuItem->isDeleted()); + + $crawler = $this->client->request('GET', '/order/item/new/' . $order->getId()); + $count = $crawler->filter('body > main:nth-child(2) > div:nth-child(5)')->children()->count(); + $this->assertSame(0, $count); + + $this->assertResponseIsSuccessful(); + } } From 80758abd6013808c1cc52142a58f15f4f636d96a Mon Sep 17 00:00:00 2001 From: lubiana Date: Mon, 23 Sep 2024 19:09:18 +0200 Subject: [PATCH 13/66] fix ci --- .forgejo/workflows/pull_request.yml | 2 +- .forgejo/workflows/push.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/pull_request.yml b/.forgejo/workflows/pull_request.yml index 34cc06d..19f4777 100644 --- a/.forgejo/workflows/pull_request.yml +++ b/.forgejo/workflows/pull_request.yml @@ -9,7 +9,7 @@ jobs: env: REPO: '${{ github.repository }}' TOKEN: '${{ secrets.GITHUB_TOKEN }}' - GIT_SERVER: 'hannover.ccc.de/gitlab' + GIT_SERVER: 'git.hannover.ccc.de' run: | git clone --branch $GITHUB_HEAD_REF https://${TOKEN}@${GIT_SERVER}/${REPO}.git . git fetch diff --git a/.forgejo/workflows/push.yml b/.forgejo/workflows/push.yml index 259579e..97a0662 100644 --- a/.forgejo/workflows/push.yml +++ b/.forgejo/workflows/push.yml @@ -13,7 +13,7 @@ jobs: REPO: '${{ github.repository }}' TOKEN: '${{ secrets.GITHUB_TOKEN }}' BRANCH: '${{ env.GITHUB_REF_NAME }}' - GIT_SERVER: 'hannover.ccc.de/gitlab' + GIT_SERVER: 'git.hannover.ccc.de' run: | git clone --branch $GITHUB_REF_NAME https://${TOKEN}@${GIT_SERVER}/${REPO}.git . git fetch From ee5d515ac11d034559bd639bb70356a1eb33dad4 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Mon, 23 Sep 2024 17:11:33 +0000 Subject: [PATCH 14/66] Continuous Integration Fixes --- tests/Controller/MenuItemControllerTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/Controller/MenuItemControllerTest.php b/tests/Controller/MenuItemControllerTest.php index b3b799e..4d6dd02 100644 --- a/tests/Controller/MenuItemControllerTest.php +++ b/tests/Controller/MenuItemControllerTest.php @@ -87,8 +87,9 @@ final class MenuItemControllerTest extends DbWebTest $this->manager->persist($this->vendor); $this->manager->persist($menuItem); - $order = new FoodOrder(); + $order = new FoodOrder; $order->setFoodVendor($this->vendor); + $this->manager->persist($order); $this->manager->flush(); $this->assertFalse($menuItem->isDeleted()); @@ -101,7 +102,9 @@ final class MenuItemControllerTest extends DbWebTest $this->assertTrue($menuItem->isDeleted()); $crawler = $this->client->request('GET', '/order/item/new/' . $order->getId()); - $count = $crawler->filter('body > main:nth-child(2) > div:nth-child(5)')->children()->count(); + $count = $crawler->filter('body > main:nth-child(2) > div:nth-child(5)') + ->children() + ->count(); $this->assertSame(0, $count); $this->assertResponseIsSuccessful(); From 8c783d780c515c3ea00ce06af86a3faf2c7ad1f7 Mon Sep 17 00:00:00 2001 From: lubiana Date: Wed, 18 Dec 2024 14:20:50 +0100 Subject: [PATCH 15/66] update dependencies --- composer.lock | 1229 ++++++++++++------------ src/Controller/FoodOrderController.php | 2 +- 2 files changed, 620 insertions(+), 611 deletions(-) diff --git a/composer.lock b/composer.lock index ed05a1b..53bd064 100644 --- a/composer.lock +++ b/composer.lock @@ -187,16 +187,16 @@ }, { "name": "doctrine/dbal", - "version": "4.1.0", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "2377cd41609aa51bee822c8d207317a3f363a558" + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/2377cd41609aa51bee822c8d207317a3f363a558", - "reference": "2377cd41609aa51bee822c8d207317a3f363a558", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", + "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", "shasum": "" }, "require": { @@ -209,16 +209,16 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.11.7", + "phpstan/phpstan": "1.12.6", "phpstan/phpstan-phpunit": "1.4.0", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.28", + "phpunit/phpunit": "10.5.30", "psalm/plugin-phpunit": "0.19.0", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^6.3.8|^7.0", "symfony/console": "^5.4|^6.3|^7.0", - "vimeo/psalm": "5.24.0" + "vimeo/psalm": "5.25.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -275,7 +275,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.1.0" + "source": "https://github.com/doctrine/dbal/tree/4.2.1" }, "funding": [ { @@ -291,33 +291,31 @@ "type": "tidelift" } ], - "time": "2024-08-15T07:37:07+00:00" + "time": "2024-10-10T18:01:27+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -325,7 +323,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -336,22 +334,22 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.12.0", + "version": "2.13.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5418e811a14724068e95e0ba43353b903ada530f" + "reference": "2740ad8b8739b39ab37d409c972b092f632b025a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f", - "reference": "5418e811a14724068e95e0ba43353b903ada530f", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2740ad8b8739b39ab37d409c972b092f632b025a", + "reference": "2740ad8b8739b39ab37d409c972b092f632b025a", "shasum": "" }, "require": { @@ -365,7 +363,7 @@ "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", + "symfony/doctrine-bridge": "^5.4.46 || ^6.4.3 || ^7.0.3", "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" @@ -442,7 +440,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.1" }, "funding": [ { @@ -458,7 +456,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T07:20:37+00:00" + "time": "2024-11-08T23:27:54+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -883,16 +881,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.1", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877" + "reference": "5007eb1168691225ac305fe16856755c20860842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877", - "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", + "reference": "5007eb1168691225ac305fe16856755c20860842", "shasum": "" }, "require": { @@ -966,7 +964,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.1" + "source": "https://github.com/doctrine/migrations/tree/3.8.2" }, "funding": [ { @@ -982,20 +980,20 @@ "type": "tidelift" } ], - "time": "2024-08-28T13:17:28+00:00" + "time": "2024-10-10T21:35:27+00:00" }, { "name": "doctrine/orm", - "version": "3.2.2", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147" + "reference": "69958152e661aa9c14e80d1ee4962863485aa60b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/831a1eb7d260925528cdbb49cc1866c0357cf147", - "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147", + "url": "https://api.github.com/repos/doctrine/orm/zipball/69958152e661aa9c14e80d1ee4962863485aa60b", + "reference": "69958152e661aa9c14e80d1ee4962863485aa60b", "shasum": "" }, "require": { @@ -1017,7 +1015,10 @@ "require-dev": { "doctrine/coding-standard": "^12.0", "phpbench/phpbench": "^1.0", - "phpstan/phpstan": "1.11.1", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "1.12.6", + "phpstan/phpstan-deprecation-rules": "^1.2", "phpunit/phpunit": "^10.4.0", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", @@ -1068,22 +1069,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.2.2" + "source": "https://github.com/doctrine/orm/tree/3.3.0" }, - "time": "2024-08-23T10:03:52+00:00" + "time": "2024-10-12T20:07:18+00:00" }, { "name": "doctrine/persistence", - "version": "3.3.3", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "b337726451f5d530df338fc7f68dee8781b49779" + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", - "reference": "b337726451f5d530df338fc7f68dee8781b49779", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", + "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", "shasum": "" }, "require": { @@ -1097,12 +1098,11 @@ "require-dev": { "doctrine/coding-standard": "^12", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.11.1", + "phpstan/phpstan": "1.12.7", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.24.0" + "phpunit/phpunit": "^8.5.38 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -1151,7 +1151,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.3" + "source": "https://github.com/doctrine/persistence/tree/3.4.0" }, "funding": [ { @@ -1167,20 +1167,20 @@ "type": "tidelift" } ], - "time": "2024-06-20T10:14:30+00:00" + "time": "2024-10-30T19:48:12+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.4.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/b784cbde727cf806721451dde40eff4fec3bbe86", + "reference": "b784cbde727cf806721451dde40eff4fec3bbe86", "shasum": "" }, "require": { @@ -1188,6 +1188,7 @@ }, "require-dev": { "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^10.5", "vimeo/psalm": "^5.24" @@ -1220,9 +1221,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.1" }, - "time": "2024-08-05T20:32:22+00:00" + "time": "2024-10-21T18:21:57+00:00" }, { "name": "psr/cache", @@ -1426,16 +1427,16 @@ }, { "name": "psr/log", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "79dff0b268932c640297f5208d6298f71855c03e" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", - "reference": "79dff0b268932c640297f5208d6298f71855c03e", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -1470,22 +1471,22 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.1" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2024-08-21T13:31:24+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "symfony/cache", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18" + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/b61e464d7687bb7e8f677d5031c632bf3820df18", - "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18", + "url": "https://api.github.com/repos/symfony/cache/zipball/18e0ba45a50032aa53dfebf830ec2980bb131591", + "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591", "shasum": "" }, "require": { @@ -1553,7 +1554,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.4" + "source": "https://github.com/symfony/cache/tree/v7.1.9" }, "funding": [ { @@ -1569,20 +1570,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-11-20T10:42:04+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -1629,7 +1630,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -1645,20 +1646,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/config", - "version": "v7.1.1", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" + "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", - "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", "shasum": "" }, "require": { @@ -1704,7 +1705,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.1.1" + "source": "https://github.com/symfony/config/tree/v7.1.7" }, "funding": [ { @@ -1720,20 +1721,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-11-04T11:34:07+00:00" }, { "name": "symfony/console", - "version": "v7.1.4", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", + "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", "shasum": "" }, "require": { @@ -1797,7 +1798,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.4" + "source": "https://github.com/symfony/console/tree/v7.1.8" }, "funding": [ { @@ -1813,20 +1814,20 @@ "type": "tidelift" } ], - "time": "2024-08-15T22:48:53+00:00" + "time": "2024-11-06T14:23:19+00:00" }, { "name": "symfony/dependency-injection", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed" + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5320e0bc2c9e2d7450bb4091e497a305a68b28ed", - "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900d2eac6e33aef743bdc10dd8c75d012215fd08", + "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08", "shasum": "" }, "require": { @@ -1877,7 +1878,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.4" + "source": "https://github.com/symfony/dependency-injection/tree/v7.1.9" }, "funding": [ { @@ -1893,20 +1894,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2024-11-25T15:44:54+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -1944,7 +1945,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -1960,20 +1961,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "5c31b278a52023970f4ef398e42ab9048483abfa" + "reference": "893cc4fa0f218d6e88efbe58397e2b42167648e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/5c31b278a52023970f4ef398e42ab9048483abfa", - "reference": "5c31b278a52023970f4ef398e42ab9048483abfa", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/893cc4fa0f218d6e88efbe58397e2b42167648e1", + "reference": "893cc4fa0f218d6e88efbe58397e2b42167648e1", "shasum": "" }, "require": { @@ -2003,7 +2004,7 @@ }, "require-dev": { "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1", + "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", @@ -2052,7 +2053,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.4" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.9" }, "funding": [ { @@ -2068,20 +2069,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T10:29:23+00:00" + "time": "2024-11-25T12:02:18+00:00" }, { "name": "symfony/dotenv", - "version": "v7.1.3", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "a26be30fd61678dab694a18a85084cea7673bbf3" + "reference": "245d1afe223664d2276afb75177d8988c328fb78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/a26be30fd61678dab694a18a85084cea7673bbf3", - "reference": "a26be30fd61678dab694a18a85084cea7673bbf3", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/245d1afe223664d2276afb75177d8988c328fb78", + "reference": "245d1afe223664d2276afb75177d8988c328fb78", "shasum": "" }, "require": { @@ -2126,7 +2127,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.3" + "source": "https://github.com/symfony/dotenv/tree/v7.1.9" }, "funding": [ { @@ -2142,20 +2143,20 @@ "type": "tidelift" } ], - "time": "2024-07-09T19:36:07+00:00" + "time": "2024-11-27T11:17:28+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.3", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c" + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", "shasum": "" }, "require": { @@ -2201,7 +2202,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.3" + "source": "https://github.com/symfony/error-handler/tree/v7.1.7" }, "funding": [ { @@ -2217,20 +2218,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T13:02:51+00:00" + "time": "2024-11-05T15:34:55+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + "reference": "87254c78dd50721cfd015b62277a8281c5589702" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", + "reference": "87254c78dd50721cfd015b62277a8281c5589702", "shasum": "" }, "require": { @@ -2281,7 +2282,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" }, "funding": [ { @@ -2297,20 +2298,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -2357,7 +2358,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -2373,20 +2374,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v7.1.2", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" + "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", "shasum": "" }, "require": { @@ -2423,7 +2424,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.2" + "source": "https://github.com/symfony/filesystem/tree/v7.1.6" }, "funding": [ { @@ -2439,20 +2440,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-10-25T15:11:02+00:00" }, { "name": "symfony/finder", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", + "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", "shasum": "" }, "require": { @@ -2487,7 +2488,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.4" + "source": "https://github.com/symfony/finder/tree/v7.1.6" }, "funding": [ { @@ -2503,26 +2504,29 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-10-01T08:31:23+00:00" }, { "name": "symfony/flex", - "version": "v2.4.6", + "version": "v2.4.7", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b" + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/4dc11919791f81d087a12db2ab4c7e044431ef6b", - "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b", + "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", + "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", "shasum": "" }, "require": { "composer-plugin-api": "^2.1", "php": ">=8.0" }, + "conflict": { + "composer/semver": "<1.7.2" + }, "require-dev": { "composer/composer": "^2.1", "symfony/dotenv": "^5.4|^6.0", @@ -2552,7 +2556,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.6" + "source": "https://github.com/symfony/flex/tree/v2.4.7" }, "funding": [ { @@ -2568,20 +2572,20 @@ "type": "tidelift" } ], - "time": "2024-04-27T10:22:22+00:00" + "time": "2024-10-07T08:51:54+00:00" }, { "name": "symfony/form", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "3018ad169ea7532eec19e001f2c9f049ff051bd6" + "reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/3018ad169ea7532eec19e001f2c9f049ff051bd6", - "reference": "3018ad169ea7532eec19e001f2c9f049ff051bd6", + "url": "https://api.github.com/repos/symfony/form/zipball/7a48dda96fe16711fc042df38ca1a7dd4d9d6387", + "reference": "7a48dda96fe16711fc042df38ca1a7dd4d9d6387", "shasum": "" }, "require": { @@ -2649,7 +2653,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v7.1.4" + "source": "https://github.com/symfony/form/tree/v7.1.6" }, "funding": [ { @@ -2665,20 +2669,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-10-09T08:46:59+00:00" }, { "name": "symfony/framework-bundle", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd" + "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/711af4eefcb4054a9c93e44b403626e1826bcddd", - "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d616d762905091e798d64c53ffe3840ccfc3d89", + "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89", "shasum": "" }, "require": { @@ -2687,7 +2691,7 @@ "php": ">=8.2", "symfony/cache": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^7.1", + "symfony/dependency-injection": "^7.1.5", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", "symfony/event-dispatcher": "^6.4|^7.0", @@ -2716,6 +2720,7 @@ "symfony/mime": "<6.4", "symfony/property-access": "<6.4", "symfony/property-info": "<6.4", + "symfony/runtime": "<6.4.13|>=7.0,<7.1.6", "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", "symfony/security-core": "<6.4", "symfony/security-csrf": "<6.4", @@ -2796,7 +2801,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.4" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.6" }, "funding": [ { @@ -2812,20 +2817,20 @@ "type": "tidelift" } ], - "time": "2024-08-11T16:10:02+00:00" + "time": "2024-10-25T15:11:02+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.3", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" + "reference": "82765842fb599c7ed839b650214680c7ee5779be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82765842fb599c7ed839b650214680c7ee5779be", + "reference": "82765842fb599c7ed839b650214680c7ee5779be", "shasum": "" }, "require": { @@ -2835,12 +2840,12 @@ }, "conflict": { "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -2873,7 +2878,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.9" }, "funding": [ { @@ -2889,20 +2894,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:41:01+00:00" + "time": "2024-11-13T18:58:36+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/649d0e23c571344ef1153d4ffb2564f534b85a45", + "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45", "shasum": "" }, "require": { @@ -2987,7 +2992,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.4" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.9" }, "funding": [ { @@ -3003,20 +3008,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T17:02:28+00:00" + "time": "2024-11-27T12:55:11+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.1", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + "reference": "0f4099f5306a92487d13b2a4589068c36a93c447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0f4099f5306a92487d13b2a4589068c36a93c447", + "reference": "0f4099f5306a92487d13b2a4589068c36a93c447", "shasum": "" }, "require": { @@ -3054,7 +3059,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.9" }, "funding": [ { @@ -3070,20 +3075,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-11-20T11:08:58+00:00" }, { "name": "symfony/password-hasher", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662" + "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/4ad96eb7cf9e2f8f133ada95f2b8021769061662", - "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/2e618d1af51805e5a1fbda326d00b77c6c1037d5", + "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5", "shasum": "" }, "require": { @@ -3126,7 +3131,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v7.1.1" + "source": "https://github.com/symfony/password-hasher/tree/v7.1.6" }, "funding": [ { @@ -3142,24 +3147,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", - "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3167,8 +3172,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3204,7 +3209,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -3220,24 +3225,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "e76343c631b453088e2260ac41dfebe21954de81" + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", - "reference": "e76343c631b453088e2260ac41dfebe21954de81", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", + "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance and support of other locales than \"en\"" @@ -3245,8 +3250,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3288,7 +3293,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" }, "funding": [ { @@ -3304,24 +3309,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", - "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -3329,8 +3334,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3369,7 +3374,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -3385,24 +3390,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", - "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3413,8 +3418,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3449,7 +3454,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -3465,30 +3470,30 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:30:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", - "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3525,7 +3530,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" }, "funding": [ { @@ -3541,24 +3546,24 @@ "type": "tidelift" } ], - "time": "2024-06-19T12:35:24+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.30.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/2ba1f33797470debcda07fe9dce20a0003df18e9", - "reference": "2ba1f33797470debcda07fe9dce20a0003df18e9", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -3569,8 +3574,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3604,7 +3609,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.30.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" }, "funding": [ { @@ -3620,20 +3625,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T15:07:36+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/property-access", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "6c709f97103355016e5782d0622437ae381012ad" + "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", - "reference": "6c709f97103355016e5782d0622437ae381012ad", + "url": "https://api.github.com/repos/symfony/property-access/zipball/975d7f7fd8fcb952364c6badc46d01a580532bf9", + "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9", "shasum": "" }, "require": { @@ -3680,7 +3685,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.4" + "source": "https://github.com/symfony/property-access/tree/v7.1.6" }, "funding": [ { @@ -3696,20 +3701,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:12:47+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/property-info", - "version": "v7.1.3", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" + "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", - "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", + "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", "shasum": "" }, "require": { @@ -3720,12 +3725,11 @@ "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<6.4", - "symfony/serializer": "<6.4" + "symfony/dependency-injection": "<6.4" }, "require-dev": { "phpdocumentor/reflection-docblock": "^5.2", - "phpstan/phpdoc-parser": "^1.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "symfony/cache": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/serializer": "^6.4|^7.0" @@ -3764,7 +3768,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.3" + "source": "https://github.com/symfony/property-info/tree/v7.1.9" }, "funding": [ { @@ -3780,20 +3784,20 @@ "type": "tidelift" } ], - "time": "2024-07-26T07:36:36+00:00" + "time": "2024-11-27T09:50:41+00:00" }, { "name": "symfony/routing", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", + "url": "https://api.github.com/repos/symfony/routing/zipball/a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", "shasum": "" }, "require": { @@ -3845,7 +3849,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.4" + "source": "https://github.com/symfony/routing/tree/v7.1.9" }, "funding": [ { @@ -3861,20 +3865,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2024-11-13T16:12:35+00:00" }, { "name": "symfony/runtime", - "version": "v7.1.1", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6" + "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/ea34522c447dd91a2b31cb330ee4540a56ba53f6", - "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6", + "url": "https://api.github.com/repos/symfony/runtime/zipball/9889783c17e8a68fa5e88c8e8a1a85e802558dba", + "reference": "9889783c17e8a68fa5e88c8e8a1a85e802558dba", "shasum": "" }, "require": { @@ -3924,7 +3928,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v7.1.1" + "source": "https://github.com/symfony/runtime/tree/v7.1.7" }, "funding": [ { @@ -3940,20 +3944,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:55:39+00:00" + "time": "2024-11-05T16:45:54+00:00" }, { "name": "symfony/security-core", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866" + "reference": "294426c17d484f47a576ca092c132f3afba17a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/f5ccd9d005993e5ff7251e57fe4a0615c8535866", - "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866", + "url": "https://api.github.com/repos/symfony/security-core/zipball/294426c17d484f47a576ca092c132f3afba17a19", + "reference": "294426c17d484f47a576ca092c132f3afba17a19", "shasum": "" }, "require": { @@ -4010,7 +4014,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.4" + "source": "https://github.com/symfony/security-core/tree/v7.1.9" }, "funding": [ { @@ -4026,20 +4030,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2024-11-27T09:50:41+00:00" }, { "name": "symfony/security-csrf", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21" + "reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/27cd1bce9d7f3457a152a6ca9790712d6954dd21", - "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/23b460d3447fd61970e0ed5ec7a0301296a17f06", + "reference": "23b460d3447fd61970e0ed5ec7a0301296a17f06", "shasum": "" }, "require": { @@ -4078,7 +4082,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v7.1.1" + "source": "https://github.com/symfony/security-csrf/tree/v7.1.6" }, "funding": [ { @@ -4094,20 +4098,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -4161,7 +4165,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -4177,20 +4181,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/stopwatch", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" + "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05", + "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05", "shasum": "" }, "require": { @@ -4223,7 +4227,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.6" }, "funding": [ { @@ -4239,20 +4243,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.4", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", + "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", "shasum": "" }, "require": { @@ -4310,7 +4314,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.4" + "source": "https://github.com/symfony/string/tree/v7.1.8" }, "funding": [ { @@ -4326,20 +4330,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-11-13T13:31:21+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -4388,7 +4392,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -4404,20 +4408,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/twig-bridge", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66" + "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2db32cfe8fc57797908ef0bee232b90dbe42af66", - "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", + "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", "shasum": "" }, "require": { @@ -4497,7 +4501,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.4" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.9" }, "funding": [ { @@ -4513,20 +4517,20 @@ "type": "tidelift" } ], - "time": "2024-08-29T08:16:25+00:00" + "time": "2024-11-25T12:02:18+00:00" }, { "name": "symfony/twig-bundle", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5" + "reference": "af902314a71fb412ae412094f7e1d7e49594507b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", - "reference": "d48c2f08c2f315e749f0e18fc4945b7be8afe1e5", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/af902314a71fb412ae412094f7e1d7e49594507b", + "reference": "af902314a71fb412ae412094f7e1d7e49594507b", "shasum": "" }, "require": { @@ -4581,7 +4585,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.1.1" + "source": "https://github.com/symfony/twig-bundle/tree/v7.1.6" }, "funding": [ { @@ -4597,20 +4601,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/type-info", - "version": "v7.1.1", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc" + "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/60b28eb733f1453287f1263ed305b96091e0d1dc", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc", + "url": "https://api.github.com/repos/symfony/type-info/zipball/51535dde21c7abf65c9d000a30bb15f6478195e6", + "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6", "shasum": "" }, "require": { @@ -4623,7 +4627,7 @@ "symfony/property-info": "<6.4" }, "require-dev": { - "phpstan/phpdoc-parser": "^1.0", + "phpstan/phpdoc-parser": "^1.0|^2.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/property-info": "^6.4|^7.0" }, @@ -4663,7 +4667,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.1" + "source": "https://github.com/symfony/type-info/tree/v7.1.8" }, "funding": [ { @@ -4679,20 +4683,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:59:31+00:00" + "time": "2024-11-07T15:49:33+00:00" }, { "name": "symfony/uid", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf" + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/82177535395109075cdb45a70533aa3d7a521cdf", - "reference": "82177535395109075cdb45a70533aa3d7a521cdf", + "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", "shasum": "" }, "require": { @@ -4737,7 +4741,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.4" + "source": "https://github.com/symfony/uid/tree/v7.1.6" }, "funding": [ { @@ -4753,20 +4757,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/validator", - "version": "v7.1.4", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368" + "reference": "ff71d77da404c700f8b05ba426eb9e6f8d22771b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/0d7e0dfd41702d6b9356214b76110421c1e74368", - "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368", + "url": "https://api.github.com/repos/symfony/validator/zipball/ff71d77da404c700f8b05ba426eb9e6f8d22771b", + "reference": "ff71d77da404c700f8b05ba426eb9e6f8d22771b", "shasum": "" }, "require": { @@ -4834,7 +4838,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.4" + "source": "https://github.com/symfony/validator/tree/v7.1.9" }, "funding": [ { @@ -4850,20 +4854,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T15:58:06+00:00" + "time": "2024-11-27T09:50:41+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.4", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", "shasum": "" }, "require": { @@ -4917,7 +4921,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.4" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" }, "funding": [ { @@ -4933,20 +4937,20 @@ "type": "tidelift" } ], - "time": "2024-08-30T16:12:47+00:00" + "time": "2024-11-08T15:46:42+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.2", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" + "reference": "90173ef89c40e7c8c616653241048705f84130ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", + "reference": "90173ef89c40e7c8c616653241048705f84130ef", "shasum": "" }, "require": { @@ -4993,7 +4997,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" }, "funding": [ { @@ -5009,20 +5013,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/yaml", - "version": "v7.1.4", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b" + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b", - "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", "shasum": "" }, "require": { @@ -5064,7 +5068,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.4" + "source": "https://github.com/symfony/yaml/tree/v7.1.6" }, "funding": [ { @@ -5080,20 +5084,20 @@ "type": "tidelift" } ], - "time": "2024-08-12T09:59:40+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "twig/twig", - "version": "v3.12.0", + "version": "v3.17.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea" + "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea", - "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/677ef8da6497a03048192aeeb5aa3018e379ac71", + "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71", "shasum": "" }, "require": { @@ -5104,6 +5108,7 @@ "symfony/polyfill-php81": "^1.29" }, "require-dev": { + "phpstan/phpstan": "^2.0", "psr/container": "^1.0|^2.0", "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, @@ -5147,7 +5152,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.12.0" + "source": "https://github.com/twigphp/Twig/tree/v3.17.1" }, "funding": [ { @@ -5159,7 +5164,7 @@ "type": "tidelift" } ], - "time": "2024-08-29T09:51:12+00:00" + "time": "2024-12-12T09:58:10+00:00" } ], "packages-dev": [ @@ -5253,16 +5258,16 @@ }, { "name": "composer/pcre", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { @@ -5272,8 +5277,8 @@ "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, "type": "library", @@ -5312,7 +5317,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -5328,7 +5333,7 @@ "type": "tidelift" } ], - "time": "2024-08-27T18:44:43+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/xdebug-handler", @@ -5714,16 +5719,16 @@ }, { "name": "infection/infection", - "version": "0.29.6", + "version": "0.29.10", "source": { "type": "git", "url": "https://github.com/infection/infection.git", - "reference": "a8510c1d472892dda2ae32e2c4b2e795533db810" + "reference": "cac7d20e5d286a37488527e477f5a695a9d7a44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/a8510c1d472892dda2ae32e2c4b2e795533db810", - "reference": "a8510c1d472892dda2ae32e2c4b2e795533db810", + "url": "https://api.github.com/repos/infection/infection/zipball/cac7d20e5d286a37488527e477f5a695a9d7a44c", + "reference": "cac7d20e5d286a37488527e477f5a695a9d7a44c", "shasum": "" }, "require": { @@ -5739,18 +5744,18 @@ "infection/extension-installer": "^0.1.0", "infection/include-interceptor": "^0.2.5", "infection/mutator": "^0.4", - "justinrainbow/json-schema": "^5.2.10", - "nikic/php-parser": "^5.0", + "justinrainbow/json-schema": "^5.3", + "nikic/php-parser": "^5.3", "ondram/ci-detector": "^4.1.0", - "php": "^8.1", + "php": "^8.2", "sanmai/later": "^0.1.1", "sanmai/pipeline": "^5.1 || ^6", "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", + "shish/safe": "^2.6", "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", "symfony/finder": "^5.4 || ^6.0 || ^7.0", "symfony/process": "^5.4 || ^6.0 || ^7.0", - "thecodingmachine/safe": "^2.1.2", "webmozart/assert": "^1.11" }, "conflict": { @@ -5762,8 +5767,6 @@ "ext-simplexml": "*", "fidry/makefile": "^1.0", "helmich/phpunit-json-assert": "^3.0", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1.1.0", "phpstan/phpstan": "^1.10.15", "phpstan/phpstan-phpunit": "^1.0.0", @@ -5772,8 +5775,7 @@ "phpunit/phpunit": "^10.5", "rector/rector": "^1.0", "sidz/phpstan-rules": "^0.4", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "thecodingmachine/phpstan-safe-rule": "^1.2.0" + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" }, "bin": [ "bin/infection" @@ -5829,7 +5831,7 @@ ], "support": { "issues": "https://github.com/infection/infection/issues", - "source": "https://github.com/infection/infection/tree/0.29.6" + "source": "https://github.com/infection/infection/tree/0.29.10" }, "funding": [ { @@ -5841,7 +5843,7 @@ "type": "open_collective" } ], - "time": "2024-06-21T10:21:05+00:00" + "time": "2024-12-17T19:11:10+00:00" }, { "name": "infection/mutator", @@ -6059,16 +6061,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -6107,7 +6109,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -6115,20 +6117,20 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nikic/php-parser", - "version": "v5.1.0", + "version": "v5.3.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", - "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", + "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", "shasum": "" }, "require": { @@ -6171,9 +6173,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" }, - "time": "2024-07-01T20:03:41+00:00" + "time": "2024-10-08T18:51:32+00:00" }, { "name": "ondram/ci-detector", @@ -6373,16 +6375,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.30.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f", - "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { @@ -6414,22 +6416,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" }, - "time": "2024-08-29T09:54:52+00:00" + "time": "2024-10-13T11:25:22+00:00" }, { "name": "phpstan/phpstan", - "version": "1.12.0", + "version": "1.12.13", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "384af967d35b2162f69526c7276acadce534d0e1" + "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1", - "reference": "384af967d35b2162f69526c7276acadce534d0e1", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b469068840cfa031e1deaf2fa1886d00e20680f", + "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f", "shasum": "" }, "require": { @@ -6474,7 +6476,7 @@ "type": "github" } ], - "time": "2024-08-27T09:18:05+00:00" + "time": "2024-12-17T17:00:20+00:00" }, { "name": "phpunit/php-code-coverage", @@ -6797,16 +6799,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.20", + "version": "9.6.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "49d7820565836236411f5dc002d16dd689cde42f" + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", - "reference": "49d7820565836236411f5dc002d16dd689cde42f", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", "shasum": "" }, "require": { @@ -6817,11 +6819,11 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.31", + "phpunit/php-code-coverage": "^9.2.32", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.4", @@ -6880,7 +6882,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" }, "funding": [ { @@ -6896,25 +6898,25 @@ "type": "tidelift" } ], - "time": "2024-07-10T11:45:39+00:00" + "time": "2024-12-05T13:48:26+00:00" }, { "name": "rector/rector", - "version": "1.2.4", + "version": "1.2.10", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381" + "reference": "40f9cf38c05296bd32f444121336a521a293fa61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381", - "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/40f9cf38c05296bd32f444121336a521a293fa61", + "reference": "40f9cf38c05296bd32f444121336a521a293fa61", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11.11" + "phpstan/phpstan": "^1.12.5" }, "conflict": { "rector/rector-doctrine": "*", @@ -6947,7 +6949,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.2.4" + "source": "https://github.com/rectorphp/rector/tree/1.2.10" }, "funding": [ { @@ -6955,7 +6957,7 @@ "type": "github" } ], - "time": "2024-08-23T09:03:01+00:00" + "time": "2024-11-08T13:59:10+00:00" }, { "name": "sanmai/later", @@ -7023,16 +7025,16 @@ }, { "name": "sanmai/pipeline", - "version": "v6.11", + "version": "6.12", "source": { "type": "git", "url": "https://github.com/sanmai/pipeline.git", - "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110" + "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", - "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/ad7dbc3f773eeafb90d5459522fbd8f188532e25", + "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25", "shasum": "" }, "require": { @@ -7076,7 +7078,7 @@ "description": "General-purpose collections pipeline", "support": { "issues": "https://github.com/sanmai/pipeline/issues", - "source": "https://github.com/sanmai/pipeline/tree/v6.11" + "source": "https://github.com/sanmai/pipeline/tree/6.12" }, "funding": [ { @@ -7084,7 +7086,7 @@ "type": "github" } ], - "time": "2024-06-15T03:11:19+00:00" + "time": "2024-10-17T02:22:57+00:00" }, { "name": "sebastian/cli-parser", @@ -8049,6 +8051,152 @@ ], "time": "2020-09-28T06:39:44+00:00" }, + { + "name": "shish/safe", + "version": "v2.6.3", + "source": { + "type": "git", + "url": "https://github.com/shish/safe.git", + "reference": "88c2cf506c6b497cd2a961c5e8116a18c5c272c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/shish/safe/zipball/88c2cf506c6b497cd2a961c5e8116a18c5c272c0", + "reference": "88c2cf506c6b497cd2a961c5e8116a18c5c272c0", + "shasum": "" + }, + "require": { + "php": ">= 8.2" + }, + "replace": { + "thecodingmachine/safe": "2.5.0" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpunit/phpunit": "^10.0 || ^11.0", + "squizlabs/php_codesniffer": "^3", + "thecodingmachine/phpstan-strict-rules": "^1.0" + }, + "type": "library", + "autoload": { + "files": [ + "deprecated/apc.php", + "deprecated/array.php", + "deprecated/datetime.php", + "deprecated/libevent.php", + "deprecated/misc.php", + "deprecated/password.php", + "deprecated/mssql.php", + "deprecated/stats.php", + "deprecated/strings.php", + "lib/special_cases.php", + "deprecated/mysqli.php", + "generated/apache.php", + "generated/apcu.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gettext.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/mysql.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rnp.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ], + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "deprecated/Exceptions/", + "generated/Exceptions/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error (a less-abandoned fork of thecodingmachine/safe)", + "support": { + "issues": "https://github.com/shish/safe/issues", + "source": "https://github.com/shish/safe/tree/v2.6.3" + }, + "funding": [ + { + "url": "https://github.com/shish", + "type": "github" + }, + { + "url": "https://ko-fi.com/shish2k", + "type": "ko_fi" + } + ], + "time": "2024-10-08T20:21:12+00:00" + }, { "name": "slevomat/coding-standard", "version": "8.15.0", @@ -8116,16 +8264,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.2", + "version": "3.11.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" + "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", - "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1368f4a58c3c52114b86b1abe8f4098869cb0079", + "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079", "shasum": "" }, "require": { @@ -8192,20 +8340,20 @@ "type": "open_collective" } ], - "time": "2024-07-21T23:26:44+00:00" + "time": "2024-12-11T16:04:26+00:00" }, { "name": "symfony/browser-kit", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "9c13742e3175b5815e272b981876ae329bec2040" + "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9c13742e3175b5815e272b981876ae329bec2040", - "reference": "9c13742e3175b5815e272b981876ae329bec2040", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/714becc9ba9b20115ffededc58f6b7172dc394cf", + "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf", "shasum": "" }, "require": { @@ -8244,7 +8392,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.1.1" + "source": "https://github.com/symfony/browser-kit/tree/v7.1.6" }, "funding": [ { @@ -8260,20 +8408,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-10-25T15:11:02+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", "shasum": "" }, "require": { @@ -8309,7 +8457,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.1" + "source": "https://github.com/symfony/css-selector/tree/v7.1.6" }, "funding": [ { @@ -8325,20 +8473,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/dom-crawler", - "version": "v7.1.1", + "version": "v7.1.9", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa" + "reference": "fd006641cf28ab702684b8cb0645bea95bc1691a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/01ce8174447f1f1dd33a5854b01beef79061d9fa", - "reference": "01ce8174447f1f1dd33a5854b01beef79061d9fa", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/fd006641cf28ab702684b8cb0645bea95bc1691a", + "reference": "fd006641cf28ab702684b8cb0645bea95bc1691a", "shasum": "" }, "require": { @@ -8376,7 +8524,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.1.1" + "source": "https://github.com/symfony/dom-crawler/tree/v7.1.9" }, "funding": [ { @@ -8392,7 +8540,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-11-13T15:09:09+00:00" }, { "name": "symfony/maker-bundle", @@ -8488,16 +8636,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v7.1.4", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" + "reference": "2bbde92ab25a0e2c88160857af7be9db5da0d145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", - "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/2bbde92ab25a0e2c88160857af7be9db5da0d145", + "reference": "2bbde92ab25a0e2c88160857af7be9db5da0d145", "shasum": "" }, "require": { @@ -8517,8 +8665,8 @@ "type": "symfony-bridge", "extra": { "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" + "url": "https://github.com/sebastianbergmann/phpunit", + "name": "phpunit/phpunit" } }, "autoload": { @@ -8550,7 +8698,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4" + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.2.0" }, "funding": [ { @@ -8566,20 +8714,20 @@ "type": "tidelift" } ], - "time": "2024-08-13T14:28:19+00:00" + "time": "2024-11-13T16:15:23+00:00" }, { "name": "symfony/process", - "version": "v7.1.3", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", + "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", "shasum": "" }, "require": { @@ -8611,7 +8759,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.3" + "source": "https://github.com/symfony/process/tree/v7.1.8" }, "funding": [ { @@ -8627,7 +8775,7 @@ "type": "tidelift" } ], - "time": "2024-07-26T12:44:47+00:00" + "time": "2024-11-06T14:23:19+00:00" }, { "name": "symplify/config-transformer", @@ -8673,16 +8821,16 @@ }, { "name": "symplify/easy-coding-standard", - "version": "12.3.5", + "version": "12.5.4", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03" + "reference": "5673ecbc03eef9d7b2f563819c80e8e1ce0161be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", - "reference": "0d7c2cfee3debdf11c12135e90d69d1d9f4eef03", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5673ecbc03eef9d7b2f563819c80e8e1ce0161be", + "reference": "5673ecbc03eef9d7b2f563819c80e8e1ce0161be", "shasum": "" }, "require": { @@ -8718,7 +8866,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.3.5" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.4" }, "funding": [ { @@ -8730,146 +8878,7 @@ "type": "github" } ], - "time": "2024-08-08T08:43:50+00:00" - }, - { - "name": "thecodingmachine/safe", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/thecodingmachine/safe.git", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "files": [ - "deprecated/apc.php", - "deprecated/array.php", - "deprecated/datetime.php", - "deprecated/libevent.php", - "deprecated/misc.php", - "deprecated/password.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "deprecated/strings.php", - "lib/special_cases.php", - "deprecated/mysqli.php", - "generated/apache.php", - "generated/apcu.php", - "generated/array.php", - "generated/bzip2.php", - "generated/calendar.php", - "generated/classobj.php", - "generated/com.php", - "generated/cubrid.php", - "generated/curl.php", - "generated/datetime.php", - "generated/dir.php", - "generated/eio.php", - "generated/errorfunc.php", - "generated/exec.php", - "generated/fileinfo.php", - "generated/filesystem.php", - "generated/filter.php", - "generated/fpm.php", - "generated/ftp.php", - "generated/funchand.php", - "generated/gettext.php", - "generated/gmp.php", - "generated/gnupg.php", - "generated/hash.php", - "generated/ibase.php", - "generated/ibmDb2.php", - "generated/iconv.php", - "generated/image.php", - "generated/imap.php", - "generated/info.php", - "generated/inotify.php", - "generated/json.php", - "generated/ldap.php", - "generated/libxml.php", - "generated/lzf.php", - "generated/mailparse.php", - "generated/mbstring.php", - "generated/misc.php", - "generated/mysql.php", - "generated/network.php", - "generated/oci8.php", - "generated/opcache.php", - "generated/openssl.php", - "generated/outcontrol.php", - "generated/pcntl.php", - "generated/pcre.php", - "generated/pgsql.php", - "generated/posix.php", - "generated/ps.php", - "generated/pspell.php", - "generated/readline.php", - "generated/rpminfo.php", - "generated/rrd.php", - "generated/sem.php", - "generated/session.php", - "generated/shmop.php", - "generated/sockets.php", - "generated/sodium.php", - "generated/solr.php", - "generated/spl.php", - "generated/sqlsrv.php", - "generated/ssdeep.php", - "generated/ssh2.php", - "generated/stream.php", - "generated/strings.php", - "generated/swoole.php", - "generated/uodbc.php", - "generated/uopz.php", - "generated/url.php", - "generated/var.php", - "generated/xdiff.php", - "generated/xml.php", - "generated/xmlrpc.php", - "generated/yaml.php", - "generated/yaz.php", - "generated/zip.php", - "generated/zlib.php" - ], - "classmap": [ - "lib/DateTime.php", - "lib/DateTimeImmutable.php", - "lib/Exceptions/", - "deprecated/Exceptions/", - "generated/Exceptions/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP core functions that throw exceptions instead of returning FALSE on error", - "support": { - "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" - }, - "time": "2023-04-05T11:54:14+00:00" + "time": "2024-12-12T15:36:04+00:00" }, { "name": "theseer/tokenizer", @@ -8982,7 +8991,7 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -8990,7 +8999,7 @@ "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": [], + "platform-dev": {}, "platform-overrides": { "php": "8.3" }, diff --git a/src/Controller/FoodOrderController.php b/src/Controller/FoodOrderController.php index 250c2e4..81b72d5 100644 --- a/src/Controller/FoodOrderController.php +++ b/src/Controller/FoodOrderController.php @@ -44,7 +44,7 @@ final class FoodOrderController extends AbstractController $prevPage = $page - 1; $itemsPerPage = 10; $count = $foodOrderRepository->count(); - if($count < $page * $itemsPerPage) { + if ($count < $page * $itemsPerPage) { $nextPage = $page; } From a974688872bd038b1de7e946b08205367260ddbd Mon Sep 17 00:00:00 2001 From: lubiana Date: Wed, 18 Dec 2024 14:30:24 +0100 Subject: [PATCH 16/66] update workflow image --- .forgejo/workflows/pull_request.yml | 2 +- .forgejo/workflows/push.yml | 2 +- .forgejo/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/pull_request.yml b/.forgejo/workflows/pull_request.yml index 19f4777..dd18b5b 100644 --- a/.forgejo/workflows/pull_request.yml +++ b/.forgejo/workflows/pull_request.yml @@ -3,7 +3,7 @@ jobs: ls: runs-on: docker container: - image: git.php.fail/lubiana/container/php:ci + image: git.php.fail/lubiana/container/php:8.4.1-ci steps: - name: Manually checkout env: diff --git a/.forgejo/workflows/push.yml b/.forgejo/workflows/push.yml index 97a0662..42aad3b 100644 --- a/.forgejo/workflows/push.yml +++ b/.forgejo/workflows/push.yml @@ -6,7 +6,7 @@ jobs: ls: runs-on: docker container: - image: git.php.fail/lubiana/container/php:ci + image: git.php.fail/lubiana/container/php:8.4.1-ci steps: - name: Manually checkout env: diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index dec7fe1..d036f12 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -4,7 +4,7 @@ jobs: ls: runs-on: docker container: - image: git.php.fail/lubiana/container/php:ci + image: git.php.fail/lubiana/container/php:8.4.1-ci steps: - name: Manually checkout env: From cb1ab0ed181e528bdc6726a92b5ea78afdb54ef4 Mon Sep 17 00:00:00 2001 From: lubiana Date: Thu, 19 Dec 2024 00:35:23 +0100 Subject: [PATCH 17/66] improve unit tests --- tests/Controller/FoodOrderControllerTest.php | 39 ++++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/tests/Controller/FoodOrderControllerTest.php b/tests/Controller/FoodOrderControllerTest.php index a7c222e..1e46b47 100644 --- a/tests/Controller/FoodOrderControllerTest.php +++ b/tests/Controller/FoodOrderControllerTest.php @@ -137,10 +137,10 @@ final class FoodOrderControllerTest extends DbWebTest } /** - * @testWith [1, 0, 1] - * [2, 1, 1] - * [3, 1, 1] - * [4, 1, 0, 5] + * @testWith [1, 0, 2] + * [2, 1, 3] + * [3, 2, 4] + * [4, 3, 0, 5] */ public function testPaginatedFirstPage(int $page, int $prevPage, int $nextPage, int $items = 10): void { @@ -154,22 +154,27 @@ final class FoodOrderControllerTest extends DbWebTest $items, 'nobody' ); - $this->assertElementContainsCount( - $crawler, - 'a', - $nextPage, - 'next page' - ); - $this->assertElementContainsCount( - $crawler, - 'a', - $prevPage, - 'previous page' - ); + if ($prevPage > 0) { + if ($prevPage === 1) { + $prevPage = ''; + } else { + $prevPage = "/{$prevPage}"; + } + + $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'previous page')->first(); + $target = $node->attr('href'); + $this->assertTrue(str_ends_with($target, $prevPage)); + } + if ($prevPage > 3) { + $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'next page')->first(); + $target = $node->attr('href'); + $this->assertTrue(str_ends_with($target, "/{$nextPage}")); + } } public function testNew(): void { + $this->client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie('username', 'Testing-1')); $this->client->request('GET', sprintf('%snew', $this->path)); self::assertResponseStatusCodeSame(200); @@ -180,6 +185,8 @@ final class FoodOrderControllerTest extends DbWebTest self::assertResponseRedirects("{$this->path}list"); self::assertSame(1, $this->repository->count([])); + $order = $this->repository->findOneBy(['createdBy' => 'Testing-1']); + assert($order instanceof FoodOrder); } public function testOpen(): void From 2d3100b5c944b865d54ad3563cf3b21ab553b39f Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Wed, 18 Dec 2024 23:38:27 +0000 Subject: [PATCH 18/66] Continuous Integration Fixes --- tests/Controller/FoodOrderControllerTest.php | 29 ++++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/Controller/FoodOrderControllerTest.php b/tests/Controller/FoodOrderControllerTest.php index 1e46b47..3abd8a2 100644 --- a/tests/Controller/FoodOrderControllerTest.php +++ b/tests/Controller/FoodOrderControllerTest.php @@ -8,10 +8,13 @@ use App\Entity\MenuItem; use App\Entity\OrderItem; use App\Tests\DbWebTest; use Override; +use Symfony\Component\BrowserKit\Cookie; use Symfony\Component\DomCrawler\Crawler; +use function assert; use function range; use function sprintf; +use function str_ends_with; final class FoodOrderControllerTest extends DbWebTest { @@ -155,26 +158,26 @@ final class FoodOrderControllerTest extends DbWebTest 'nobody' ); if ($prevPage > 0) { - if ($prevPage === 1) { - $prevPage = ''; - } else { - $prevPage = "/{$prevPage}"; - } - - $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'previous page')->first(); + $prevPage = $prevPage === 1 ? '' : "/{$prevPage}"; + $node = $crawler->filter('a') + ->reduce(static fn(Crawler $node, $i): bool => $node->text() === 'previous page') + ->first(); $target = $node->attr('href'); - $this->assertTrue(str_ends_with($target, $prevPage)); + $this->assertTrue(str_ends_with((string) $target, $prevPage)); } if ($prevPage > 3) { - $node = $crawler->filter('a')->reduce(fn(Crawler $node, $i): bool => $node->text() === 'next page')->first(); + $node = $crawler->filter('a') + ->reduce(static fn(Crawler $node, $i): bool => $node->text() === 'next page') + ->first(); $target = $node->attr('href'); - $this->assertTrue(str_ends_with($target, "/{$nextPage}")); + $this->assertTrue(str_ends_with((string) $target, "/{$nextPage}")); } } public function testNew(): void { - $this->client->getCookieJar()->set(new \Symfony\Component\BrowserKit\Cookie('username', 'Testing-1')); + $this->client->getCookieJar() + ->set(new Cookie('username', 'Testing-1')); $this->client->request('GET', sprintf('%snew', $this->path)); self::assertResponseStatusCodeSame(200); @@ -185,7 +188,9 @@ final class FoodOrderControllerTest extends DbWebTest self::assertResponseRedirects("{$this->path}list"); self::assertSame(1, $this->repository->count([])); - $order = $this->repository->findOneBy(['createdBy' => 'Testing-1']); + $order = $this->repository->findOneBy([ + 'createdBy' => 'Testing-1', + ]); assert($order instanceof FoodOrder); } From b65a4814f4dd0b5e3629ddd4a32aca71c43b5935 Mon Sep 17 00:00:00 2001 From: lubiana Date: Thu, 19 Dec 2024 01:11:09 +0100 Subject: [PATCH 19/66] #64: wip add phonenumberfield to foodvendor --- migrations/Version20241218235101.php | 35 +++++++++++++++++++ src/Controller/FoodVendorController.php | 7 ++-- src/Entity/FoodVendor.php | 16 +++++++++ src/Form/FoodVendorType.php | 1 + tests/Controller/FoodVendorControllerTest.php | 16 +++++++++ tests/Entity/FoodVendorTest.php | 3 ++ 6 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 migrations/Version20241218235101.php diff --git a/migrations/Version20241218235101.php b/migrations/Version20241218235101.php new file mode 100644 index 0000000..86337fa --- /dev/null +++ b/migrations/Version20241218235101.php @@ -0,0 +1,35 @@ +addSql('ALTER TABLE food_vendor ADD COLUMN phone VARCHAR(50) DEFAULT \'\''); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TEMPORARY TABLE __temp__food_vendor AS SELECT name, menu_link, id FROM food_vendor'); + $this->addSql('DROP TABLE food_vendor'); + $this->addSql('CREATE TABLE food_vendor (name VARCHAR(50) NOT NULL, menu_link VARCHAR(255) DEFAULT NULL, id BLOB NOT NULL, PRIMARY KEY(id))'); + $this->addSql('INSERT INTO food_vendor (name, menu_link, id) SELECT name, menu_link, id FROM __temp__food_vendor'); + $this->addSql('DROP TABLE __temp__food_vendor'); + } +} diff --git a/src/Controller/FoodVendorController.php b/src/Controller/FoodVendorController.php index 0cb790a..283eae9 100644 --- a/src/Controller/FoodVendorController.php +++ b/src/Controller/FoodVendorController.php @@ -23,8 +23,10 @@ final class FoodVendorController extends AbstractController } #[Route('/new', name: 'app_food_vendor_new', methods: ['GET', 'POST'])] - public function new(Request $request, EntityManagerInterface $entityManager): Response - { + public function new( + Request $request, + EntityManagerInterface $entityManager + ): Response { $foodVendor = new FoodVendor; $form = $this->createForm(FoodVendorType::class, $foodVendor); $form->handleRequest($request); @@ -63,7 +65,6 @@ final class FoodVendorController extends AbstractController } return $this->render('food_vendor/edit.html.twig', [ - 'food_vendor' => $foodVendor, 'form' => $form, ]); } diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index b688136..749aa63 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -16,6 +16,11 @@ class FoodVendor #[ORM\Column(length: 50)] private string|null $name = null; + #[ORM\Column(length: 50, nullable: true, options: [ + 'default' => "", + ])] + private string|null $phone = null; + /** * @var Collection */ @@ -131,4 +136,15 @@ class FoodVendor return $this; } + + public function getPhone(): string|null + { + return $this->phone; + } + + public function setPhone(string|null $phone): static + { + $this->phone = $phone; + return $this; + } } diff --git a/src/Form/FoodVendorType.php b/src/Form/FoodVendorType.php index 9c155f6..7ff61da 100644 --- a/src/Form/FoodVendorType.php +++ b/src/Form/FoodVendorType.php @@ -16,6 +16,7 @@ final class FoodVendorType extends AbstractType $builder ->add('name') ->add('menuLink') + ->add('phone') ; } diff --git a/tests/Controller/FoodVendorControllerTest.php b/tests/Controller/FoodVendorControllerTest.php index b475fa1..5e50526 100644 --- a/tests/Controller/FoodVendorControllerTest.php +++ b/tests/Controller/FoodVendorControllerTest.php @@ -114,6 +114,8 @@ final class FoodVendorControllerTest extends DbWebTest { $fixture = new FoodVendor; $fixture->setName('Value'); + $fixture->setMenuLink('Value'); + $fixture->setPhone('Value'); $this->manager->persist($fixture); $this->manager->flush(); @@ -125,10 +127,23 @@ final class FoodVendorControllerTest extends DbWebTest ->attr('value', ''), 'Value' ); + $this->assertSame( + $crawler->filter('#food_vendor_menuLink') + ->last() + ->attr('value', ''), + 'Value' + ); + $this->assertSame( + $crawler->filter('#food_vendor_phone') + ->last() + ->attr('value', ''), + 'Value' + ); $this->client->submitForm('Update', [ 'food_vendor[name]' => 'Something New', 'food_vendor[menuLink]' => 'https://example.com/', + 'food_vendor[phone]' => '1234567890', ]); self::assertResponseRedirects('/food/vendor/'); @@ -137,6 +152,7 @@ final class FoodVendorControllerTest extends DbWebTest self::assertSame('Something New', $fixture[0]->getName()); self::assertSame('https://example.com/', $fixture[0]->getMenuLink()); + self::assertSame('1234567890', $fixture[0]->getPhone()); } #[Override] diff --git a/tests/Entity/FoodVendorTest.php b/tests/Entity/FoodVendorTest.php index daa90c6..7fcd698 100644 --- a/tests/Entity/FoodVendorTest.php +++ b/tests/Entity/FoodVendorTest.php @@ -16,6 +16,9 @@ final class FoodVendorTest extends TestCase $vendor->setName('Test'); $this->assertEquals('Test', $vendor->getName()); $this->assertInstanceOf(Ulid::class, $vendor->getId()); + $this->assertEmpty($vendor->getPhone()); + $vendor->setPhone('1234567890'); + $this->assertEquals('1234567890', $vendor->getPhone()); $this->assertCount(0, $vendor->getFoodOrders()); $order1 = new FoodOrder; From 86986310ad525ac43e6c1e0b949d9d6a01f57baf Mon Sep 17 00:00:00 2001 From: lubiana Date: Thu, 19 Dec 2024 01:13:44 +0100 Subject: [PATCH 20/66] add phone number to orderview --- templates/food_order/show.html.twig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/food_order/show.html.twig b/templates/food_order/show.html.twig index 48f4b01..1c2ba47 100644 --- a/templates/food_order/show.html.twig +++ b/templates/food_order/show.html.twig @@ -11,6 +11,10 @@ Vendor {{ food_order.foodVendor.name }} + + Vendorphone + {{ food_order.foodVendor.phone }} + Created By {{ food_order.createdBy }} From 70b39515ec51e02afa611870d6aa7405f7870423 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Thu, 19 Dec 2024 00:16:09 +0000 Subject: [PATCH 21/66] Continuous Integration Fixes --- src/Entity/FoodVendor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index 749aa63..514668f 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -17,7 +17,7 @@ class FoodVendor private string|null $name = null; #[ORM\Column(length: 50, nullable: true, options: [ - 'default' => "", + 'default' => '', ])] private string|null $phone = null; From 9781bd561fd5f4a7ed7a445c762948edd9bb0723 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 02:14:39 +0100 Subject: [PATCH 22/66] add menuitem aliases --- composer.json | 7 +- composer.lock | 667 +++++++++++++++++-------- config/bundles.php | 10 + config/packages/web_profiler.php | 29 ++ config/routes/web_profiler.php | 12 + migrations/Version20250124234947.php | 42 ++ src/Controller/OrderItemController.php | 5 + src/DataFixtures/AppFixtures.php | 50 ++ src/Entity/MenuItem.php | 55 +- src/Form/MenuItemType.php | 14 + symfony.lock | 25 + templates/food_vendor/show.html.twig | 3 + templates/menu_item/show.html.twig | 6 + 13 files changed, 713 insertions(+), 212 deletions(-) create mode 100644 config/packages/web_profiler.php create mode 100644 config/routes/web_profiler.php create mode 100644 migrations/Version20250124234947.php create mode 100644 src/DataFixtures/AppFixtures.php diff --git a/composer.json b/composer.json index 4a14071..26536f6 100644 --- a/composer.json +++ b/composer.json @@ -25,6 +25,7 @@ "symfony/yaml": "7.1.*" }, "require-dev": { + "doctrine/doctrine-fixtures-bundle": "^4.0", "infection/infection": "^0.29.6", "lubiana/code-quality": "^1.7.2", "phpunit/phpunit": "^9.6.20", @@ -32,6 +33,8 @@ "symfony/css-selector": "7.1.*", "symfony/maker-bundle": "^1.60", "symfony/phpunit-bridge": "^7.1.3", + "symfony/stopwatch": "7.1.*", + "symfony/web-profiler-bundle": "7.1.*", "symplify/config-transformer": "^12.3.4" }, "config": { @@ -44,7 +47,7 @@ }, "sort-packages": true, "platform": { - "php": "8.3" + "php": "8.4" } }, "autoload": { @@ -77,7 +80,7 @@ ], "post-update-cmd": [ "@auto-scripts", - "config-transformer switch-format config" + "config-transformer config" ], "lint": [ "rector", diff --git a/composer.lock b/composer.lock index 53bd064..cac5a36 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bc40af7a698e5c0c5eb44b337b8b1274", + "content-hash": "e74bca4cf24591156c8e0bb40befa8bc", "packages": [ { "name": "doctrine/cache", @@ -187,16 +187,16 @@ }, { "name": "doctrine/dbal", - "version": "4.2.1", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", "shasum": "" }, "require": { @@ -209,16 +209,14 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.12.6", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.30", - "psalm/plugin-phpunit": "0.19.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "10.5.39", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^6.3.8|^7.0", - "symfony/console": "^5.4|^6.3|^7.0", - "vimeo/psalm": "5.25.0" + "symfony/console": "^5.4|^6.3|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -275,7 +273,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.2.1" + "source": "https://github.com/doctrine/dbal/tree/4.2.2" }, "funding": [ { @@ -291,7 +289,7 @@ "type": "tidelift" } ], - "time": "2024-10-10T18:01:27+00:00" + "time": "2025-01-16T08:40:56+00:00" }, { "name": "doctrine/deprecations", @@ -340,16 +338,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.13.1", + "version": "2.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "2740ad8b8739b39ab37d409c972b092f632b025a" + "reference": "2363c43d9815a11657e452625cd64172d5587486" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2740ad8b8739b39ab37d409c972b092f632b025a", - "reference": "2740ad8b8739b39ab37d409c972b092f632b025a", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2363c43d9815a11657e452625cd64172d5587486", + "reference": "2363c43d9815a11657e452625cd64172d5587486", "shasum": "" }, "require": { @@ -363,7 +361,7 @@ "symfony/console": "^5.4 || ^6.0 || ^7.0", "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.46 || ^6.4.3 || ^7.0.3", + "symfony/doctrine-bridge": "^5.4.46 || ~6.3.12 || ^6.4.3 || ^7.0.3", "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", "symfony/polyfill-php80": "^1.15", "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" @@ -379,13 +377,14 @@ "doctrine/deprecations": "^1.0", "doctrine/orm": "^2.17 || ^3.0", "friendsofphp/proxy-manager-lts": "^1.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^5", "psr/log": "^1.1.4 || ^2.0 || ^3.0", "symfony/phpunit-bridge": "^6.1 || ^7.0", "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/proxy-manager-bridge": "^5.4 || ^6.0", "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", "symfony/string": "^5.4 || ^6.0 || ^7.0", @@ -394,8 +393,7 @@ "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0", - "vimeo/psalm": "^5.15" + "twig/twig": "^1.34 || ^2.12 || ^3.0" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -440,7 +438,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.1" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.2" }, "funding": [ { @@ -456,26 +454,26 @@ "type": "tidelift" } ], - "time": "2024-11-08T23:27:54+00:00" + "time": "2025-01-15T11:12:38+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.3.1", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0" + "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", - "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/a5c5fe0d2c6b911c03555046febb05a05a347078", + "reference": "a5c5fe0d2c6b911c03555046febb05a05a347078", "shasum": "" }, "require": { "doctrine/doctrine-bundle": "^2.4", "doctrine/migrations": "^3.2", - "php": "^7.2|^8.0", + "php": "^7.2 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" }, @@ -483,27 +481,21 @@ "composer/semver": "^3.0", "doctrine/coding-standard": "^12", "doctrine/orm": "^2.6 || ^3", - "doctrine/persistence": "^2.0 || ^3 ", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^8.5|^9.5", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^3 || ^5", + "doctrine/persistence": "^2.0 || ^3", + "phpstan/phpstan": "^1.4 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpstan/phpstan-symfony": "^1.3 || ^2", + "phpunit/phpunit": "^8.5 || ^9.5", "symfony/phpunit-bridge": "^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6 || ^7", - "vimeo/psalm": "^4.30 || ^5.15" + "symfony/var-exporter": "^5.4 || ^6 || ^7" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -532,7 +524,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.3.1" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.0" }, "funding": [ { @@ -548,7 +540,7 @@ "type": "tidelift" } ], - "time": "2024-05-14T20:32:18+00:00" + "time": "2025-01-16T20:28:10+00:00" }, { "name": "doctrine/event-manager", @@ -984,16 +976,16 @@ }, { "name": "doctrine/orm", - "version": "3.3.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "69958152e661aa9c14e80d1ee4962863485aa60b" + "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/69958152e661aa9c14e80d1ee4962863485aa60b", - "reference": "69958152e661aa9c14e80d1ee4962863485aa60b", + "url": "https://api.github.com/repos/doctrine/orm/zipball/b1f8253105aa5382c495e5f9f8ef34e297775428", + "reference": "b1f8253105aa5382c495e5f9f8ef34e297775428", "shasum": "" }, "require": { @@ -1005,7 +997,7 @@ "doctrine/inflector": "^1.4 || ^2.0", "doctrine/instantiator": "^1.3 || ^2", "doctrine/lexer": "^3", - "doctrine/persistence": "^3.3.1", + "doctrine/persistence": "^3.3.1 || ^4", "ext-ctype": "*", "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", @@ -1017,13 +1009,12 @@ "phpbench/phpbench": "^1.0", "phpdocumentor/guides-cli": "^1.4", "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2", + "phpstan/phpstan": "2.0.3", + "phpstan/phpstan-deprecation-rules": "^2", "phpunit/phpunit": "^10.4.0", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4 || ^6.2 || ^7.0", - "vimeo/psalm": "5.24.0" + "symfony/cache": "^5.4 || ^6.2 || ^7.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1069,9 +1060,9 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.3.0" + "source": "https://github.com/doctrine/orm/tree/3.3.1" }, - "time": "2024-10-12T20:07:18+00:00" + "time": "2024-12-19T07:08:14+00:00" }, { "name": "doctrine/persistence", @@ -1171,16 +1162,16 @@ }, { "name": "doctrine/sql-formatter", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "b784cbde727cf806721451dde40eff4fec3bbe86" + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/b784cbde727cf806721451dde40eff4fec3bbe86", - "reference": "b784cbde727cf806721451dde40eff4fec3bbe86", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", "shasum": "" }, "require": { @@ -1190,8 +1181,7 @@ "doctrine/coding-standard": "^12", "ergebnis/phpunit-slow-test-detector": "^2.14", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" + "phpunit/phpunit": "^10.5" }, "bin": [ "bin/sql-formatter" @@ -1221,9 +1211,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.1" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" }, - "time": "2024-10-21T18:21:57+00:00" + "time": "2025-01-24T11:45:48+00:00" }, { "name": "psr/cache", @@ -1592,12 +1582,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1725,16 +1715,16 @@ }, { "name": "symfony/console", - "version": "v7.1.8", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + "reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "url": "https://api.github.com/repos/symfony/console/zipball/bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7", + "reference": "bb06e2d7f8dd9dffe5eada8a5cbe0f68f1482db7", "shasum": "" }, "require": { @@ -1798,7 +1788,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.8" + "source": "https://github.com/symfony/console/tree/v7.1.10" }, "funding": [ { @@ -1814,7 +1804,7 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-12-09T07:30:10+00:00" }, { "name": "symfony/dependency-injection", @@ -1915,12 +1905,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1965,16 +1955,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "893cc4fa0f218d6e88efbe58397e2b42167648e1" + "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/893cc4fa0f218d6e88efbe58397e2b42167648e1", - "reference": "893cc4fa0f218d6e88efbe58397e2b42167648e1", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", + "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", "shasum": "" }, "require": { @@ -2053,7 +2043,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.9" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.10" }, "funding": [ { @@ -2069,7 +2059,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T12:02:18+00:00" + "time": "2024-12-19T14:23:39+00:00" }, { "name": "symfony/dotenv", @@ -2147,16 +2137,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "12cada0720a728acd96346b19e8c7a867071758c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/12cada0720a728acd96346b19e8c7a867071758c", + "reference": "12cada0720a728acd96346b19e8c7a867071758c", "shasum": "" }, "require": { @@ -2202,7 +2192,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.1.10" }, "funding": [ { @@ -2218,7 +2208,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:49:48+00:00" }, { "name": "symfony/event-dispatcher", @@ -2320,12 +2310,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2444,16 +2434,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/b8b526e051ac0b33feabbec7893adcab96b23bf3", + "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3", "shasum": "" }, "require": { @@ -2488,7 +2478,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.1.10" }, "funding": [ { @@ -2504,7 +2494,7 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-12-30T18:59:46+00:00" }, { "name": "symfony/flex", @@ -2673,16 +2663,16 @@ }, { "name": "symfony/framework-bundle", - "version": "v7.1.6", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89" + "reference": "51b99e2307a79640b4c574a81b46ac918d13c89d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d616d762905091e798d64c53ffe3840ccfc3d89", - "reference": "1d616d762905091e798d64c53ffe3840ccfc3d89", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/51b99e2307a79640b4c574a81b46ac918d13c89d", + "reference": "51b99e2307a79640b4c574a81b46ac918d13c89d", "shasum": "" }, "require": { @@ -2801,7 +2791,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.6" + "source": "https://github.com/symfony/framework-bundle/tree/v7.1.10" }, "funding": [ { @@ -2817,20 +2807,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-12-19T14:23:39+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "82765842fb599c7ed839b650214680c7ee5779be" + "reference": "b5567e738aa372e0f3408c40e96bd4bd445bf3a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/82765842fb599c7ed839b650214680c7ee5779be", - "reference": "82765842fb599c7ed839b650214680c7ee5779be", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b5567e738aa372e0f3408c40e96bd4bd445bf3a1", + "reference": "b5567e738aa372e0f3408c40e96bd4bd445bf3a1", "shasum": "" }, "require": { @@ -2878,7 +2868,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.9" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.10" }, "funding": [ { @@ -2894,20 +2884,20 @@ "type": "tidelift" } ], - "time": "2024-11-13T18:58:36+00:00" + "time": "2024-12-16T16:04:34+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45" + "reference": "f4cab1e059b6a0c67b008a81fa1822aa4ed37379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/649d0e23c571344ef1153d4ffb2564f534b85a45", - "reference": "649d0e23c571344ef1153d4ffb2564f534b85a45", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f4cab1e059b6a0c67b008a81fa1822aa4ed37379", + "reference": "f4cab1e059b6a0c67b008a81fa1822aa4ed37379", "shasum": "" }, "require": { @@ -2992,7 +2982,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.9" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.10" }, "funding": [ { @@ -3008,7 +2998,7 @@ "type": "tidelift" } ], - "time": "2024-11-27T12:55:11+00:00" + "time": "2024-12-31T14:55:36+00:00" }, { "name": "symfony/options-resolver", @@ -3705,22 +3695,22 @@ }, { "name": "symfony/property-info", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5" + "reference": "daa1a1c742894ce09a39ae2b68c07029d434c746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", - "reference": "e9a7b2a4984457c3849afd2b1a1ec7f2994cb1b5", + "url": "https://api.github.com/repos/symfony/property-info/zipball/daa1a1c742894ce09a39ae2b68c07029d434c746", + "reference": "daa1a1c742894ce09a39ae2b68c07029d434c746", "shasum": "" }, "require": { "php": ">=8.2", "symfony/string": "^6.4|^7.0", - "symfony/type-info": "^7.1" + "symfony/type-info": "~7.1.9|^7.2.2" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", @@ -3768,7 +3758,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.9" + "source": "https://github.com/symfony/property-info/tree/v7.1.10" }, "funding": [ { @@ -3784,7 +3774,7 @@ "type": "tidelift" } ], - "time": "2024-11-27T09:50:41+00:00" + "time": "2024-12-31T11:04:25+00:00" }, { "name": "symfony/routing", @@ -4124,12 +4114,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4351,12 +4341,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -4412,16 +4402,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01" + "reference": "c027c54611cd194273b924c8d24d9706695171ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", - "reference": "67ea8a59432307efb0fdcae0d8512e7c4a9e4c01", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c027c54611cd194273b924c8d24d9706695171ff", + "reference": "c027c54611cd194273b924c8d24d9706695171ff", "shasum": "" }, "require": { @@ -4501,7 +4491,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.9" + "source": "https://github.com/symfony/twig-bridge/tree/v7.1.10" }, "funding": [ { @@ -4517,7 +4507,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T12:02:18+00:00" + "time": "2024-12-19T14:23:39+00:00" }, { "name": "symfony/twig-bundle", @@ -4605,16 +4595,16 @@ }, { "name": "symfony/type-info", - "version": "v7.1.8", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6" + "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/51535dde21c7abf65c9d000a30bb15f6478195e6", - "reference": "51535dde21c7abf65c9d000a30bb15f6478195e6", + "url": "https://api.github.com/repos/symfony/type-info/zipball/8f980bdd1d6a2834503afbfcf3f39de8133e48fe", + "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe", "shasum": "" }, "require": { @@ -4667,7 +4657,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.8" + "source": "https://github.com/symfony/type-info/tree/v7.1.10" }, "funding": [ { @@ -4683,7 +4673,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T15:49:33+00:00" + "time": "2024-12-11T12:11:39+00:00" }, { "name": "symfony/uid", @@ -4761,16 +4751,16 @@ }, { "name": "symfony/validator", - "version": "v7.1.9", + "version": "v7.1.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "ff71d77da404c700f8b05ba426eb9e6f8d22771b" + "reference": "216b0d1ccfedeb800cbc2f336ed6effaca7164de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/ff71d77da404c700f8b05ba426eb9e6f8d22771b", - "reference": "ff71d77da404c700f8b05ba426eb9e6f8d22771b", + "url": "https://api.github.com/repos/symfony/validator/zipball/216b0d1ccfedeb800cbc2f336ed6effaca7164de", + "reference": "216b0d1ccfedeb800cbc2f336ed6effaca7164de", "shasum": "" }, "require": { @@ -4838,7 +4828,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.9" + "source": "https://github.com/symfony/validator/tree/v7.1.10" }, "funding": [ { @@ -4854,7 +4844,7 @@ "type": "tidelift" } ], - "time": "2024-11-27T09:50:41+00:00" + "time": "2024-12-30T18:35:03+00:00" }, { "name": "symfony/var-dumper", @@ -5088,16 +5078,16 @@ }, { "name": "twig/twig", - "version": "v3.17.1", + "version": "v3.18.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71" + "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/677ef8da6497a03048192aeeb5aa3018e379ac71", - "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", + "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", "shasum": "" }, "require": { @@ -5152,7 +5142,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.17.1" + "source": "https://github.com/twigphp/Twig/tree/v3.18.0" }, "funding": [ { @@ -5164,7 +5154,7 @@ "type": "tidelift" } ], - "time": "2024-12-12T09:58:10+00:00" + "time": "2024-12-29T10:51:50+00:00" } ], "packages-dev": [ @@ -5283,13 +5273,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-main": "3.x-dev" } }, "autoload": { @@ -5479,6 +5469,175 @@ }, "time": "2023-01-05T11:28:13+00:00" }, + { + "name": "doctrine/data-fixtures", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f7f1e12d6bceb58c204b3e77210a103c1c57601e", + "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e", + "shasum": "" + }, + "require": { + "doctrine/persistence": "^3.1 || ^4.0", + "php": "^8.1", + "psr/log": "^1.1 || ^2 || ^3" + }, + "conflict": { + "doctrine/dbal": "<3.5 || >=5", + "doctrine/orm": "<2.14 || >=4", + "doctrine/phpcr-odm": "<1.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "doctrine/dbal": "^3.5 || ^4", + "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", + "doctrine/orm": "^2.14 || ^3", + "ext-sqlite3": "*", + "fig/log-test": "^1", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5.3", + "symfony/cache": "^6.4 || ^7", + "symfony/var-exporter": "^6.4 || ^7" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "For using MongoDB ODM 1.3 with PHP 7 (deprecated)", + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\DataFixtures\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "database" + ], + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/2.0.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2025-01-21T13:21:31+00:00" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "90185317e6bb3d845667c5ebd444d9c83ae19a01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/90185317e6bb3d845667c5ebd444d9c83ae19a01", + "reference": "90185317e6bb3d845667c5ebd444d9c83ae19a01", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "^2.0", + "doctrine/doctrine-bundle": "^2.2", + "doctrine/orm": "^2.14.0 || ^3.0", + "doctrine/persistence": "^2.4 || ^3.0", + "php": "^8.1", + "psr/log": "^2 || ^3", + "symfony/config": "^5.4 || ^6.0 || ^7.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/doctrine-bridge": "^5.4.48 || ^6.4.16 || ^7.1.9", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "doctrine/dbal": "< 3" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.5.38 || ^11" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Doctrine Project", + "homepage": "https://www.doctrine-project.org" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "https://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/4.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-fixtures-bundle", + "type": "tidelift" + } + ], + "time": "2024-12-05T18:35:55+00:00" + }, { "name": "fidry/cpu-core-counter", "version": "1.2.0", @@ -6121,16 +6280,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -6173,9 +6332,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "ondram/ci-detector", @@ -6422,16 +6581,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.13", + "version": "1.12.16", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f" + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b469068840cfa031e1deaf2fa1886d00e20680f", - "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e0bb5cb78545aae631220735aa706eac633a6be9", + "reference": "e0bb5cb78545aae631220735aa706eac633a6be9", "shasum": "" }, "require": { @@ -6476,7 +6635,7 @@ "type": "github" } ], - "time": "2024-12-17T17:00:20+00:00" + "time": "2025-01-21T14:50:05+00:00" }, { "name": "phpunit/php-code-coverage", @@ -8053,16 +8212,16 @@ }, { "name": "shish/safe", - "version": "v2.6.3", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/shish/safe.git", - "reference": "88c2cf506c6b497cd2a961c5e8116a18c5c272c0" + "reference": "482e6227330a70b21c1c9e9301cc99b5658ccb89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shish/safe/zipball/88c2cf506c6b497cd2a961c5e8116a18c5c272c0", - "reference": "88c2cf506c6b497cd2a961c5e8116a18c5c272c0", + "url": "https://api.github.com/repos/shish/safe/zipball/482e6227330a70b21c1c9e9301cc99b5658ccb89", + "reference": "482e6227330a70b21c1c9e9301cc99b5658ccb89", "shasum": "" }, "require": { @@ -8093,6 +8252,7 @@ "deprecated/mysqli.php", "generated/apache.php", "generated/apcu.php", + "generated/array.php", "generated/bzip2.php", "generated/calendar.php", "generated/classobj.php", @@ -8183,19 +8343,23 @@ "description": "PHP core functions that throw exceptions instead of returning FALSE on error (a less-abandoned fork of thecodingmachine/safe)", "support": { "issues": "https://github.com/shish/safe/issues", - "source": "https://github.com/shish/safe/tree/v2.6.3" + "source": "https://github.com/shish/safe/tree/v2.6.4" }, "funding": [ + { + "url": "https://github.com/OskarStark", + "type": "github" + }, { "url": "https://github.com/shish", "type": "github" }, { - "url": "https://ko-fi.com/shish2k", - "type": "ko_fi" + "url": "https://github.com/staabm", + "type": "github" } ], - "time": "2024-10-08T20:21:12+00:00" + "time": "2024-12-18T13:36:07+00:00" }, { "name": "slevomat/coding-standard", @@ -8264,16 +8428,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.11.2", + "version": "3.11.3", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079" + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1368f4a58c3c52114b86b1abe8f4098869cb0079", - "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", "shasum": "" }, "require": { @@ -8338,9 +8502,13 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-12-11T16:04:26+00:00" + "time": "2025-01-23T17:04:15+00:00" }, { "name": "symfony/browser-kit", @@ -8544,16 +8712,16 @@ }, { "name": "symfony/maker-bundle", - "version": "v1.61.0", + "version": "v1.62.1", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" + "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/468ff2708200c95ebc0d85d3174b6c6711b8a590", + "reference": "468ff2708200c95ebc0d85d3174b6c6711b8a590", "shasum": "" }, "require": { @@ -8616,7 +8784,7 @@ ], "support": { "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" + "source": "https://github.com/symfony/maker-bundle/tree/v1.62.1" }, "funding": [ { @@ -8632,7 +8800,7 @@ "type": "tidelift" } ], - "time": "2024-08-29T22:50:23+00:00" + "time": "2025-01-15T00:21:40+00:00" }, { "name": "symfony/phpunit-bridge", @@ -8778,17 +8946,98 @@ "time": "2024-11-06T14:23:19+00:00" }, { - "name": "symplify/config-transformer", - "version": "12.3.4", + "name": "symfony/web-profiler-bundle", + "version": "v7.1.10", "source": { "type": "git", - "url": "https://github.com/symplify/config-transformer.git", - "reference": "9fb4f5acf7ec4261ba426bee9eb7aeed174eb600" + "url": "https://github.com/symfony/web-profiler-bundle.git", + "reference": "8bbef1c761814fb73b3c19334a06c5b91a56a79c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symplify/config-transformer/zipball/9fb4f5acf7ec4261ba426bee9eb7aeed174eb600", - "reference": "9fb4f5acf7ec4261ba426bee9eb7aeed174eb600", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8bbef1c761814fb73b3c19334a06c5b91a56a79c", + "reference": "8bbef1c761814fb73b3c19334a06c5b91a56a79c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/config": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/twig-bundle": "^6.4|^7.0", + "twig/twig": "^3.10" + }, + "conflict": { + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4" + }, + "require-dev": { + "symfony/browser-kit": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\Bundle\\WebProfilerBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a development tool that gives detailed information about the execution of any request", + "homepage": "https://symfony.com", + "keywords": [ + "dev" + ], + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-11T07:23:25+00:00" + }, + { + "name": "symplify/config-transformer", + "version": "12.4.0", + "source": { + "type": "git", + "url": "https://github.com/symplify/config-transformer.git", + "reference": "d9a0f2d6c6f80cb0672544ed5273d5e701a3e092" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symplify/config-transformer/zipball/d9a0f2d6c6f80cb0672544ed5273d5e701a3e092", + "reference": "d9a0f2d6c6f80cb0672544ed5273d5e701a3e092", "shasum": "" }, "require": { @@ -8805,7 +9054,7 @@ "description": "Prefixed version of Symfony YAML/XML to PHP/YAML config converter", "support": { "issues": "https://github.com/symplify/config-transformer/issues", - "source": "https://github.com/symplify/config-transformer/tree/12.3.4" + "source": "https://github.com/symplify/config-transformer/tree/12.4.0" }, "funding": [ { @@ -8817,20 +9066,20 @@ "type": "github" } ], - "time": "2024-01-15T21:58:26+00:00" + "time": "2025-01-22T23:08:18+00:00" }, { "name": "symplify/easy-coding-standard", - "version": "12.5.4", + "version": "12.5.5", "source": { "type": "git", "url": "https://github.com/easy-coding-standard/easy-coding-standard.git", - "reference": "5673ecbc03eef9d7b2f563819c80e8e1ce0161be" + "reference": "16a6ac7f452e230fdcc81f1b35b2366903fcecf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/5673ecbc03eef9d7b2f563819c80e8e1ce0161be", - "reference": "5673ecbc03eef9d7b2f563819c80e8e1ce0161be", + "url": "https://api.github.com/repos/easy-coding-standard/easy-coding-standard/zipball/16a6ac7f452e230fdcc81f1b35b2366903fcecf3", + "reference": "16a6ac7f452e230fdcc81f1b35b2366903fcecf3", "shasum": "" }, "require": { @@ -8866,7 +9115,7 @@ ], "support": { "issues": "https://github.com/easy-coding-standard/easy-coding-standard/issues", - "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.4" + "source": "https://github.com/easy-coding-standard/easy-coding-standard/tree/12.5.5" }, "funding": [ { @@ -8878,7 +9127,7 @@ "type": "github" } ], - "time": "2024-12-12T15:36:04+00:00" + "time": "2025-01-02T08:43:03+00:00" }, { "name": "theseer/tokenizer", @@ -9001,7 +9250,7 @@ }, "platform-dev": {}, "platform-overrides": { - "php": "8.3" + "php": "8.4" }, "plugin-api-version": "2.6.0" } diff --git a/config/bundles.php b/config/bundles.php index d43fe1e..d59139e 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -1,10 +1,12 @@ [ @@ -22,4 +24,12 @@ return [ TwigBundle::class => [ 'all' => true, ], + DoctrineFixturesBundle::class => [ + 'dev' => true, + 'test' => true, + ], + WebProfilerBundle::class => [ + 'dev' => true, + 'test' => true, + ], ]; diff --git a/config/packages/web_profiler.php b/config/packages/web_profiler.php new file mode 100644 index 0000000..28614cc --- /dev/null +++ b/config/packages/web_profiler.php @@ -0,0 +1,29 @@ +env() === 'dev') { + $containerConfigurator->extension('web_profiler', [ + 'toolbar' => true, + 'intercept_redirects' => false, + ]); + $containerConfigurator->extension('framework', [ + 'profiler' => [ + 'only_exceptions' => false, + 'collect_serializer_data' => true, + ], + ]); + } + if ($containerConfigurator->env() === 'test') { + $containerConfigurator->extension('web_profiler', [ + 'toolbar' => false, + 'intercept_redirects' => false, + ]); + $containerConfigurator->extension('framework', [ + 'profiler' => [ + 'collect' => false, + ], + ]); + } +}; diff --git a/config/routes/web_profiler.php b/config/routes/web_profiler.php new file mode 100644 index 0000000..6356a1f --- /dev/null +++ b/config/routes/web_profiler.php @@ -0,0 +1,12 @@ +env() === 'dev') { + $routingConfigurator->import('@WebProfilerBundle/Resources/config/routing/wdt.xml') + ->prefix('/_wdt'); + $routingConfigurator->import('@WebProfilerBundle/Resources/config/routing/profiler.xml') + ->prefix('/_profiler'); + } +}; diff --git a/migrations/Version20250124234947.php b/migrations/Version20250124234947.php new file mode 100644 index 0000000..4c9d782 --- /dev/null +++ b/migrations/Version20250124234947.php @@ -0,0 +1,42 @@ +addSql('CREATE TEMPORARY TABLE __temp__menu_item AS SELECT id, name, food_vendor_id, deleted_at FROM menu_item'); + $this->addSql('DROP TABLE menu_item'); + $this->addSql('CREATE TABLE menu_item (id BLOB NOT NULL, name VARCHAR(255) NOT NULL, food_vendor_id BLOB NOT NULL, deleted_at DATETIME DEFAULT NULL, alias_of_id BLOB DEFAULT NULL, PRIMARY KEY(id), CONSTRAINT FK_D754D5506EF983E8 FOREIGN KEY (food_vendor_id) REFERENCES food_vendor (id) ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE, CONSTRAINT FK_D754D55061F0AFC5 FOREIGN KEY (alias_of_id) REFERENCES menu_item (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO menu_item (id, name, food_vendor_id, deleted_at) SELECT id, name, food_vendor_id, deleted_at FROM __temp__menu_item'); + $this->addSql('DROP TABLE __temp__menu_item'); + $this->addSql('CREATE INDEX IDX_D754D5506EF983E8 ON menu_item (food_vendor_id)'); + $this->addSql('CREATE INDEX IDX_D754D55061F0AFC5 ON menu_item (alias_of_id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TEMPORARY TABLE __temp__menu_item AS SELECT name, deleted_at, id, food_vendor_id FROM menu_item'); + $this->addSql('DROP TABLE menu_item'); + $this->addSql('CREATE TABLE menu_item (name VARCHAR(255) NOT NULL, deleted_at DATETIME DEFAULT NULL, id BLOB NOT NULL, food_vendor_id BLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_D754D5506EF983E8 FOREIGN KEY (food_vendor_id) REFERENCES food_vendor (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO menu_item (name, deleted_at, id, food_vendor_id) SELECT name, deleted_at, id, food_vendor_id FROM __temp__menu_item'); + $this->addSql('DROP TABLE __temp__menu_item'); + $this->addSql('CREATE INDEX IDX_D754D5506EF983E8 ON menu_item (food_vendor_id)'); + } +} diff --git a/src/Controller/OrderItemController.php b/src/Controller/OrderItemController.php index ee1ef4b..6cdffda 100644 --- a/src/Controller/OrderItemController.php +++ b/src/Controller/OrderItemController.php @@ -45,6 +45,11 @@ final class OrderItemController extends AbstractController $entityManager->persist($menuItem); } + if ($menuItem->getAliasOf() !== null) { + $menuItem = $menuItem->getAliasOf(); + $orderItem->setName($menuItem->getName()); + } + $orderItem->setMenuItem($menuItem); $orderItem->setFoodOrder($foodOrder); $entityManager->persist($orderItem); diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php new file mode 100644 index 0000000..b392bbb --- /dev/null +++ b/src/DataFixtures/AppFixtures.php @@ -0,0 +1,50 @@ +manager = $manager; + $vendorA = $this->createVendor('Vendor A'); + $this->addMenuItemsToVendor($vendorA); + + $vendorB = $this->createVendor('Vendor B'); + $this->addMenuItemsToVendor($vendorB); + } + + public function createVendor(string $name): FoodVendor + { + $vendorA = new FoodVendor; + $vendorA->setName($name); + $vendorA->setMenuLink('https://vendora.com'); + $vendorA->setPhone('1234567890'); + + $this->manager->persist($vendorA); + $this->manager->flush(); + return $vendorA; + } + + public function addMenuItemsToVendor(FoodVendor $vendor): void + { + foreach (range(1, 10) as $i) { + $item = new MenuItem; + $item->setName("{$vendor->getName()} Item {$i}"); + $item->setFoodVendor($vendor); + $this->manager->persist($item); + $this->manager->flush(); + } + } +} diff --git a/src/Entity/MenuItem.php b/src/Entity/MenuItem.php index 259b175..4430871 100644 --- a/src/Entity/MenuItem.php +++ b/src/Entity/MenuItem.php @@ -4,6 +4,8 @@ namespace App\Entity; use App\Repository\MenuItemRepository; use DateTimeImmutable; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator; use Symfony\Bridge\Doctrine\Types\UlidType; @@ -22,13 +24,24 @@ class MenuItem #[ORM\Column(nullable: true)] private DateTimeImmutable|null $deletedAt = null; + #[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'aliases')] + private self|null $aliasOf = null; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: self::class, mappedBy: 'aliasOf')] + private Collection $aliases; + public function __construct( #[ORM\Id] #[ORM\GeneratedValue(strategy: 'CUSTOM')] #[ORM\Column(type: UlidType::NAME, unique: true)] #[ORM\CustomIdGenerator(class: UlidGenerator::class)] private Ulid|null $id = new Ulid - ) {} + ) { + $this->aliases = new ArrayCollection; + } public function getId(): Ulid|null { @@ -81,4 +94,44 @@ class MenuItem return $this; } + + public function getAliasOf(): self|null + { + return $this->aliasOf; + } + + public function setAliasOf(self|null $aliasOf): static + { + $this->aliasOf = $aliasOf; + + return $this; + } + + /** + * @return Collection + */ + public function getAliases(): Collection + { + return $this->aliases; + } + + public function addAlias(self $alias): static + { + if (! $this->aliases->contains($alias)) { + $this->aliases->add($alias); + $alias->setAliasOf($this); + } + + return $this; + } + + public function removeAlias(self $alias): static + { + // set the owning side to null (unless already changed) + if ($this->aliases->removeElement($alias) && $alias->getAliasOf() === $this) { + $alias->setAliasOf(null); + } + + return $this; + } } diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 4e17044..96a6020 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -3,7 +3,11 @@ namespace App\Form; use App\Entity\MenuItem; +use App\Repository\MenuItemRepository; +use Doctrine\ORM\QueryBuilder; use Override; +use Symfony\Bridge\Doctrine\Form\Type\EntityType; +use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -13,8 +17,18 @@ final class MenuItemType extends AbstractType #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { + $vendor = $options['data']->getFoodVendor(); + $vendorId = $vendor->getId(); $builder ->add('name') + ->add('aliasOf', EntityType::class, [ + 'class' => MenuItem::class, + 'choice_label' => 'name', + 'query_builder' => static fn(MenuItemRepository $repository): QueryBuilder => $repository + ->createQueryBuilder('m') + ->where('m.foodVendor = :vendorId') + ->setParameter(':vendorId', $vendorId, UlidType::NAME), + ]) ; } diff --git a/symfony.lock b/symfony.lock index ff8e7ce..9ad7de1 100644 --- a/symfony.lock +++ b/symfony.lock @@ -13,6 +13,18 @@ "src/Repository/.gitignore" ] }, + "doctrine/doctrine-fixtures-bundle": { + "version": "4.0", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "3.0", + "ref": "1f5514cfa15b947298df4d771e694e578d4c204d" + }, + "files": [ + "src/DataFixtures/AppFixtures.php" + ] + }, "doctrine/doctrine-migrations-bundle": { "version": "3.3", "recipe": { @@ -171,5 +183,18 @@ "files": [ "config/packages/validator.yaml" ] + }, + "symfony/web-profiler-bundle": { + "version": "7.1", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.1", + "ref": "e42b3f0177df239add25373083a564e5ead4e13a" + }, + "files": [ + "config/packages/web_profiler.yaml", + "config/routes/web_profiler.yaml" + ] } } diff --git a/templates/food_vendor/show.html.twig b/templates/food_vendor/show.html.twig index c4f76b4..cac8686 100644 --- a/templates/food_vendor/show.html.twig +++ b/templates/food_vendor/show.html.twig @@ -24,6 +24,9 @@ {% for item in food_vendor.menuItems %}
  • {{ item.name }} + {% if(item.aliasOf) %} + (alias of: {{ item.aliasOf.name }}) + {% endif %}
  • {% endfor %} diff --git a/templates/menu_item/show.html.twig b/templates/menu_item/show.html.twig index 16eefd0..80731e6 100644 --- a/templates/menu_item/show.html.twig +++ b/templates/menu_item/show.html.twig @@ -15,6 +15,12 @@ Name {{ menu_item.name }} + {% if(menu_item.aliasOf) %} + + Alias of + {{ menu_item.aliasOf.name }} + + {% endif %} From 0ce09437a38a52f5784f52faf579934b287e79cf Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 02:27:11 +0100 Subject: [PATCH 23/66] sort and filter menuitems in aliasof select --- src/Form/MenuItemType.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 96a6020..1e9de67 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -27,6 +27,8 @@ final class MenuItemType extends AbstractType 'query_builder' => static fn(MenuItemRepository $repository): QueryBuilder => $repository ->createQueryBuilder('m') ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->orderBy('m.name', 'ASC') ->setParameter(':vendorId', $vendorId, UlidType::NAME), ]) ; From 889ed63bc5ab6385d2aabcae1165621017178d4e Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 02:27:11 +0100 Subject: [PATCH 24/66] sort and filter menuitems in aliasof select --- src/Form/MenuItemType.php | 45 ++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 96a6020..597d590 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -14,24 +14,43 @@ use Symfony\Component\OptionsResolver\OptionsResolver; final class MenuItemType extends AbstractType { - #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { - $vendor = $options['data']->getFoodVendor(); - $vendorId = $vendor->getId(); - $builder - ->add('name') - ->add('aliasOf', EntityType::class, [ + $item = $options['data']; + assert($item instanceof MenuItem); // Ensure it's of the correct type + $vendorId = $item->getFoodVendor()?->getId(); // Use safe navigation operator in case FoodVendor is null + + $builder->add('name'); // Basic field + $builder->add('aliases', EntityType::class, [ 'class' => MenuItem::class, 'choice_label' => 'name', - 'query_builder' => static fn(MenuItemRepository $repository): QueryBuilder => $repository - ->createQueryBuilder('m') - ->where('m.foodVendor = :vendorId') - ->setParameter(':vendorId', $vendorId, UlidType::NAME), - ]) - ; - } + 'multiple' => true, + 'expanded' => true, + 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { + $qb = $repository->createQueryBuilder('m'); + // Build the main query with a NOT EXISTS constraint + $qb + ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->andWhere('m.id != :id') + ->andWhere( + $qb->expr()->notIn('m.id', + $repository->createQueryBuilder('m2') + ->select('m2.id') + ->where('m2.aliasOf != m.id') // Reference m.id in the inner query + ->orWhere('m2.aliasOf IS NOT NULL') + ->getDQL() // The subquery's DQL string + ) + ) + ->orderBy('m.name', 'ASC') + ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type + ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type + + return $qb; + }, + ]); + } #[Override] public function configureOptions(OptionsResolver $resolver): void { From 3a144c5db3d85563b1b15ee14aee96d92b9be02e Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 03:17:07 +0100 Subject: [PATCH 25/66] fix --- src/Form/MenuItemType.php | 58 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 597d590..4d19aab 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -12,8 +12,11 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use function assert; + final class MenuItemType extends AbstractType { + #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { $item = $options['data']; @@ -22,35 +25,38 @@ final class MenuItemType extends AbstractType $builder->add('name'); // Basic field $builder->add('aliases', EntityType::class, [ - 'class' => MenuItem::class, - 'choice_label' => 'name', - 'multiple' => true, - 'expanded' => true, - 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - $qb = $repository->createQueryBuilder('m'); + 'class' => MenuItem::class, + 'choice_label' => 'name', + 'multiple' => true, + 'expanded' => true, + 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { + $qb = $repository->createQueryBuilder('m'); - // Build the main query with a NOT EXISTS constraint - $qb - ->where('m.foodVendor = :vendorId') - ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id') - ->andWhere( - $qb->expr()->notIn('m.id', - $repository->createQueryBuilder('m2') - ->select('m2.id') - ->where('m2.aliasOf != m.id') // Reference m.id in the inner query - ->orWhere('m2.aliasOf IS NOT NULL') - ->getDQL() // The subquery's DQL string - ) - ) - ->orderBy('m.name', 'ASC') - ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type + // Build the main query with a NOT EXISTS constraint + $qb + ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->andWhere('m.id != :id') + ->andWhere( + $qb->expr() + ->notIn( + 'm.id', + $repository->createQueryBuilder('m2') + ->select('m2.id') + ->where('m2.aliasOf != m.id') // Reference m.id in the inner query + ->orWhere('m2.aliasOf IS NOT NULL') + ->getDQL() // The subquery's DQL string + ) + ) + ->orderBy('m.name', 'ASC') + ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type + ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type - return $qb; - }, - ]); + return $qb; + }, + ]); } + #[Override] public function configureOptions(OptionsResolver $resolver): void { From 7b95ed44eeddeddc4809d8bf8b0de1b5f8de8eef Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 02:27:11 +0100 Subject: [PATCH 26/66] sort and filter menuitems in aliasof select --- src/Form/MenuItemType.php | 58 ++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 4d19aab..597d590 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -12,11 +12,8 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use function assert; - final class MenuItemType extends AbstractType { - #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { $item = $options['data']; @@ -25,38 +22,35 @@ final class MenuItemType extends AbstractType $builder->add('name'); // Basic field $builder->add('aliases', EntityType::class, [ - 'class' => MenuItem::class, - 'choice_label' => 'name', - 'multiple' => true, - 'expanded' => true, - 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - $qb = $repository->createQueryBuilder('m'); + 'class' => MenuItem::class, + 'choice_label' => 'name', + 'multiple' => true, + 'expanded' => true, + 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { + $qb = $repository->createQueryBuilder('m'); - // Build the main query with a NOT EXISTS constraint - $qb - ->where('m.foodVendor = :vendorId') - ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id') - ->andWhere( - $qb->expr() - ->notIn( - 'm.id', - $repository->createQueryBuilder('m2') - ->select('m2.id') - ->where('m2.aliasOf != m.id') // Reference m.id in the inner query - ->orWhere('m2.aliasOf IS NOT NULL') - ->getDQL() // The subquery's DQL string - ) - ) - ->orderBy('m.name', 'ASC') - ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type + // Build the main query with a NOT EXISTS constraint + $qb + ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->andWhere('m.id != :id') + ->andWhere( + $qb->expr()->notIn('m.id', + $repository->createQueryBuilder('m2') + ->select('m2.id') + ->where('m2.aliasOf != m.id') // Reference m.id in the inner query + ->orWhere('m2.aliasOf IS NOT NULL') + ->getDQL() // The subquery's DQL string + ) + ) + ->orderBy('m.name', 'ASC') + ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type + ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type - return $qb; - }, - ]); + return $qb; + }, + ]); } - #[Override] public function configureOptions(OptionsResolver $resolver): void { From b0f945f275322c298487bae4bf185d993dc22d92 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 03:17:07 +0100 Subject: [PATCH 27/66] fix --- src/Form/MenuItemType.php | 58 +++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 597d590..4d19aab 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -12,8 +12,11 @@ use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use function assert; + final class MenuItemType extends AbstractType { + #[Override] public function buildForm(FormBuilderInterface $builder, array $options): void { $item = $options['data']; @@ -22,35 +25,38 @@ final class MenuItemType extends AbstractType $builder->add('name'); // Basic field $builder->add('aliases', EntityType::class, [ - 'class' => MenuItem::class, - 'choice_label' => 'name', - 'multiple' => true, - 'expanded' => true, - 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - $qb = $repository->createQueryBuilder('m'); + 'class' => MenuItem::class, + 'choice_label' => 'name', + 'multiple' => true, + 'expanded' => true, + 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { + $qb = $repository->createQueryBuilder('m'); - // Build the main query with a NOT EXISTS constraint - $qb - ->where('m.foodVendor = :vendorId') - ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id') - ->andWhere( - $qb->expr()->notIn('m.id', - $repository->createQueryBuilder('m2') - ->select('m2.id') - ->where('m2.aliasOf != m.id') // Reference m.id in the inner query - ->orWhere('m2.aliasOf IS NOT NULL') - ->getDQL() // The subquery's DQL string - ) - ) - ->orderBy('m.name', 'ASC') - ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type + // Build the main query with a NOT EXISTS constraint + $qb + ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->andWhere('m.id != :id') + ->andWhere( + $qb->expr() + ->notIn( + 'm.id', + $repository->createQueryBuilder('m2') + ->select('m2.id') + ->where('m2.aliasOf != m.id') // Reference m.id in the inner query + ->orWhere('m2.aliasOf IS NOT NULL') + ->getDQL() // The subquery's DQL string + ) + ) + ->orderBy('m.name', 'ASC') + ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type + ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type - return $qb; - }, - ]); + return $qb; + }, + ]); } + #[Override] public function configureOptions(OptionsResolver $resolver): void { From 232878ebfb2751a7dda990d944067f467a59a59f Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 18:07:49 +0100 Subject: [PATCH 28/66] make aliases work --- src/Controller/MenuItemController.php | 11 +++++++++ src/Form/MenuItemType.php | 33 +++++++++++++++------------ 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php index ea91e86..ecf6103 100644 --- a/src/Controller/MenuItemController.php +++ b/src/Controller/MenuItemController.php @@ -28,6 +28,17 @@ final class MenuItemController extends AbstractController $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { + foreach ($menuItem->getFoodVendor()->getMenuItems() as $vendorItem) { + if ($menuItem->getAliases()->contains($vendorItem)) { + $vendorItem->setAliasOf($menuItem); + } elseif ($vendorItem->getAliasOf() === $menuItem) { + $vendorItem->setAliasOf(null); + + } + $entityManager->persist($vendorItem); + } + $entityManager->persist($menuItem); + $entityManager->flush(); return $this->redirectToRoute('app_menu_item_show', [ diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 4d19aab..641cf1b 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -11,7 +11,9 @@ use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\Uid\Ulid; +use function array_map; use function assert; final class MenuItemType extends AbstractType @@ -30,28 +32,29 @@ final class MenuItemType extends AbstractType 'multiple' => true, 'expanded' => true, 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - $qb = $repository->createQueryBuilder('m'); + + $ids = $repository->createQueryBuilder('m') + ->select('DISTINCT IDENTITY(m.aliasOf)') + ->where('m.deletedAt IS NULL') + ->andWhere('m.aliasOf IS NOT NULL') + ->getquery(); + $ids = $ids->getScalarResult(); + $ids = array_map(static fn(array $id): Ulid => Ulid::fromBinary($id[1]), $ids); // Build the main query with a NOT EXISTS constraint + $qb = $repository->createQueryBuilder('m'); $qb ->where('m.foodVendor = :vendorId') ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id') - ->andWhere( - $qb->expr() - ->notIn( - 'm.id', - $repository->createQueryBuilder('m2') - ->select('m2.id') - ->where('m2.aliasOf != m.id') // Reference m.id in the inner query - ->orWhere('m2.aliasOf IS NOT NULL') - ->getDQL() // The subquery's DQL string - ) - ) + ->andWhere('m.id != :id'); + foreach ($ids as $key => $id) { + $qb->andWhere("m.id != :idBy{$key}"); + $qb->setParameter("idBy{$key}", $id, UlidType::NAME); + } + $qb ->orderBy('m.name', 'ASC') ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId(), UlidType::NAME); // ULID or appropriate type - + ->setParameter('id', $item->getId()); // ULID or appropriate type return $qb; }, ]); From eaa723a58bfd8a64d1d2f5f30c2fa07fcea2ac67 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sat, 25 Jan 2025 18:13:47 +0100 Subject: [PATCH 29/66] update symfony --- composer.json | 14 +- composer.lock | 357 +++++++++++++++++++++++++------------------------- 2 files changed, 185 insertions(+), 186 deletions(-) diff --git a/composer.json b/composer.json index 26536f6..0485899 100644 --- a/composer.json +++ b/composer.json @@ -4,7 +4,7 @@ "minimum-stability": "stable", "prefer-stable": true, "require": { - "php": ">=8.3", + "php": ">=8.4", "ext-ctype": "*", "ext-iconv": "*", "doctrine/dbal": "^4.1", @@ -29,12 +29,12 @@ "infection/infection": "^0.29.6", "lubiana/code-quality": "^1.7.2", "phpunit/phpunit": "^9.6.20", - "symfony/browser-kit": "7.1.*", - "symfony/css-selector": "7.1.*", + "symfony/browser-kit": "7.2.*", + "symfony/css-selector": "7.2.*", "symfony/maker-bundle": "^1.60", - "symfony/phpunit-bridge": "^7.1.3", - "symfony/stopwatch": "7.1.*", - "symfony/web-profiler-bundle": "7.1.*", + "symfony/phpunit-bridge": "7.2.*", + "symfony/stopwatch": "7.2.*", + "symfony/web-profiler-bundle": "7.2.*", "symplify/config-transformer": "^12.3.4" }, "config": { @@ -95,7 +95,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "7.1.*" + "require": "7.2.*" } } } diff --git a/composer.lock b/composer.lock index cac5a36..487eb49 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e74bca4cf24591156c8e0bb40befa8bc", + "content-hash": "3d1e7e69822d02e0e2d6e84a5ff14087", "packages": [ { "name": "doctrine/cache", @@ -1467,16 +1467,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.9", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591" + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/18e0ba45a50032aa53dfebf830ec2980bb131591", - "reference": "18e0ba45a50032aa53dfebf830ec2980bb131591", + "url": "https://api.github.com/repos/symfony/cache/zipball/e7e983596b744c4539f31e79b0350a6cf5878a20", + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20", "shasum": "" }, "require": { @@ -1504,6 +1504,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -1544,7 +1545,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.9" + "source": "https://github.com/symfony/cache/tree/v7.2.1" }, "funding": [ { @@ -1560,7 +1561,7 @@ "type": "tidelift" } ], - "time": "2024-11-20T10:42:04+00:00" + "time": "2024-12-07T08:08:50+00:00" }, { "name": "symfony/cache-contracts", @@ -1640,16 +1641,16 @@ }, { "name": "symfony/config", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "url": "https://api.github.com/repos/symfony/config/zipball/bcd3c4adf0144dee5011bb35454728c38adec055", + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055", "shasum": "" }, "require": { @@ -1695,7 +1696,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v7.1.7" + "source": "https://github.com/symfony/config/tree/v7.2.0" }, "funding": [ { @@ -1711,7 +1712,7 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:34:07+00:00" + "time": "2024-11-04T11:36:24+00:00" }, { "name": "symfony/console", @@ -1808,16 +1809,16 @@ }, { "name": "symfony/dependency-injection", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08" + "reference": "a475747af1a1c98272a5471abc35f3da81197c5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900d2eac6e33aef743bdc10dd8c75d012215fd08", - "reference": "900d2eac6e33aef743bdc10dd8c75d012215fd08", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/a475747af1a1c98272a5471abc35f3da81197c5d", + "reference": "a475747af1a1c98272a5471abc35f3da81197c5d", "shasum": "" }, "require": { @@ -1868,7 +1869,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.9" + "source": "https://github.com/symfony/dependency-injection/tree/v7.2.0" }, "funding": [ { @@ -1884,7 +1885,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:44:54+00:00" + "time": "2024-11-25T15:45:00+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1955,16 +1956,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609" + "reference": "f12195479a55b77bc8427b48443b966622f4a18b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", - "reference": "e8bb28f54741c0eb91ff7bc07f3abf5ebd4a3609", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/f12195479a55b77bc8427b48443b966622f4a18b", + "reference": "f12195479a55b77bc8427b48443b966622f4a18b", "shasum": "" }, "require": { @@ -1977,6 +1978,7 @@ "symfony/service-contracts": "^2.5|^3" }, "conflict": { + "doctrine/collections": "<1.8", "doctrine/dbal": "<3.6", "doctrine/lexer": "<1.1", "doctrine/orm": "<2.15", @@ -1993,7 +1995,7 @@ "symfony/validator": "<6.4" }, "require-dev": { - "doctrine/collections": "^1.0|^2.0", + "doctrine/collections": "^1.8|^2.0", "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^3.6|^4", "doctrine/orm": "^2.15|^3", @@ -2043,7 +2045,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.10" + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.2.2" }, "funding": [ { @@ -2059,7 +2061,7 @@ "type": "tidelift" } ], - "time": "2024-12-19T14:23:39+00:00" + "time": "2024-12-19T14:25:03+00:00" }, { "name": "symfony/dotenv", @@ -2137,16 +2139,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.10", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "12cada0720a728acd96346b19e8c7a867071758c" + "reference": "6150b89186573046167796fa5f3f76601d5145f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/12cada0720a728acd96346b19e8c7a867071758c", - "reference": "12cada0720a728acd96346b19e8c7a867071758c", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", + "reference": "6150b89186573046167796fa5f3f76601d5145f8", "shasum": "" }, "require": { @@ -2192,7 +2194,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.10" + "source": "https://github.com/symfony/error-handler/tree/v7.2.1" }, "funding": [ { @@ -2208,20 +2210,20 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:49:48+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -2272,7 +2274,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -2288,7 +2290,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -2368,16 +2370,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { @@ -2414,7 +2416,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -2430,20 +2432,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/b8b526e051ac0b33feabbec7893adcab96b23bf3", - "reference": "b8b526e051ac0b33feabbec7893adcab96b23bf3", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -2478,7 +2480,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.10" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -2494,7 +2496,7 @@ "type": "tidelift" } ], - "time": "2024-12-30T18:59:46+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/flex", @@ -2811,20 +2813,21 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b5567e738aa372e0f3408c40e96bd4bd445bf3a1" + "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b5567e738aa372e0f3408c40e96bd4bd445bf3a1", - "reference": "b5567e738aa372e0f3408c40e96bd4bd445bf3a1", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -2868,7 +2871,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.10" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.2" }, "funding": [ { @@ -2884,20 +2887,20 @@ "type": "tidelift" } ], - "time": "2024-12-16T16:04:34+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f4cab1e059b6a0c67b008a81fa1822aa4ed37379" + "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f4cab1e059b6a0c67b008a81fa1822aa4ed37379", - "reference": "f4cab1e059b6a0c67b008a81fa1822aa4ed37379", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", + "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", "shasum": "" }, "require": { @@ -2926,7 +2929,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -2954,7 +2957,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -2982,7 +2985,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.10" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.2" }, "funding": [ { @@ -2998,20 +3001,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T14:55:36+00:00" + "time": "2024-12-31T14:59:40+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "0f4099f5306a92487d13b2a4589068c36a93c447" + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/0f4099f5306a92487d13b2a4589068c36a93c447", - "reference": "0f4099f5306a92487d13b2a4589068c36a93c447", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", "shasum": "" }, "require": { @@ -3049,7 +3052,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.9" + "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" }, "funding": [ { @@ -3065,20 +3068,20 @@ "type": "tidelift" } ], - "time": "2024-11-20T11:08:58+00:00" + "time": "2024-11-20T11:17:29+00:00" }, { "name": "symfony/password-hasher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5" + "reference": "d8bd3d66d074c0acba1214a0d42f5941a8e1e94d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/2e618d1af51805e5a1fbda326d00b77c6c1037d5", - "reference": "2e618d1af51805e5a1fbda326d00b77c6c1037d5", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/d8bd3d66d074c0acba1214a0d42f5941a8e1e94d", + "reference": "d8bd3d66d074c0acba1214a0d42f5941a8e1e94d", "shasum": "" }, "require": { @@ -3121,7 +3124,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v7.1.6" + "source": "https://github.com/symfony/password-hasher/tree/v7.2.0" }, "funding": [ { @@ -3137,7 +3140,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -3619,16 +3622,16 @@ }, { "name": "symfony/property-access", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9" + "reference": "3ae42efba01e45aaedecf5c93c8d6a3ab3a82276" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/975d7f7fd8fcb952364c6badc46d01a580532bf9", - "reference": "975d7f7fd8fcb952364c6badc46d01a580532bf9", + "url": "https://api.github.com/repos/symfony/property-access/zipball/3ae42efba01e45aaedecf5c93c8d6a3ab3a82276", + "reference": "3ae42efba01e45aaedecf5c93c8d6a3ab3a82276", "shasum": "" }, "require": { @@ -3675,7 +3678,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.6" + "source": "https://github.com/symfony/property-access/tree/v7.2.0" }, "funding": [ { @@ -3691,20 +3694,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-26T12:28:35+00:00" }, { "name": "symfony/property-info", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "daa1a1c742894ce09a39ae2b68c07029d434c746" + "reference": "1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/daa1a1c742894ce09a39ae2b68c07029d434c746", - "reference": "daa1a1c742894ce09a39ae2b68c07029d434c746", + "url": "https://api.github.com/repos/symfony/property-info/zipball/1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf", + "reference": "1dfeb0dac7a99f7b3be42db9ccc299c5a6483fcf", "shasum": "" }, "require": { @@ -3758,7 +3761,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.10" + "source": "https://github.com/symfony/property-info/tree/v7.2.2" }, "funding": [ { @@ -3774,20 +3777,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T11:04:25+00:00" + "time": "2024-12-31T11:04:50+00:00" }, { "name": "symfony/routing", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", - "reference": "a27bb8e0cc3ca4baf17159d053910c9736c3aa4c", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -3839,7 +3842,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.9" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -3855,7 +3858,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T16:12:35+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/runtime", @@ -3938,20 +3941,21 @@ }, { "name": "symfony/security-core", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "294426c17d484f47a576ca092c132f3afba17a19" + "reference": "fdbf318b939a86f89b0c071f60b9d551261d3cc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/294426c17d484f47a576ca092c132f3afba17a19", - "reference": "294426c17d484f47a576ca092c132f3afba17a19", + "url": "https://api.github.com/repos/symfony/security-core/zipball/fdbf318b939a86f89b0c071f60b9d551261d3cc1", + "reference": "fdbf318b939a86f89b0c071f60b9d551261d3cc1", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher-contracts": "^2.5|^3", "symfony/password-hasher": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" @@ -4004,7 +4008,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.9" + "source": "https://github.com/symfony/security-core/tree/v7.2.0" }, "funding": [ { @@ -4020,7 +4024,7 @@ "type": "tidelift" } ], - "time": "2024-11-27T09:50:41+00:00" + "time": "2024-11-27T09:50:52+00:00" }, { "name": "symfony/security-csrf", @@ -4175,16 +4179,16 @@ }, { "name": "symfony/stopwatch", - "version": "v7.1.6", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05" + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8b4a434e6e7faf6adedffb48783a5c75409a1a05", - "reference": "8b4a434e6e7faf6adedffb48783a5c75409a1a05", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/e46690d5b9d7164a6d061cab1e8d46141b9f49df", + "reference": "e46690d5b9d7164a6d061cab1e8d46141b9f49df", "shasum": "" }, "require": { @@ -4217,7 +4221,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.1.6" + "source": "https://github.com/symfony/stopwatch/tree/v7.2.2" }, "funding": [ { @@ -4233,20 +4237,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-12-18T14:28:33+00:00" }, { "name": "symfony/string", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -4304,7 +4308,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.8" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -4320,7 +4324,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:21+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation-contracts", @@ -4402,22 +4406,23 @@ }, { "name": "symfony/twig-bridge", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "c027c54611cd194273b924c8d24d9706695171ff" + "reference": "29e4c66de9618e67dc1f5f13bc667aca2a228f1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/c027c54611cd194273b924c8d24d9706695171ff", - "reference": "c027c54611cd194273b924c8d24d9706695171ff", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/29e4c66de9618e67dc1f5f13bc667aca2a228f1e", + "reference": "29e4c66de9618e67dc1f5f13bc667aca2a228f1e", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^3.9" + "twig/twig": "^3.12" }, "conflict": { "phpdocumentor/reflection-docblock": "<3.2.2", @@ -4491,7 +4496,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.10" + "source": "https://github.com/symfony/twig-bridge/tree/v7.2.2" }, "funding": [ { @@ -4507,7 +4512,7 @@ "type": "tidelift" } ], - "time": "2024-12-19T14:23:39+00:00" + "time": "2024-12-19T14:25:03+00:00" }, { "name": "symfony/twig-bundle", @@ -4595,31 +4600,24 @@ }, { "name": "symfony/type-info", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/type-info.git", - "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe" + "reference": "3b5a17470fff0034f25fd4287cbdaa0010d2f749" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/8f980bdd1d6a2834503afbfcf3f39de8133e48fe", - "reference": "8f980bdd1d6a2834503afbfcf3f39de8133e48fe", + "url": "https://api.github.com/repos/symfony/type-info/zipball/3b5a17470fff0034f25fd4287cbdaa0010d2f749", + "reference": "3b5a17470fff0034f25fd4287cbdaa0010d2f749", "shasum": "" }, "require": { "php": ">=8.2", "psr/container": "^1.1|^2.0" }, - "conflict": { - "phpstan/phpdoc-parser": "<1.0", - "symfony/dependency-injection": "<6.4", - "symfony/property-info": "<6.4" - }, "require-dev": { - "phpstan/phpdoc-parser": "^1.0|^2.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0" + "phpstan/phpdoc-parser": "^1.0|^2.0" }, "type": "library", "autoload": { @@ -4657,7 +4655,7 @@ "type" ], "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.10" + "source": "https://github.com/symfony/type-info/tree/v7.2.2" }, "funding": [ { @@ -4673,7 +4671,7 @@ "type": "tidelift" } ], - "time": "2024-12-11T12:11:39+00:00" + "time": "2024-12-20T13:38:37+00:00" }, { "name": "symfony/uid", @@ -4848,16 +4846,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -4873,7 +4871,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -4911,7 +4909,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -4927,20 +4925,20 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:46:42+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "90173ef89c40e7c8c616653241048705f84130ef" + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", - "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a6a89f95a46af0f142874c9d650a6358d13070d", + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d", "shasum": "" }, "require": { @@ -4987,7 +4985,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { @@ -5003,7 +5001,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-18T07:58:17+00:00" }, { "name": "symfony/yaml", @@ -8512,16 +8510,16 @@ }, { "name": "symfony/browser-kit", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf" + "reference": "8d64d17e198082f8f198d023a6b634e7b5fdda94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/714becc9ba9b20115ffededc58f6b7172dc394cf", - "reference": "714becc9ba9b20115ffededc58f6b7172dc394cf", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/8d64d17e198082f8f198d023a6b634e7b5fdda94", + "reference": "8d64d17e198082f8f198d023a6b634e7b5fdda94", "shasum": "" }, "require": { @@ -8560,7 +8558,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.1.6" + "source": "https://github.com/symfony/browser-kit/tree/v7.2.0" }, "funding": [ { @@ -8576,20 +8574,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -8625,7 +8623,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -8641,20 +8639,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/dom-crawler", - "version": "v7.1.9", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "fd006641cf28ab702684b8cb0645bea95bc1691a" + "reference": "b176e1f1f550ef44c94eb971bf92488de08f7c6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/fd006641cf28ab702684b8cb0645bea95bc1691a", - "reference": "fd006641cf28ab702684b8cb0645bea95bc1691a", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b176e1f1f550ef44c94eb971bf92488de08f7c6b", + "reference": "b176e1f1f550ef44c94eb971bf92488de08f7c6b", "shasum": "" }, "require": { @@ -8692,7 +8690,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.1.9" + "source": "https://github.com/symfony/dom-crawler/tree/v7.2.0" }, "funding": [ { @@ -8708,7 +8706,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T15:09:09+00:00" + "time": "2024-11-13T16:15:23+00:00" }, { "name": "symfony/maker-bundle", @@ -8886,16 +8884,16 @@ }, { "name": "symfony/process", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -8927,7 +8925,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.8" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -8943,20 +8941,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v7.1.10", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "8bbef1c761814fb73b3c19334a06c5b91a56a79c" + "reference": "5d37d9bd86ab49bd94c57e18e601e27fb6760f2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/8bbef1c761814fb73b3c19334a06c5b91a56a79c", - "reference": "8bbef1c761814fb73b3c19334a06c5b91a56a79c", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/5d37d9bd86ab49bd94c57e18e601e27fb6760f2c", + "reference": "5d37d9bd86ab49bd94c57e18e601e27fb6760f2c", "shasum": "" }, "require": { @@ -8966,12 +8964,13 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/routing": "^6.4|^7.0", "symfony/twig-bundle": "^6.4|^7.0", - "twig/twig": "^3.10" + "twig/twig": "^3.12" }, "conflict": { "symfony/form": "<6.4", "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4" + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2" }, "require-dev": { "symfony/browser-kit": "^6.4|^7.0", @@ -9008,7 +9007,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.10" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.2.2" }, "funding": [ { @@ -9024,7 +9023,7 @@ "type": "tidelift" } ], - "time": "2024-12-11T07:23:25+00:00" + "time": "2024-12-11T15:34:14+00:00" }, { "name": "symplify/config-transformer", @@ -9244,7 +9243,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": ">=8.3", + "php": ">=8.4", "ext-ctype": "*", "ext-iconv": "*" }, From 0aa25d107bb5c1c8ceb148deaedf8ff07270d761 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sun, 26 Jan 2025 11:48:16 +0100 Subject: [PATCH 30/66] improve coverage, remove infection --- .forgejo/workflows/pull_request.yml | 14 +- .forgejo/workflows/push.yml | 2 +- composer.json | 10 +- composer.lock | 1211 +---------------- src/Form/MenuItemType.php | 40 +- src/Repository/MenuItemRepository.php | 49 +- templates/menu_item/show.html.twig | 12 + tests/Controller/FoodVendorControllerTest.php | 8 +- tests/Controller/MenuItemControllerTest.php | 106 +- tests/Entity/MenuItemTest.php | 25 + 10 files changed, 160 insertions(+), 1317 deletions(-) diff --git a/.forgejo/workflows/pull_request.yml b/.forgejo/workflows/pull_request.yml index dd18b5b..6bbc920 100644 --- a/.forgejo/workflows/pull_request.yml +++ b/.forgejo/workflows/pull_request.yml @@ -23,19 +23,7 @@ jobs: - name: lint run: composer lint - name: test - run: composer mutation - - name: Add comment to pull request - run: | - echo '```' >> /tmp/pull-request-comment - cat var/log/infection.txt >> /tmp/pull-request-comment - cat var/log/summary.log >> /tmp/pull-request-comment - echo '```' >> /tmp/pull-request-comment - jq -n --arg msg "$(cat /tmp/pull-request-comment)" '{"body": $msg}' > /tmp/git-msg - curl -X POST \ - -H "Authorization: token ${GITHUB_TOKEN}" \ - -H "Content-Type: application/json" \ - -d @/tmp/git-msg \ - "${{ env.GITHUB_SERVER_URL }}/api/v1/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" + run: composer test - name: GIT commit and push all changed files env: CI_COMMIT_MESSAGE: Continuous Integration Fixes diff --git a/.forgejo/workflows/push.yml b/.forgejo/workflows/push.yml index 42aad3b..b4a5837 100644 --- a/.forgejo/workflows/push.yml +++ b/.forgejo/workflows/push.yml @@ -27,7 +27,7 @@ jobs: - name: lint run: composer lint - name: test - run: composer mutation + run: composer test - name: GIT commit and push all changed files env: CI_COMMIT_MESSAGE: Continuous Integration Fixes diff --git a/composer.json b/composer.json index 0485899..003b2b5 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,6 @@ }, "require-dev": { "doctrine/doctrine-fixtures-bundle": "^4.0", - "infection/infection": "^0.29.6", "lubiana/code-quality": "^1.7.2", "phpunit/phpunit": "^9.6.20", "symfony/browser-kit": "7.2.*", @@ -42,8 +41,7 @@ "php-http/discovery": true, "symfony/flex": true, "symfony/runtime": true, - "dealerdirect/phpcodesniffer-composer-installer": true, - "infection/extension-installer": true + "dealerdirect/phpcodesniffer-composer-installer": true }, "sort-packages": true, "platform": { @@ -68,7 +66,8 @@ "symfony/polyfill-php74": "*", "symfony/polyfill-php80": "*", "symfony/polyfill-php81": "*", - "symfony/polyfill-php82": "*" + "symfony/polyfill-php82": "*", + "symfony/polyfill-php83": "*" }, "scripts": { "auto-scripts": { @@ -86,8 +85,7 @@ "rector", "ecs --fix || ecs --fix" ], - "test": "bin/phpunit", - "mutation": "infection --threads=8 --show-mutations" + "test": "bin/phpunit" }, "conflict": { "symfony/symfony": "*" diff --git a/composer.lock b/composer.lock index 487eb49..2d25c27 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3d1e7e69822d02e0e2d6e84a5ff14087", + "content-hash": "9914f982d0228ab4735cb683fe2cb7e4", "packages": [ { "name": "doctrine/cache", @@ -3465,82 +3465,6 @@ ], "time": "2024-09-09T11:45:10+00:00" }, - { - "name": "symfony/polyfill-php83", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, { "name": "symfony/polyfill-uuid", "version": "v1.31.0", @@ -5156,239 +5080,6 @@ } ], "packages-dev": [ - { - "name": "colinodell/json5", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/colinodell/json5.git", - "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/colinodell/json5/zipball/5724d21bc5c910c2560af1b8915f0cc0163579c8", - "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0" - }, - "require-dev": { - "mikehaertl/php-shellcommand": "^1.7.0", - "phpstan/phpstan": "^1.10.57", - "scrutinizer/ocular": "^1.9", - "squizlabs/php_codesniffer": "^3.8.1", - "symfony/finder": "^6.0|^7.0", - "symfony/phpunit-bridge": "^7.0.3" - }, - "bin": [ - "bin/json5" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "files": [ - "src/global.php" - ], - "psr-4": { - "ColinODell\\Json5\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Developer" - } - ], - "description": "UTF-8 compatible JSON5 parser for PHP", - "homepage": "https://github.com/colinodell/json5", - "keywords": [ - "JSON5", - "json", - "json5_decode", - "json_decode" - ], - "support": { - "issues": "https://github.com/colinodell/json5/issues", - "source": "https://github.com/colinodell/json5/tree/v3.0.0" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - } - ], - "time": "2024-02-09T13:06:12+00:00" - }, - { - "name": "composer/pcre", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<1.11.10" - }, - "require-dev": { - "phpstan/phpstan": "^1.12 || ^2", - "phpstan/phpstan-strict-rules": "^1 || ^2", - "phpunit/phpunit": "^8 || ^9" - }, - "type": "library", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-11-12T16:29:46+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+00:00" - }, { "name": "dealerdirect/phpcodesniffer-composer-installer", "version": "v1.0.0", @@ -5636,490 +5327,6 @@ ], "time": "2024-12-05T18:35:55+00:00" }, - { - "name": "fidry/cpu-core-counter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2024-08-06T10:04:20+00:00" - }, - { - "name": "infection/abstract-testframework-adapter", - "version": "0.5.0", - "source": { - "type": "git", - "url": "https://github.com/infection/abstract-testframework-adapter.git", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", - "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^2.17", - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Infection\\AbstractTestFramework\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Maks Rafalko", - "email": "maks.rafalko@gmail.com" - } - ], - "description": "Abstract Test Framework Adapter for Infection", - "support": { - "issues": "https://github.com/infection/abstract-testframework-adapter/issues", - "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" - }, - "funding": [ - { - "url": "https://github.com/infection", - "type": "github" - }, - { - "url": "https://opencollective.com/infection", - "type": "open_collective" - } - ], - "time": "2021-08-17T18:49:12+00:00" - }, - { - "name": "infection/extension-installer", - "version": "0.1.2", - "source": { - "type": "git", - "url": "https://github.com/infection/extension-installer.git", - "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", - "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2.0" - }, - "require-dev": { - "composer/composer": "^1.9 || ^2.0", - "friendsofphp/php-cs-fixer": "^2.18, <2.19", - "infection/infection": "^0.15.2", - "php-coveralls/php-coveralls": "^2.4", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.10", - "phpstan/phpstan-phpunit": "^0.12.6", - "phpstan/phpstan-strict-rules": "^0.12.2", - "phpstan/phpstan-webmozart-assert": "^0.12.2", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.8" - }, - "type": "composer-plugin", - "extra": { - "class": "Infection\\ExtensionInstaller\\Plugin" - }, - "autoload": { - "psr-4": { - "Infection\\ExtensionInstaller\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Maks Rafalko", - "email": "maks.rafalko@gmail.com" - } - ], - "description": "Infection Extension Installer", - "support": { - "issues": "https://github.com/infection/extension-installer/issues", - "source": "https://github.com/infection/extension-installer/tree/0.1.2" - }, - "funding": [ - { - "url": "https://github.com/infection", - "type": "github" - }, - { - "url": "https://opencollective.com/infection", - "type": "open_collective" - } - ], - "time": "2021-10-20T22:08:34+00:00" - }, - { - "name": "infection/include-interceptor", - "version": "0.2.5", - "source": { - "type": "git", - "url": "https://github.com/infection/include-interceptor.git", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", - "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", - "shasum": "" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "infection/infection": "^0.15.0", - "phan/phan": "^2.4 || ^3", - "php-coveralls/php-coveralls": "^2.2", - "phpstan/phpstan": "^0.12.8", - "phpunit/phpunit": "^8.5", - "vimeo/psalm": "^3.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Infection\\StreamWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Maks Rafalko", - "email": "maks.rafalko@gmail.com" - } - ], - "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", - "support": { - "issues": "https://github.com/infection/include-interceptor/issues", - "source": "https://github.com/infection/include-interceptor/tree/0.2.5" - }, - "funding": [ - { - "url": "https://github.com/infection", - "type": "github" - }, - { - "url": "https://opencollective.com/infection", - "type": "open_collective" - } - ], - "time": "2021-08-09T10:03:57+00:00" - }, - { - "name": "infection/infection", - "version": "0.29.10", - "source": { - "type": "git", - "url": "https://github.com/infection/infection.git", - "reference": "cac7d20e5d286a37488527e477f5a695a9d7a44c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/cac7d20e5d286a37488527e477f5a695a9d7a44c", - "reference": "cac7d20e5d286a37488527e477f5a695a9d7a44c", - "shasum": "" - }, - "require": { - "colinodell/json5": "^2.2 || ^3.0", - "composer-runtime-api": "^2.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "fidry/cpu-core-counter": "^0.4.0 || ^0.5.0 || ^1.0", - "infection/abstract-testframework-adapter": "^0.5.0", - "infection/extension-installer": "^0.1.0", - "infection/include-interceptor": "^0.2.5", - "infection/mutator": "^0.4", - "justinrainbow/json-schema": "^5.3", - "nikic/php-parser": "^5.3", - "ondram/ci-detector": "^4.1.0", - "php": "^8.2", - "sanmai/later": "^0.1.1", - "sanmai/pipeline": "^5.1 || ^6", - "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", - "shish/safe": "^2.6", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "webmozart/assert": "^1.11" - }, - "conflict": { - "antecedent/patchwork": "<2.1.25", - "dg/bypass-finals": "<1.4.1", - "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" - }, - "require-dev": { - "ext-simplexml": "*", - "fidry/makefile": "^1.0", - "helmich/phpunit-json-assert": "^3.0", - "phpstan/extension-installer": "^1.1.0", - "phpstan/phpstan": "^1.10.15", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpstan/phpstan-webmozart-assert": "^1.0.2", - "phpunit/phpunit": "^10.5", - "rector/rector": "^1.0", - "sidz/phpstan-rules": "^0.4", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/infection" - ], - "type": "library", - "autoload": { - "psr-4": { - "Infection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Maks Rafalko", - "email": "maks.rafalko@gmail.com", - "homepage": "https://twitter.com/maks_rafalko" - }, - { - "name": "Oleg Zhulnev", - "homepage": "https://github.com/sidz" - }, - { - "name": "Gert de Pagter", - "homepage": "https://github.com/BackEndTea" - }, - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com", - "homepage": "https://twitter.com/tfidry" - }, - { - "name": "Alexey Kopytko", - "email": "alexey@kopytko.com", - "homepage": "https://www.alexeykopytko.com" - }, - { - "name": "Andreas Möller", - "email": "am@localheinz.com", - "homepage": "https://localheinz.com" - } - ], - "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", - "keywords": [ - "coverage", - "mutant", - "mutation framework", - "mutation testing", - "testing", - "unit testing" - ], - "support": { - "issues": "https://github.com/infection/infection/issues", - "source": "https://github.com/infection/infection/tree/0.29.10" - }, - "funding": [ - { - "url": "https://github.com/infection", - "type": "github" - }, - { - "url": "https://opencollective.com/infection", - "type": "open_collective" - } - ], - "time": "2024-12-17T19:11:10+00:00" - }, - { - "name": "infection/mutator", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/infection/mutator.git", - "reference": "51d6d01a2357102030aee9d603063c4bad86b144" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/infection/mutator/zipball/51d6d01a2357102030aee9d603063c4bad86b144", - "reference": "51d6d01a2357102030aee9d603063c4bad86b144", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^10" - }, - "type": "library", - "autoload": { - "psr-4": { - "Infection\\Mutator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Maks Rafalko", - "email": "maks.rafalko@gmail.com" - } - ], - "description": "Mutator interface to implement custom mutators (mutation operators) for Infection", - "support": { - "issues": "https://github.com/infection/mutator/issues", - "source": "https://github.com/infection/mutator/tree/0.4.0" - }, - "funding": [ - { - "url": "https://github.com/infection", - "type": "github" - }, - { - "url": "https://opencollective.com/infection", - "type": "open_collective" - } - ], - "time": "2024-05-14T22:39:59+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" - }, - "time": "2024-07-06T21:00:26+00:00" - }, { "name": "lubiana/code-quality", "version": "1.7.2", @@ -6334,84 +5541,6 @@ }, "time": "2024-12-30T11:07:19+00:00" }, - { - "name": "ondram/ci-detector", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/OndraM/ci-detector.git", - "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", - "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.13.2", - "lmc/coding-standard": "^3.0.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.1.0", - "phpstan/phpstan": "^1.2.0", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpunit/phpunit": "^9.6.13" - }, - "type": "library", - "autoload": { - "psr-4": { - "OndraM\\CiDetector\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ondřej Machulda", - "email": "ondrej.machulda@gmail.com" - } - ], - "description": "Detect continuous integration environment and provide unified access to properties of current build", - "keywords": [ - "CircleCI", - "Codeship", - "Wercker", - "adapter", - "appveyor", - "aws", - "aws codebuild", - "azure", - "azure devops", - "azure pipelines", - "bamboo", - "bitbucket", - "buddy", - "ci-info", - "codebuild", - "continuous integration", - "continuousphp", - "devops", - "drone", - "github", - "gitlab", - "interface", - "jenkins", - "pipelines", - "sourcehut", - "teamcity", - "travis" - ], - "support": { - "issues": "https://github.com/OndraM/ci-detector/issues", - "source": "https://github.com/OndraM/ci-detector/tree/4.2.0" - }, - "time": "2024-03-12T13:22:30+00:00" - }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -7116,135 +6245,6 @@ ], "time": "2024-11-08T13:59:10+00:00" }, - { - "name": "sanmai/later", - "version": "0.1.4", - "source": { - "type": "git", - "url": "https://github.com/sanmai/later.git", - "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", - "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^3.35.1", - "infection/infection": ">=0.27.6", - "phan/phan": ">=2", - "php-coveralls/php-coveralls": "^2.0", - "phpstan/phpstan": ">=1.4.5", - "phpunit/phpunit": ">=9.5 <10", - "vimeo/psalm": ">=2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.1.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Later\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Alexey Kopytko", - "email": "alexey@kopytko.com" - } - ], - "description": "Later: deferred wrapper object", - "support": { - "issues": "https://github.com/sanmai/later/issues", - "source": "https://github.com/sanmai/later/tree/0.1.4" - }, - "funding": [ - { - "url": "https://github.com/sanmai", - "type": "github" - } - ], - "time": "2023-10-24T00:25:28+00:00" - }, - { - "name": "sanmai/pipeline", - "version": "6.12", - "source": { - "type": "git", - "url": "https://github.com/sanmai/pipeline.git", - "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sanmai/pipeline/zipball/ad7dbc3f773eeafb90d5459522fbd8f188532e25", - "reference": "ad7dbc3f773eeafb90d5459522fbd8f188532e25", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.8", - "friendsofphp/php-cs-fixer": "^3.17", - "infection/infection": ">=0.10.5", - "league/pipeline": "^0.3 || ^1.0", - "phan/phan": ">=1.1", - "php-coveralls/php-coveralls": "^2.4.1", - "phpstan/phpstan": ">=0.10", - "phpunit/phpunit": ">=9.4", - "vimeo/psalm": ">=2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v6.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Pipeline\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Alexey Kopytko", - "email": "alexey@kopytko.com" - } - ], - "description": "General-purpose collections pipeline", - "support": { - "issues": "https://github.com/sanmai/pipeline/issues", - "source": "https://github.com/sanmai/pipeline/tree/6.12" - }, - "funding": [ - { - "url": "https://github.com/sanmai", - "type": "github" - } - ], - "time": "2024-10-17T02:22:57+00:00" - }, { "name": "sebastian/cli-parser", "version": "1.0.2", @@ -8208,157 +7208,6 @@ ], "time": "2020-09-28T06:39:44+00:00" }, - { - "name": "shish/safe", - "version": "v2.6.4", - "source": { - "type": "git", - "url": "https://github.com/shish/safe.git", - "reference": "482e6227330a70b21c1c9e9301cc99b5658ccb89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/shish/safe/zipball/482e6227330a70b21c1c9e9301cc99b5658ccb89", - "reference": "482e6227330a70b21c1c9e9301cc99b5658ccb89", - "shasum": "" - }, - "require": { - "php": ">= 8.2" - }, - "replace": { - "thecodingmachine/safe": "2.5.0" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpunit/phpunit": "^10.0 || ^11.0", - "squizlabs/php_codesniffer": "^3", - "thecodingmachine/phpstan-strict-rules": "^1.0" - }, - "type": "library", - "autoload": { - "files": [ - "deprecated/apc.php", - "deprecated/array.php", - "deprecated/datetime.php", - "deprecated/libevent.php", - "deprecated/misc.php", - "deprecated/password.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "deprecated/strings.php", - "lib/special_cases.php", - "deprecated/mysqli.php", - "generated/apache.php", - "generated/apcu.php", - "generated/array.php", - "generated/bzip2.php", - "generated/calendar.php", - "generated/classobj.php", - "generated/com.php", - "generated/cubrid.php", - "generated/curl.php", - "generated/datetime.php", - "generated/dir.php", - "generated/eio.php", - "generated/errorfunc.php", - "generated/exec.php", - "generated/fileinfo.php", - "generated/filesystem.php", - "generated/filter.php", - "generated/fpm.php", - "generated/ftp.php", - "generated/funchand.php", - "generated/gettext.php", - "generated/gnupg.php", - "generated/hash.php", - "generated/ibase.php", - "generated/ibmDb2.php", - "generated/iconv.php", - "generated/image.php", - "generated/imap.php", - "generated/info.php", - "generated/inotify.php", - "generated/json.php", - "generated/ldap.php", - "generated/libxml.php", - "generated/lzf.php", - "generated/mailparse.php", - "generated/mbstring.php", - "generated/misc.php", - "generated/mysql.php", - "generated/network.php", - "generated/oci8.php", - "generated/opcache.php", - "generated/openssl.php", - "generated/outcontrol.php", - "generated/pcntl.php", - "generated/pcre.php", - "generated/pgsql.php", - "generated/posix.php", - "generated/ps.php", - "generated/pspell.php", - "generated/readline.php", - "generated/rnp.php", - "generated/rpminfo.php", - "generated/rrd.php", - "generated/sem.php", - "generated/session.php", - "generated/shmop.php", - "generated/sockets.php", - "generated/sodium.php", - "generated/solr.php", - "generated/spl.php", - "generated/sqlsrv.php", - "generated/ssdeep.php", - "generated/ssh2.php", - "generated/stream.php", - "generated/strings.php", - "generated/swoole.php", - "generated/uodbc.php", - "generated/uopz.php", - "generated/url.php", - "generated/var.php", - "generated/xdiff.php", - "generated/xml.php", - "generated/xmlrpc.php", - "generated/yaml.php", - "generated/yaz.php", - "generated/zip.php", - "generated/zlib.php" - ], - "classmap": [ - "lib/DateTime.php", - "lib/DateTimeImmutable.php", - "lib/Exceptions/", - "deprecated/Exceptions/", - "generated/Exceptions/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP core functions that throw exceptions instead of returning FALSE on error (a less-abandoned fork of thecodingmachine/safe)", - "support": { - "issues": "https://github.com/shish/safe/issues", - "source": "https://github.com/shish/safe/tree/v2.6.4" - }, - "funding": [ - { - "url": "https://github.com/OskarStark", - "type": "github" - }, - { - "url": "https://github.com/shish", - "type": "github" - }, - { - "url": "https://github.com/staabm", - "type": "github" - } - ], - "time": "2024-12-18T13:36:07+00:00" - }, { "name": "slevomat/coding-standard", "version": "8.15.0", @@ -9177,64 +8026,6 @@ } ], "time": "2024-03-03T12:36:25+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 641cf1b..e3c07f8 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -4,6 +4,7 @@ namespace App\Form; use App\Entity\MenuItem; use App\Repository\MenuItemRepository; +use Doctrine\DBAL\Types\TextType; use Doctrine\ORM\QueryBuilder; use Override; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -13,6 +14,7 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Uid\Ulid; +use Symfony\Component\Validator\Constraints\NotBlank; use function array_map; use function assert; @@ -22,41 +24,21 @@ final class MenuItemType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $item = $options['data']; - assert($item instanceof MenuItem); // Ensure it's of the correct type - $vendorId = $item->getFoodVendor()?->getId(); // Use safe navigation operator in case FoodVendor is null + assert($item instanceof MenuItem); - $builder->add('name'); // Basic field + $builder->add('name', \Symfony\Component\Form\Extension\Core\Type\TextType::class, [ + 'constraints' => [ + new NotBlank(), + new \Symfony\Component\Validator\Constraints\Length(['min' => 3]), + ] + ]); $builder->add('aliases', EntityType::class, [ 'class' => MenuItem::class, 'choice_label' => 'name', 'multiple' => true, 'expanded' => true, - 'query_builder' => static function (MenuItemRepository $repository) use ($item, $vendorId): QueryBuilder { - - $ids = $repository->createQueryBuilder('m') - ->select('DISTINCT IDENTITY(m.aliasOf)') - ->where('m.deletedAt IS NULL') - ->andWhere('m.aliasOf IS NOT NULL') - ->getquery(); - $ids = $ids->getScalarResult(); - $ids = array_map(static fn(array $id): Ulid => Ulid::fromBinary($id[1]), $ids); - - // Build the main query with a NOT EXISTS constraint - $qb = $repository->createQueryBuilder('m'); - $qb - ->where('m.foodVendor = :vendorId') - ->andWhere('m.deletedAt IS NULL') - ->andWhere('m.id != :id'); - foreach ($ids as $key => $id) { - $qb->andWhere("m.id != :idBy{$key}"); - $qb->setParameter("idBy{$key}", $id, UlidType::NAME); - } - $qb - ->orderBy('m.name', 'ASC') - ->setParameter('vendorId', $vendorId, UlidType::NAME) // ULID or appropriate type - ->setParameter('id', $item->getId()); // ULID or appropriate type - return $qb; - }, + 'query_builder' => static fn (MenuItemRepository $repository): QueryBuilder + => $repository->getSuitableAliasQueryBuilder($item), ]); } diff --git a/src/Repository/MenuItemRepository.php b/src/Repository/MenuItemRepository.php index dbcb4f2..51ca1a3 100644 --- a/src/Repository/MenuItemRepository.php +++ b/src/Repository/MenuItemRepository.php @@ -5,6 +5,8 @@ namespace App\Repository; use App\Entity\MenuItem; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Symfony\Bridge\Doctrine\Types\UlidType; +use Symfony\Component\Uid\Ulid; /** * @extends ServiceEntityRepository @@ -16,28 +18,29 @@ final class MenuItemRepository extends ServiceEntityRepository parent::__construct($registry, MenuItem::class); } - // /** - // * @return MenuItem[] Returns an array of MenuItem objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('m') - // ->andWhere('m.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('m.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } + public function getSuitableAliasQueryBuilder(MenuItem $menuItem): \Doctrine\ORM\QueryBuilder + { + $ids = $this->createQueryBuilder('m') + ->select('DISTINCT IDENTITY(m.aliasOf)') + ->where('m.deletedAt IS NULL') + ->andWhere('m.aliasOf IS NOT NULL') + ->getquery(); + $ids = $ids->getScalarResult(); + $ids = array_map(static fn(array $id): Ulid => Ulid::fromBinary($id[1]), $ids); - // public function findOneBySomeField($value): ?MenuItem - // { - // return $this->createQueryBuilder('m') - // ->andWhere('m.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + $qb = $this->createQueryBuilder('m'); + $qb + ->where('m.foodVendor = :vendorId') + ->andWhere('m.deletedAt IS NULL') + ->andWhere('m.id != :id'); + foreach ($ids as $key => $id) { + $qb->andWhere("m.id != :idBy{$key}") + ->setParameter("idBy{$key}", $id, UlidType::NAME); + } + $qb + ->orderBy('m.name', 'ASC') + ->setParameter('vendorId', $menuItem->getFoodVendor()->getId(), UlidType::NAME) + ->setParameter('id', $menuItem->getId(), UlidType::NAME); + return $qb; + } } diff --git a/templates/menu_item/show.html.twig b/templates/menu_item/show.html.twig index 80731e6..a07b969 100644 --- a/templates/menu_item/show.html.twig +++ b/templates/menu_item/show.html.twig @@ -21,6 +21,18 @@ {{ menu_item.aliasOf.name }} {% endif %} + {% if(menu_item.aliases|length > 0) %} + + Aliases + +
      + {% for alias in menu_item.aliases %} +
    • {{ alias.name }}
    • + {% endfor %} +
    + + + {% endif %} diff --git a/tests/Controller/FoodVendorControllerTest.php b/tests/Controller/FoodVendorControllerTest.php index 5e50526..d000d79 100644 --- a/tests/Controller/FoodVendorControllerTest.php +++ b/tests/Controller/FoodVendorControllerTest.php @@ -9,6 +9,7 @@ use Override; use function sprintf; + final class FoodVendorControllerTest extends DbWebTest { private string $path = '/food/vendor/'; @@ -23,15 +24,20 @@ final class FoodVendorControllerTest extends DbWebTest public function testNew(): void { + self::assertSame(0, $this->repository->count([])); $this->client->request('GET', sprintf('%snew', $this->path)); self::assertResponseStatusCodeSame(200); $this->client->submitForm('Save', [ - 'food_vendor[name]' => 'Testing', + 'food_vendor[name]' => 'TestingNew', ]); + $newVendor = $this->repository->findOneBy(['name' => 'TestingNew']); + $this->assertInstanceof(FoodVendor::class, $newVendor); self::assertSame(1, $this->repository->count([])); + + } public function testShow(): void diff --git a/tests/Controller/MenuItemControllerTest.php b/tests/Controller/MenuItemControllerTest.php index 4d6dd02..05b2a1e 100644 --- a/tests/Controller/MenuItemControllerTest.php +++ b/tests/Controller/MenuItemControllerTest.php @@ -14,6 +14,9 @@ final class MenuItemControllerTest extends DbWebTest { private string $path = '/menu/item/'; private FoodVendor $vendor; + private MenuItem $menuItem; + private MenuItem $aliasOne; + private MenuItem $aliasTwo; #[Override] public function setUp(): void @@ -23,7 +26,30 @@ final class MenuItemControllerTest extends DbWebTest $this->vendor->setName('Food Vendor'); $this->manager->persist($this->vendor); + + $this->menuItem = new MenuItem; + $this->menuItem->setName('Testing 1 2'); + + $this->vendor->addMenuItem($this->menuItem); + $this->manager->persist($this->vendor); + $this->manager->persist($this->menuItem); + + $this->aliasOne = new MenuItem; + $this->aliasOne->setName('AliasOne'); + $this->aliasOne->setFoodVendor($this->vendor); + $this->menuItem->addAlias($this->aliasOne); + + $this->aliasTwo = new MenuItem; + $this->aliasTwo->setName('AliasTwo'); + $this->aliasTwo->setFoodVendor($this->vendor); + $this->aliasTwo->setAliasOf($this->menuItem); + $this->menuItem->addAlias($this->aliasTwo); + + $this->manager->persist($this->aliasOne); + $this->manager->persist($this->aliasTwo); + $this->manager->persist($this->menuItem); $this->manager->flush(); + } #[Override] @@ -34,70 +60,82 @@ final class MenuItemControllerTest extends DbWebTest public function testShow(): void { - $menuItem = new MenuItem; - $menuItem->setName('Testing 1 2'); - $this->vendor->addMenuItem($menuItem); - $this->manager->persist($this->vendor); - $this->manager->persist($menuItem); - $this->manager->flush(); - - $crawler = $this->client->request('GET', "{$this->path}{$menuItem->getId()}"); + $crawler = $this->client->request('GET', "{$this->path}{$this->menuItem->getId()}"); $idValue = $crawler->filter( '.table > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2)' )->text(); $nameValue = $crawler->filter( '.table > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2)' )->text(); + + $aliasTwoNameValue = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(2) > ul:nth-child(1) > li:nth-child(1)' + )->text(); + $aliasOneNameValue = $crawler->filter( + '.table > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(2) > ul:nth-child(1) > li:nth-child(2)' + )->text(); self::assertResponseStatusCodeSame(200); - $this->assertEquals($idValue, $menuItem->getId()); - $this->assertEquals($nameValue, $menuItem->getName()); + $this->assertEquals($idValue, $this->menuItem->getId()); + $this->assertEquals($nameValue, $this->menuItem->getName()); + $this->assertEquals($aliasTwoNameValue, $this->aliasOne->getName()); + $this->assertEquals($aliasOneNameValue, $this->aliasTwo->getName()); } public function testEdit(): void { - $menuItem = new MenuItem; - $menuItem->setName('Testing 1 2'); - - $this->vendor->addMenuItem($menuItem); - $this->manager->persist($this->vendor); - $this->manager->persist($menuItem); - $this->manager->flush(); - - $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $menuItem->getId())); + $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $this->menuItem->getId())); $nameElem = $crawler->filter('#menu_item_name'); $this->assertEquals( 'Testing 1 2', $nameElem->attr('value') ); - $this->client->submitForm('Update', [ - 'menu_item[name]' => 'Testing-1', - ]); + $form = $crawler->selectButton('Update')->form(); + $form['menu_item[name]'] = 'Testing-1'; + $form['menu_item[aliases]'][0]->untick(); - self::assertResponseRedirects(sprintf('/menu/item/%s', $menuItem->getId())); + $this->client->submit($form); + + self::assertResponseRedirects(sprintf('/menu/item/%s', $this->menuItem->getId())); + $menuItem = $this->repository->find($this->menuItem->getId()); + $this->assertEquals('Testing-1', $menuItem->getName()); + $this->assertEquals(1, $menuItem->getAliases()->count()); + $aliasOne = $this->repository->find($this->aliasOne->getId()); + $this->assertNull($aliasOne->getAliasOf()); } + public function testEditInvalid(): void + { + $crawler = $this->client->request('GET', sprintf('%s%s/edit', $this->path, $this->menuItem->getId())); + $nameElem = $crawler->filter('#menu_item_name'); + $this->assertEquals( + 'Testing 1 2', + $nameElem->attr('value') + ); + + $form = $crawler->selectButton('Update')->form(); + $form['menu_item[name]'] = 'a'; + + $this->client->submit($form); + + self::assertResponseStatusCodeSame(422); + } + + public function testDelete(): void { - $menuItem = new MenuItem; - $menuItem->setName('Testing 1 2'); - - $this->vendor->addMenuItem($menuItem); - $this->manager->persist($this->vendor); - $this->manager->persist($menuItem); - $order = new FoodOrder; $order->setFoodVendor($this->vendor); $this->manager->persist($order); $this->manager->flush(); - $this->assertFalse($menuItem->isDeleted()); + $this->assertFalse($this->menuItem->isDeleted()); - $this->client->request('GET', "{$this->path}{$menuItem->getId()}"); + $this->client->request('GET', "{$this->path}{$this->menuItem->getId()}"); $this->client->submitForm('Delete', []); - $menuItem = $this->repository->find($menuItem->getId()); + $menuItem = $this->repository->find($this->menuItem->getId()); $this->assertTrue($menuItem->isDeleted()); @@ -105,7 +143,7 @@ final class MenuItemControllerTest extends DbWebTest $count = $crawler->filter('body > main:nth-child(2) > div:nth-child(5)') ->children() ->count(); - $this->assertSame(0, $count); + $this->assertSame(2, $count); $this->assertResponseIsSuccessful(); diff --git a/tests/Entity/MenuItemTest.php b/tests/Entity/MenuItemTest.php index ccc34d6..a30de40 100644 --- a/tests/Entity/MenuItemTest.php +++ b/tests/Entity/MenuItemTest.php @@ -27,4 +27,29 @@ final class MenuItemTest extends TestCase $this->assertTrue($item->isDeleted()); $this->assertInstanceOf(DateTimeImmutable::class, $item->getDeletedAt()); } + + public function testMenuItemAlias(): void + { + $item = new MenuItem; + $item->setName('Test'); + $this->assertEquals('Test', $item->getName()); + + $vendor = new FoodVendor; + $vendor->setName('Test'); + $item->setFoodVendor($vendor); + + $item2 = new MenuItem; + $item2->setName('Test2'); + $item2->setFoodVendor($vendor); + + $item->addAlias($item2); + + $this->assertCount(1, $item->getAliases()); + $this->assertSame($item, $item2->getAliasOf()); + + $item->removeAlias($item2); + $this->assertCount(0, $item->getAliases()); + $this->assertNull($item2->getAliasOf()); + + } } From 7fb0614db41dff7f82c86a7cc58354cc0544a734 Mon Sep 17 00:00:00 2001 From: Continuous Integration Date: Sun, 26 Jan 2025 10:50:50 +0000 Subject: [PATCH 31/66] Continuous Integration Fixes --- src/Form/MenuItemType.php | 17 ++++++++--------- src/Repository/MenuItemRepository.php | 5 ++++- tests/Controller/FoodVendorControllerTest.php | 6 +++--- tests/Controller/MenuItemControllerTest.php | 9 ++++++--- tests/Entity/MenuItemTest.php | 1 + 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index e3c07f8..0761e21 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -4,18 +4,15 @@ namespace App\Form; use App\Entity\MenuItem; use App\Repository\MenuItemRepository; -use Doctrine\DBAL\Types\TextType; use Doctrine\ORM\QueryBuilder; use Override; use Symfony\Bridge\Doctrine\Form\Type\EntityType; -use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Uid\Ulid; - +use Symfony\Component\Validator\Constraints\Length; use Symfony\Component\Validator\Constraints\NotBlank; -use function array_map; + use function assert; final class MenuItemType extends AbstractType @@ -28,16 +25,18 @@ final class MenuItemType extends AbstractType $builder->add('name', \Symfony\Component\Form\Extension\Core\Type\TextType::class, [ 'constraints' => [ - new NotBlank(), - new \Symfony\Component\Validator\Constraints\Length(['min' => 3]), - ] + new NotBlank, + new Length([ + 'min' => 3, + ]), + ], ]); $builder->add('aliases', EntityType::class, [ 'class' => MenuItem::class, 'choice_label' => 'name', 'multiple' => true, 'expanded' => true, - 'query_builder' => static fn (MenuItemRepository $repository): QueryBuilder + 'query_builder' => static fn(MenuItemRepository $repository): QueryBuilder => $repository->getSuitableAliasQueryBuilder($item), ]); } diff --git a/src/Repository/MenuItemRepository.php b/src/Repository/MenuItemRepository.php index 51ca1a3..651a52b 100644 --- a/src/Repository/MenuItemRepository.php +++ b/src/Repository/MenuItemRepository.php @@ -7,6 +7,9 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Component\Uid\Ulid; +use Doctrine\ORM\QueryBuilder; + +use function array_map; /** * @extends ServiceEntityRepository @@ -18,7 +21,7 @@ final class MenuItemRepository extends ServiceEntityRepository parent::__construct($registry, MenuItem::class); } - public function getSuitableAliasQueryBuilder(MenuItem $menuItem): \Doctrine\ORM\QueryBuilder + public function getSuitableAliasQueryBuilder(MenuItem $menuItem): QueryBuilder { $ids = $this->createQueryBuilder('m') ->select('DISTINCT IDENTITY(m.aliasOf)') diff --git a/tests/Controller/FoodVendorControllerTest.php b/tests/Controller/FoodVendorControllerTest.php index d000d79..d7fa1b9 100644 --- a/tests/Controller/FoodVendorControllerTest.php +++ b/tests/Controller/FoodVendorControllerTest.php @@ -9,7 +9,6 @@ use Override; use function sprintf; - final class FoodVendorControllerTest extends DbWebTest { private string $path = '/food/vendor/'; @@ -33,11 +32,12 @@ final class FoodVendorControllerTest extends DbWebTest 'food_vendor[name]' => 'TestingNew', ]); - $newVendor = $this->repository->findOneBy(['name' => 'TestingNew']); + $newVendor = $this->repository->findOneBy([ + 'name' => 'TestingNew', + ]); $this->assertInstanceof(FoodVendor::class, $newVendor); self::assertSame(1, $this->repository->count([])); - } public function testShow(): void diff --git a/tests/Controller/MenuItemControllerTest.php b/tests/Controller/MenuItemControllerTest.php index 05b2a1e..92cb1a0 100644 --- a/tests/Controller/MenuItemControllerTest.php +++ b/tests/Controller/MenuItemControllerTest.php @@ -37,12 +37,14 @@ final class MenuItemControllerTest extends DbWebTest $this->aliasOne = new MenuItem; $this->aliasOne->setName('AliasOne'); $this->aliasOne->setFoodVendor($this->vendor); + $this->menuItem->addAlias($this->aliasOne); $this->aliasTwo = new MenuItem; $this->aliasTwo->setName('AliasTwo'); $this->aliasTwo->setFoodVendor($this->vendor); $this->aliasTwo->setAliasOf($this->menuItem); + $this->menuItem->addAlias($this->aliasTwo); $this->manager->persist($this->aliasOne); @@ -91,7 +93,8 @@ final class MenuItemControllerTest extends DbWebTest $nameElem->attr('value') ); - $form = $crawler->selectButton('Update')->form(); + $form = $crawler->selectButton('Update') + ->form(); $form['menu_item[name]'] = 'Testing-1'; $form['menu_item[aliases]'][0]->untick(); @@ -114,7 +117,8 @@ final class MenuItemControllerTest extends DbWebTest $nameElem->attr('value') ); - $form = $crawler->selectButton('Update')->form(); + $form = $crawler->selectButton('Update') + ->form(); $form['menu_item[name]'] = 'a'; $this->client->submit($form); @@ -122,7 +126,6 @@ final class MenuItemControllerTest extends DbWebTest self::assertResponseStatusCodeSame(422); } - public function testDelete(): void { $order = new FoodOrder; diff --git a/tests/Entity/MenuItemTest.php b/tests/Entity/MenuItemTest.php index a30de40..a56c81d 100644 --- a/tests/Entity/MenuItemTest.php +++ b/tests/Entity/MenuItemTest.php @@ -36,6 +36,7 @@ final class MenuItemTest extends TestCase $vendor = new FoodVendor; $vendor->setName('Test'); + $item->setFoodVendor($vendor); $item2 = new MenuItem; From 82575d2da090d3b6b6277166b0f35d506037cb44 Mon Sep 17 00:00:00 2001 From: lubiana Date: Sun, 26 Jan 2025 11:54:42 +0100 Subject: [PATCH 32/66] add changes --- src/Form/MenuItemType.php | 3 ++- src/Repository/MenuItemRepository.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php index 0761e21..6d94034 100644 --- a/src/Form/MenuItemType.php +++ b/src/Form/MenuItemType.php @@ -8,6 +8,7 @@ use Doctrine\ORM\QueryBuilder; use Override; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Validator\Constraints\Length; @@ -23,7 +24,7 @@ final class MenuItemType extends AbstractType $item = $options['data']; assert($item instanceof MenuItem); - $builder->add('name', \Symfony\Component\Form\Extension\Core\Type\TextType::class, [ + $builder->add('name', TextType::class, [ 'constraints' => [ new NotBlank, new Length([ diff --git a/src/Repository/MenuItemRepository.php b/src/Repository/MenuItemRepository.php index 651a52b..b207856 100644 --- a/src/Repository/MenuItemRepository.php +++ b/src/Repository/MenuItemRepository.php @@ -4,10 +4,10 @@ namespace App\Repository; use App\Entity\MenuItem; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ManagerRegistry; use Symfony\Bridge\Doctrine\Types\UlidType; use Symfony\Component\Uid\Ulid; -use Doctrine\ORM\QueryBuilder; use function array_map; From 2273c91f2bc6905c837705663b368dbcbada8cb8 Mon Sep 17 00:00:00 2001 From: lubiana Date: Wed, 29 Jan 2025 19:50:33 +0100 Subject: [PATCH 33/66] danke --- public/static/css/fieber.css | 965 +++++++++++++++++++++++++++++++++++ templates/base.html.twig | 11 +- 2 files changed, 973 insertions(+), 3 deletions(-) create mode 100644 public/static/css/fieber.css diff --git a/public/static/css/fieber.css b/public/static/css/fieber.css new file mode 100644 index 0000000..d15789b --- /dev/null +++ b/public/static/css/fieber.css @@ -0,0 +1,965 @@ +/* SPDX-License-Identifier: MIT + SPDX-FileCopyrightText: Copyright (c) 2022-2025 zichy +*/ + +/* Custom properties +======================================== +*/ + +:root { + --f-sans: ui-sans-serif, sans-serif; + + --f-body: ui-serif; + --f-heading: var(--f-sans); + --f-form: var(--f-sans); + --f-code: ui-monospace; + + --f-size: clamp(1.6rem, 1.75vw, 2rem); + --f-size-small: 0.85em; + --f-size-large: 1.25em; + --f-line: 1.5; + + --c-gray: #666; + --c-red: #b30; + --c-yellow: #fe9; + + --i-triangle: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"%3E%3Cpolygon fill="black" points="5 10 10 0 0 0"/%3E%3C/svg%3E'); + + --w-body: 80ch; +} + +/* Dark theme */ + +@media (prefers-color-scheme: dark) { + :root { + --c-gray: #999; + --c-red: #f99; + --c-yellow: #ff9; + + --i-triangle: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10"%3E%3Cpolygon fill="white" points="5 10 10 0 0 0"/%3E%3C/svg%3E'); + } +} + + +/* Globals +======================================== +*/ + +/* Box sizing */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + +/* Text rendering */ + +* { + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; +} + +/* Interaction */ + +::selection { + background: Highlight; + color: HighlightText; + text-shadow: none; +} + +*:focus { + outline: 2px solid LinkText; + outline-offset: 0.25rem; +} + +/* Font size & Scrolling */ + +html { + font-size: 62.5%; + scroll-behavior: smooth; + scroll-padding-top: 2rem; +} + +/* Backdrop */ + +::backdrop { + background-color: rgba(255, 255, 255, 0.6); +} + +@media (prefers-color-scheme: dark) { + ::backdrop { + background-color: rgba(0, 0, 0, 0.6); + } +} + +/* Hidden elements */ + +[hidden] { + display: none; +} + +/* Print spacing */ + +@page { + margin: 15mm 20mm; +} + + +/* Body +======================================== +*/ + +/* Colors & Typography */ + +body { + background-color: Canvas; + color: CanvasText; + font-size: var(--f-size); + font-family: var(--f-body); + line-height: var(--f-line); +} + +/* Body sizing */ + +@media screen { + body { + max-width: var(--w-body, 100%); + min-width: 320px; + padding: 2rem; + margin: 0 auto; + overflow-x: hidden; + overflow-y: scroll; + } +} + +/* Print colors */ + +@media print { + body { + background-color: white; + color: black; + } +} + + +/* Links +======================================== +*/ + +a:any-link { + color: LinkText; + text-decoration: underline; + text-decoration-thickness: 0.125em; +} + +a:any-link:hover { + background-color: LinkText; + color: Canvas; + text-decoration-line: none; +} + +@media print { + a[href^="http"]::after { + content: ' ('attr(href)')'; + font-size: var(--f-size-small); + word-break: break-all; + } +} + + +/* Media +======================================== +*/ + +/* Reset */ + +:where(iframe, img, svg, canvas, audio, video) { + display: block; + max-width: 100%; +} + +@media print { + :where(audio, video) { + display: none; + } +} + +figure { + margin-inline: 0; + break-inside: avoid; +} + +/* Image */ + +img { + height: auto; + position: relative; +} + +img::before { + content: ''; + background-color: Highlight; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +@media screen { + picture img { + width: 100%; + } +} + +/* Video */ + +video { + width: 100%; + height: auto; +} + +/* Iframe */ + +iframe { + border-style: none; +} + + +/* Headings +======================================== +*/ + +:where(h1, h2, h3, h4, h5, h6) { + font-family: var(--f-heading); + line-height: calc(var(--f-line) / 1.25); + hyphens: auto; +} + +:where(h3, h5) { + color: var(--c-gray); +} + +:where(h4, h5, h6) { + text-transform: uppercase; +} + +:where(h2, h3, h4, h5, h6):target { + background-color: var(--c-yellow); + color: MarkText; +} + + +/* Lists +======================================== +*/ + +:where(ul, ol) { + padding-inline-start: 1em; +} + +ul { + list-style-type: disc; +} + +li::marker { + color: var(--c-gray); +} + +li p { + margin: 0; +} + +/* Description */ + +dt { + font-style: italic; +} + +/* Navigation */ + +nav ul { + display: flex; + flex-wrap: wrap; + gap: 0.5rem 2rem; + list-style-type: none; + padding: 0; +} + +@media print { + nav { + display: none; + } +} + + +/* Inline elements +======================================== +*/ + +/* Bold text */ + +:where(b, strong) { + font-weight: bolder; +} + +/* Small text */ + +small { + font-size: var(--f-size-small); +} + +/* Mark */ + +mark { + background-color: var(--c-yellow); +} + +/* Abbreviation */ + +abbr[title] { + text-decoration-line: underline; + text-decoration-style: dotted; + cursor: help; +} + +a abbr[title] { + text-decoration: none; +} + +/* Subscript & Superscript */ + +:where(sub, sup) { + line-height: 0; +} + +/* Quote */ + +q { + font-style: italic; + quotes: none; +} + +/* Keyboard input */ + +kbd { + background: linear-gradient(0deg, Canvas 0%, ButtonFace 100%); + font-size: var(--f-size-small); + font-family: var(--f-sans); + font-weight: bold; + padding: 0.2em 0.4em; + border-radius: 0.5rem; + box-shadow: 1px 1px 1px 0px var(--c-gray); +} + + +/* Ruby annotation +======================================== +*/ + +rt { + color: var(--c-gray); + font-family: var(--f-sans); + letter-spacing: -0.05em; + padding: 0 0.25em; +} + + +/* Horizontal rule +======================================== +*/ + +hr { + height: 0; + margin: 2em 0; + border: 0; + border-top: 2px solid var(--c-gray); +} + + +/* Blockquote +======================================== +*/ + +blockquote { + font-size: var(--f-size-large); + font-style: italic; + line-height: calc(var(--f-line) / 1.25); + margin: 0; +} + +blockquote > *:first-child { + margin-block-start: 0; +} + +blockquote > *:last-child { + margin-block-end: 0; +} + + +/* Captions +======================================== +*/ + +:where(caption, figcaption) { + color: var(--c-gray); + font-family: var(--f-heading); + font-size: var(--f-size-small); + font-style: italic; + margin-block-start: 0.5rem; +} + +caption { + text-align: left; + caption-side: bottom; +} + +[dir='rtl' i] caption { + text-align: right; +} + + +/* Code +======================================== +*/ + +:where(pre, code, samp, var) { + background-color: ButtonFace; +} + +:where(code, samp, var) { + font-size: var(--f-size-small); + font-family: var(--f-code); + padding: 0.2em 0.4em; +} + +pre { + font-size: var(--f-size-small); + padding: 2rem; +} + +@media screen { + pre { + overflow-x: scroll; + } +} + +pre code { + background-color: transparent; + display: block; + white-space: pre-wrap; + padding: 0; +} + + +/* Details +======================================== +*/ + +details { + background-color: ButtonFace; + padding: 2rem; + margin: 1em 0; + border-radius: 0.5rem; +} + +details > *:nth-child(2) { + margin-block-start: 0; +} + +details > *:last-child { + margin-block-end: 0; +} + +summary { + color: LinkText; + font-family: var(--f-heading); + font-weight: bold; + cursor: pointer; +} + +summary:hover { + text-decoration: underline; +} + +details[open] summary { + margin-block-end: 2rem; +} + + +/* Aside +======================================== +*/ + +aside { + color: var(--c-gray); +} + +@media (min-width: 769px) { + aside { + font-size: var(--f-size-small); + float: right; + width: calc(var(--w-body) / 2.5); + padding-block-end: 2rem; + padding-inline-start: 4rem; + } + + aside > *:first-child { + margin-block-start: 0; + } + + aside > *:last-child { + margin-block-end: 0; + } +} + + +/* Table +======================================== +*/ + +table { + width: 100%; + margin: 1em 0; + border-collapse: collapse; + border-spacing: 0; + break-inside: avoid; +} + +@media screen and (max-width: 768px) { + table { + display: block; + overflow-x: auto; + overflow-y: hidden; + } +} + +thead { + border-bottom: 2px solid var(--c-gray); +} + +tbody tr:nth-child(odd) { + background-color: ButtonFace; +} + +tfoot { + border-top: 2px solid var(--c-gray); +} + +:where(th, td) { + padding: 0.5rem 1rem; +} + +@media (max-width: 768px) { + :where(th, td) { + min-width: 10rem; + } +} + +th { + font-family: var(--f-heading); + text-align: left; + vertical-align: bottom; +} + +[dir='rtl' i] th { + text-align: right; +} + + +/* Forms & Inputs +======================================== +*/ + +/* Reset */ + +:where(input, textarea, select, button, progress) { + -webkit-appearance: none; + background-color: transparent; + break-inside: avoid; +} + +:where(input, textarea, select, button) { + font-family: var(--f-form); + font-size: 1em; + border-radius: 0.5rem; +} + +:where(input:not([type='button' i]):not([type='submit' i]):not([type='reset' i]):not([type='checkbox' i]):not([type='radio' i]):not([type='image' i]), textarea, select) { + color: CanvasText; + font-size: var(--f-size-small); + display: block; + width: 100%; + padding: 0.75rem 1rem; + border: 2px solid LinkText; +} + +/* Placeholder */ + +::placeholder { + color: var(--c-gray); +} + +/* Fieldset */ + +fieldset { + padding: 2rem; + border: 2px solid LinkText; + border-radius: 0.5rem; + break-inside: avoid; +} + +/* Label & Legend */ + +:where(legend, label) { + font-family: var(--f-form); + font-weight: bold; + display: block; +} + +legend { + padding: 0 1rem; +} + +:where(legend, label) small { + color: var(--c-gray); + font-weight: normal; +} + +/* Textarea */ + +textarea { + resize: vertical; +} + +/* Checkbox & Radio input */ + +label:has([type='checkbox' i], [type='radio' i]) { + font-family: var(--f-form); + font-size: var(--f-size-small); + font-weight: normal; + display: grid; + grid-template-columns: 1.25em 1fr; + column-gap: 0.5em; + padding-block-end: 0; +} + +label:has([type='checkbox' i][disabled], [type='radio' i][disabled]) { + color: var(--c-gray); +} + +:where([type='checkbox' i], [type='radio' i]) { + width: 1.25em; + height: 1.25em; + position: relative; + margin: 0.2rem 0 0; + border: 2px solid LinkText; + cursor: pointer; +} + +[type='radio' i] { + border-radius: 50%; +} + +:where([type='checkbox' i], [type='radio' i]):checked { + background-color: LinkText; +} + +[type='checkbox' i]:checked::after { + content: '\2713'; + color: Canvas; + font-family: var(--f-form); + font-weight: bold; + line-height: 1; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +/* Color input */ + +[type='color' i] { + height: 4rem; + padding: 0.5rem; + cursor: pointer; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::-webkit-color-swatch { + border: 0; +} + +::-moz-color-swatch { + border: 0; +} + +/* Range input */ + +[type='range' i] { + margin: 1.25rem 0 0; + padding: 0; + border: 0; +} + +[type='range' i]:focus { + outline: none; +} + +::-webkit-slider-runnable-track { + background-color: LinkText; + height: 4px; + border-radius: 0.5rem; +} + +[disabled]::-webkit-slider-runnable-track { + background-color: var(--c-gray); +} + +::-moz-range-track { + background-color: LinkText; + height: 4px; + border-radius: 0.5rem; +} + +[disabled]::-moz-range-track { + background-color: var(--c-gray); +} + +::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + background-color: Canvas; + height: 2rem; + width: 2rem; + margin-block-start: calc(-1rem + 2px); + border: 2px solid LinkText; + border-radius: 50%; + cursor: ew-resize; +} + +[disabled]::-webkit-slider-thumb { + border-color: var(--c-gray); +} + +[type='range' i]:focus::-webkit-slider-thumb { + outline: 2px solid LinkText; + outline-offset: 0.25rem; +} + +::-moz-range-thumb { + appearance: none; + background-color: Canvas; + height: 2rem; + width: 2rem; + margin-block-start: calc(-1rem + 2px); + border: 2px solid LinkText; + border-radius: 50%; + cursor: ew-resize; +} + +[disabled]::-moz-range-thumb { + border-color: var(--c-gray); +} + +[type='range' i]:focus::-moz-range-thumb { + outline: 2px solid LinkText; + outline-offset: 0.25rem; +} + +/* Select */ + +select { + background: Canvas var(--i-triangle) no-repeat calc(100% - 1rem) center / 1.5rem; + text-overflow: ellipsis; + white-space: nowrap; + padding-inline-end: 3.5rem; + overflow: hidden; + cursor: pointer; +} + +[dir='rtl' i] select { + background-position: 1rem center; + padding-inline: 3.5rem 1rem; +} + +select[multiple] { + background-image: none; + padding-inline-end: 1rem; +} + +/* Buttons */ + +:where(button, [type='button' i], [type='submit' i], [type='reset' i]) { + font-size: var(--f-size-small); + font-weight: bold; + text-align: center; + text-decoration: none; + line-height: 1; + display: inline-block; + min-width: 5rem; + padding: 0.2em 0.4em; + border: 2px solid LinkText; + -webkit-user-select: text; + user-select: text; + cursor: pointer; + touch-action: manipulation; +} + +:where(button:not([disabled]), [type='button' i]:not([disabled]), [type='submit' i]:not([disabled]), [type='reset' i]:not([disabled])):hover { + text-decoration: underline; +} + +@media screen { + :where(button, [type='button' i], [type='submit' i], [type='reset' i]) { + background-color: LinkText; + color: Canvas; + } + + :where(button[disabled], [type='button' i][disabled], [type='submit' i][disabled], [type='reset' i][disabled]) { + background-color: var(--c-gray); + color: currentColor; + } +} + +form :where(button, [type='button' i], [type='submit' i], [type='reset' i]) { + padding: 1rem 1.5rem; +} + +/* Meter & Progress */ + +:where(meter, progress) { + width: 100%; + height: 3rem; + border: 2px solid var(--c-gray); +} + +label + :where(meter, progress) { + margin-block-start: 0.5rem; +} + +meter { + background: transparent; + display: block; + margin-block-end: 1em; + border: 2px solid var(--c-gray); +} + +::-webkit-meter-bar { + background: Canvas; + height: 3rem; + border: 2px solid var(--c-gray); + border-radius: 0; +} + +::-webkit-progress-bar { + background-color: Canvas; +} + +::-moz-progress-bar { + background-color: var(--c-gray); +} + +::-webkit-progress-value { + background-color: var(--c-gray); +} + +/* Disabled state */ + +[disabled] { + border-color: var(--c-gray); + cursor: not-allowed; +} + +/* Error state */ + +[aria-invalid] { + border-color: var(--c-red) !important; +} + +[aria-invalid]:focus { + outline-color: var(--c-red); +} + +[aria-invalid] + p[id] { + color: var(--c-red); +} + +/* Form spacing */ + +form label:not(:first-of-type) { + margin-block-start: 3rem; +} + +form label + :where(input, textarea, select) { + margin-block-start: 0.5rem; +} + +form fieldset { + margin: 3rem 0; +} + +fieldset label:not(:first-of-type) { + margin-block-start: 2rem; +} + +form p[id] { + margin-block-start: 0.5rem; +} + + +/* Dialog +======================================== +*/ + +dialog[open] { + background-color: Canvas; + color: currentColor; + display: block; + max-width: var(--w-body, 100%); + min-width: calc(var(--w-body) / 2); + padding: 2rem; + border: 2px solid var(--c-gray); + border-radius: 0.5rem; +} + +body:has(dialog[open]) { + overflow: hidden; +} + +dialog:not([open]) { + display: none; +} + +dialog > *:first-child { + margin-block-start: 0; +} + +dialog > *:last-child { + margin-block-end: 0; +} + + +/* Opinionated layout +======================================== +*/ + +@media screen { + body > header { + margin-block-end: 4em; + } + + main > :where(section, article), + body > footer { + margin-block-start: 4em; + clear: both; + } + + body > footer { + margin-block-start: 4em; + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 9bac562..458d961 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -2,16 +2,21 @@ + + + {% block title %}Welcome!{% endblock %} {% set currentDate = "now"|date("d") %} - {% if currentDate % 3 == 0 %} + {% if currentDate % 4 == 0 %} - {% elseif currentDate % 3 == 1 %} + {% elseif currentDate % 4 == 1 %} - {% else %} + {% elseif currentDate % 4 == 2 %} + {% else %} + {% endif %} ")}}function zr(){var e=re().querySelector('meta[name="htmx-config"]');if(e){return E(e.content)}else{return null}}function $r(){var e=zr();if(e){Q.config=le(Q.config,e)}}jr(function(){$r();_r();var e=re().body;zt(e);var t=re().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=ae(t);if(r&&r.xhr){r.xhr.abort()}});const r=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){ar();oe(t,function(e){ce(e,"htmx:restored",{document:re(),triggerEvent:ce})})}else{if(r){r(e)}}};setTimeout(function(){ce(e,"htmx:load",{});e=null},0)});return Q}()}); \ No newline at end of file diff --git a/symfony.lock b/symfony.lock index 676275b..cfab487 100644 --- a/symfony.lock +++ b/symfony.lock @@ -115,6 +115,21 @@ "phpcs.xml.dist" ] }, + "symfony/asset-mapper": { + "version": "7.3", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "6.4", + "ref": "5ad1308aa756d58f999ffbe1540d1189f5d7d14a" + }, + "files": [ + "assets/app.js", + "assets/styles/app.css", + "config/packages/asset_mapper.yaml", + "importmap.php" + ] + }, "symfony/console": { "version": "7.3", "recipe": { @@ -265,5 +280,8 @@ "config/packages/web_profiler.yaml", "config/routes/web_profiler.yaml" ] + }, + "twig/extra-bundle": { + "version": "v3.21.0" } } diff --git a/templates/base.html.twig b/templates/base.html.twig index 1036cc3..942c876 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -3,27 +3,12 @@ - - {% block title %}Welcome!{% endblock %} - {% set currentDate = "now"|date("d") %} - {% if currentDate % 4 == 0 %} - - {% elseif currentDate % 4 == 1 %} - - {% elseif currentDate % 4 == 2 %} - - {% else %} - - {% endif %} - - + {% block javascripts %} + {% block importmap %}{{ importmap('app') }}{% endblock %} + {% endblock %}
    From 5cb66c5012635b1fc026e3cca8c8c9a728a229f0 Mon Sep 17 00:00:00 2001 From: lubiana Date: Wed, 18 Jun 2025 20:12:17 +0200 Subject: [PATCH 55/66] booty --- assets/app.js | 15 +- assets/javascript/emoji-footprint.js | 19 + assets/javascript/modes.js | 136 +++++ assets/javascript/numberInputs.js | 55 ++ assets/javascript/radioState.js | 35 ++ assets/javascript/theme.js | 18 + assets/styles/app.css | 182 +++++- assets/styles/emoji-footprint.css | 30 + assets/styles/modes.css | 565 ++++++++++++++++++ config/packages/twig.php | 19 +- templates/_form.html.twig | 6 +- templates/base.html.twig | 56 +- templates/food_order/edit.html.twig | 8 +- templates/food_order/index.html.twig | 25 +- templates/food_order/new.html.twig | 4 +- templates/food_order/show.html.twig | 32 +- templates/food_order/table_row.html.twig | 2 +- templates/food_vendor/_form.html.twig | 6 +- templates/food_vendor/edit.html.twig | 8 +- templates/food_vendor/index.html.twig | 14 +- templates/food_vendor/new.html.twig | 8 +- templates/food_vendor/show.html.twig | 21 +- templates/menu_item/_delete_form.html.twig | 2 +- templates/menu_item/_form.html.twig | 6 +- templates/menu_item/edit.html.twig | 10 +- templates/menu_item/index.html.twig | 14 +- templates/menu_item/new.html.twig | 8 +- templates/menu_item/show.html.twig | 18 +- templates/order_item/_form.html.twig | 6 +- templates/order_item/edit.html.twig | 8 +- templates/order_item/new.html.twig | 16 +- templates/username.html.twig | 8 +- .../Controller/FoodOrderControllerTest.php | 6 +- .../Controller/FoodVendorControllerTest.php | 2 +- 34 files changed, 1236 insertions(+), 132 deletions(-) create mode 100644 assets/javascript/emoji-footprint.js create mode 100644 assets/javascript/modes.js create mode 100644 assets/javascript/numberInputs.js create mode 100644 assets/javascript/radioState.js create mode 100644 assets/javascript/theme.js create mode 100644 assets/styles/emoji-footprint.css create mode 100644 assets/styles/modes.css diff --git a/assets/app.js b/assets/app.js index 321cea2..88672ac 100644 --- a/assets/app.js +++ b/assets/app.js @@ -4,6 +4,19 @@ * This file will be included onto the page via the importmap() Twig function, * which should already be in your base.html.twig. */ +import 'bootstrap/dist/css/bootstrap.min.css'; import './styles/app.css'; +import './styles/modes.css'; +import './styles/emoji-footprint.css'; -import './javascript/htmx.js'; \ No newline at end of file +// Import modules +import './javascript/theme.js'; +import './javascript/emoji-footprint.js'; +import './javascript/modes.js'; +import './javascript/htmx.js'; +import 'bootstrap'; +import { initRadioState } from './javascript/radioState.js'; + +document.addEventListener('DOMContentLoaded', () => { + initRadioState(); +}); \ No newline at end of file diff --git a/assets/javascript/emoji-footprint.js b/assets/javascript/emoji-footprint.js new file mode 100644 index 0000000..238377b --- /dev/null +++ b/assets/javascript/emoji-footprint.js @@ -0,0 +1,19 @@ +// Sparkle effect on mouse move +document.addEventListener('mousemove', function (e) { + const emojis = ['✨', '💖', '🌟', '💅', '🦄', '🎉', '🌈']; + const sparkle = document.createElement('div'); + sparkle.className = 'emoji-footprint'; + sparkle.textContent = emojis[Math.floor(Math.random() * emojis.length)]; + sparkle.style.left = e.pageX + 'px'; + sparkle.style.top = e.pageY + 'px'; + document.body.appendChild(sparkle); + + setTimeout(() => { + sparkle.remove(); + }, 1000); +}); + +export function initEmojiFootprint() { + // The sparkle effect is already initialized when this module is imported + // This function can be used if we need to control when the effect starts +} \ No newline at end of file diff --git a/assets/javascript/modes.js b/assets/javascript/modes.js new file mode 100644 index 0000000..a288f32 --- /dev/null +++ b/assets/javascript/modes.js @@ -0,0 +1,136 @@ +// Bonkers mode functionality +function setEmojiLevelClass(mode) { + document.body.classList.remove('emoji-normal', 'emoji-enhanced', 'emoji-bonkers'); + if (mode === 'bonkers') { + document.body.classList.add('emoji-bonkers'); + } else if (mode === 'enhanced') { + document.body.classList.add('emoji-enhanced'); + } else { + document.body.classList.add('emoji-normal'); + } +} + +function initBonkersMode() { + // Check if we're in bonkers mode + const currentMode = document.documentElement.getAttribute('data-website-mode'); + setEmojiLevelClass(currentMode); + + if (currentMode === 'bonkers') { + // Apply bonkers mode immediately + document.body.classList.add('bonkers-mode'); + + // Start the fabulous effects + createExtraSparkles(); + createSlayEffects(); + + console.log('🌈✨ Bonkers mode activated! ✨🌈'); + } else { + // Remove bonkers mode if it was active + document.body.classList.remove('bonkers-mode'); + } +} + +// Function to create extra sparkles during bonkers mode +function createExtraSparkles() { + const currentMode = document.documentElement.getAttribute('data-website-mode'); + if (currentMode !== 'bonkers') return; + + const extraEmojis = [ + '💃', '🕺', + '🍑', '💦', '😏', '😈', '👅', '💋', '🥵', '😳', '🤤', '😍', '🥴', + '💕', '💖', '💗', '💘', '💝', '💞', '💟', '💌', '💏', '💑', + '🍆', '🥒', '🍌', '💦', '👀', '😉', '😌', '😍', '🥰', '😘', + '😚', '😋', '😏', '😫', '😩', '🥺', '🥵', '🥴', + '💖', '💗', '💕', '💞', '💓', '💗', '💖', '💘', '💝', + '💋', '💏', '💑' + ]; + const sparkle = document.createElement('div'); + sparkle.className = 'emoji-footprint'; + sparkle.textContent = extraEmojis[Math.floor(Math.random() * extraEmojis.length)]; + sparkle.style.left = Math.random() * window.innerWidth + 'px'; + sparkle.style.top = Math.random() * window.innerHeight + 'px'; + document.body.appendChild(sparkle); + + setTimeout(() => { + if (sparkle.parentNode) { + sparkle.remove(); + } + }, 3000); + + // Continue creating extra sparkles while in bonkers mode + const newMode = document.documentElement.getAttribute('data-website-mode'); + if (newMode === 'bonkers') { + setTimeout(() => createExtraSparkles(), 150); + } +} + +// Function to create slay effects +function createSlayEffects() { + const currentMode = document.documentElement.getAttribute('data-website-mode'); + if (currentMode !== 'bonkers') return; + + // Create floating "SLAY" text effects + const slayWords = [ + 'SLAY', 'QUEEN', 'FABULOUS', 'ICONIC', 'LEGENDARY', 'STUNNING', 'GORGEOUS', 'FLAWLESS', + 'DAZZLING', 'RADIANT', 'BREATHTAKING', 'EXQUISITE', 'DIVINE' + ]; + const slayElement = document.createElement('div'); + slayElement.className = 'slay-text'; + slayElement.textContent = slayWords[Math.floor(Math.random() * slayWords.length)]; + slayElement.style.left = Math.random() * window.innerWidth + 'px'; + slayElement.style.top = Math.random() * window.innerHeight + 'px'; + document.body.appendChild(slayElement); + + setTimeout(() => { + if (slayElement.parentNode) { + slayElement.remove(); + } + }, 3000); + + // Continue creating slay effects while in bonkers mode + const newMode = document.documentElement.getAttribute('data-website-mode'); + if (newMode === 'bonkers') { + setTimeout(() => createSlayEffects(), 800); + } +} + +// Watch for mode changes +function watchModeChanges() { + // Create a MutationObserver to watch for changes to the data-website-mode attribute + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === 'attributes' && mutation.attributeName === 'data-website-mode') { + const newMode = document.documentElement.getAttribute('data-website-mode'); + + if (newMode === 'bonkers') { + document.body.classList.add('bonkers-mode'); + setEmojiLevelClass(newMode); + + // Start the fabulous effects + createExtraSparkles(); + createSlayEffects(); + + console.log('🌈✨ Switched to bonkers mode! ✨🌈'); + } else { + document.body.classList.remove('bonkers-mode'); + setEmojiLevelClass(newMode); + console.log(`😴 Switched to ${newMode} mode`); + } + } + }); + }); + + // Start observing + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ['data-website-mode'] + }); +} + +// Initialize when DOM is loaded +document.addEventListener('DOMContentLoaded', function() { + initBonkersMode(); + watchModeChanges(); +}); + +export { initBonkersMode, watchModeChanges }; diff --git a/assets/javascript/numberInputs.js b/assets/javascript/numberInputs.js new file mode 100644 index 0000000..a4a8dc1 --- /dev/null +++ b/assets/javascript/numberInputs.js @@ -0,0 +1,55 @@ +// Function to initialize number input buttons +function initNumberInputs(container = document) { + container.querySelectorAll('.number-input-wrapper').forEach(function(wrapper) { + const input = wrapper.querySelector('input[type="number"]'); + const decreaseBtn = wrapper.querySelector('[data-action="decrease"]'); + const increaseBtn = wrapper.querySelector('[data-action="increase"]'); + + if (!input || !decreaseBtn || !increaseBtn) return; + + // Skip if already initialized + if (decreaseBtn.hasAttribute('data-initialized')) return; + + const step = parseFloat(input.getAttribute('step')) || 1; + const min = 0; + const max = input.getAttribute('max') ? parseFloat(input.getAttribute('max')) : null; + + decreaseBtn.addEventListener('click', function() { + const currentValue = parseFloat(input.value) || 0; + const newValue = currentValue - step; + + if (min === null || newValue >= min) { + input.value = newValue; + input.dispatchEvent(new Event('change', { bubbles: true })); + } + }); + + increaseBtn.addEventListener('click', function() { + const currentValue = parseFloat(input.value) || 0; + const newValue = currentValue + step; + + if (max === null || newValue <= max) { + input.value = newValue; + input.dispatchEvent(new Event('change', { bubbles: true })); + } + }); + + // Validate input on change + input.addEventListener('input', function() { + const value = parseFloat(this.value); + + if (min !== null && value < min) { + this.value = min; + } + if (max !== null && value > max) { + this.value = max; + } + }); + + // Mark as initialized + decreaseBtn.setAttribute('data-initialized', 'true'); + increaseBtn.setAttribute('data-initialized', 'true'); + }); +} + +export { initNumberInputs }; \ No newline at end of file diff --git a/assets/javascript/radioState.js b/assets/javascript/radioState.js new file mode 100644 index 0000000..a30d311 --- /dev/null +++ b/assets/javascript/radioState.js @@ -0,0 +1,35 @@ +// Radio button state management with localStorage +function initRadioState() { + // Store and retrieve radio button state + const radioButtons = document.querySelectorAll('input[name="mode"]'); + + // Load saved state on page load + const savedMode = localStorage.getItem('selectedMode'); + if (savedMode) { + const radioToCheck = document.getElementById(savedMode); + if (radioToCheck) { + radioToCheck.checked = true; + // Set the data attribute to match the saved mode + document.documentElement.setAttribute('data-website-mode', savedMode); + } + } else { + // If no saved state, set to the currently checked radio button + const checkedRadio = document.querySelector('input[name="mode"]:checked'); + if (checkedRadio) { + document.documentElement.setAttribute('data-website-mode', checkedRadio.id); + } + } + + // Save state when radio button changes + radioButtons.forEach(radio => { + radio.addEventListener('change', function() { + if (this.checked) { + localStorage.setItem('selectedMode', this.id); + // Update the data attribute when mode changes + document.documentElement.setAttribute('data-website-mode', this.id); + } + }); + }); +} + +export { initRadioState }; \ No newline at end of file diff --git a/assets/javascript/theme.js b/assets/javascript/theme.js new file mode 100644 index 0000000..8acf738 --- /dev/null +++ b/assets/javascript/theme.js @@ -0,0 +1,18 @@ +// Theme detection and switching +const getPreferredTheme = () => { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +const setTheme = theme => { + document.documentElement.setAttribute('data-bs-theme', theme) +} + +// Set initial theme +setTheme(getPreferredTheme()) + +// Listen for changes in user's preferred color scheme +window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + setTheme(getPreferredTheme()) +}) + +export { getPreferredTheme, setTheme }; \ No newline at end of file diff --git a/assets/styles/app.css b/assets/styles/app.css index dd6181a..7400735 100644 --- a/assets/styles/app.css +++ b/assets/styles/app.css @@ -1,3 +1,179 @@ -body { - background-color: skyblue; -} +/* + * ================================================================================================= + * 💖 BUBBLEGUM PUNK THEME (LIGHT) 💖 + * + * This isn't just a theme. It's a statement. + * Unapologetically loud, pink, and quirky. + * ================================================================================================= + */ + :root, + [data-bs-theme=light] { + /* --- CORE VIBE --- */ + --bs-pink: #FF007A; /* 💖 Hyper Pink (Our Queen) */ + --bs-green: #CFFF50; /* 🧪 Toxic Slime */ + --bs-purple: #A328D6; /* 👾 Graffiti Purple */ + --bs-yellow: #F9F871; /* ⚡ Neon Lemon */ + --bs-cyan: #00F5D4; /* 💎 Glitchy Teal */ + --bs-blue: #00A9E0; /* 💦 Splash Zone */ + + /* Let's redefine ALL the core colors to match the new energy */ + --bs-primary: var(--bs-pink); + --bs-secondary: var(--bs-green); + --bs-success: var(--bs-cyan); + --bs-info: var(--bs-blue); + --bs-warning: var(--bs-yellow); + --bs-danger: #FF3D3D; /* 🚨 Code Red Rave */ + + /* --- BACKGROUNDS & TEXT --- */ + /* No more boring white! */ + --bs-body-bg: #FFF5FD; /* A soft, dreamy pink canvas */ + --bs-body-color: #4A003D; /* Dark Plum (instead of black) for text */ + --bs-heading-color: var(--bs-purple); /* Make headings POP */ + --bs-secondary-color: rgba(74, 0, 61, 0.75); /* Plum, but softer */ + --bs-tertiary-color: rgba(74, 0, 61, 0.5); + + /* Make cards and containers pure white to contrast the pink background */ + --bs-tertiary-bg: #FFFFFF; + --bs-secondary-bg: #FEF9FE; + + /* --- LINKS & CODE --- */ + --bs-link-color: var(--bs-pink); + --bs-link-hover-color: var(--bs-purple); + --bs-code-color: var(--bs-purple); + + /* --- BORDERS & SHADOWS: LET'S GET QUIRKY --- */ + --bs-border-width: 2px; /* Chunky borders! */ + --bs-border-color: #FFD6F5; /* Pink-tinted border color */ + --bs-border-color-translucent: rgba(74, 0, 61, 0.2); + --bs-border-radius: 1rem; /* Super bubbly and round */ + --bs-border-radius-sm: 0.5rem; + --bs-border-radius-lg: 1.5rem; + --bs-border-radius-pill: 50rem; + + /* Say goodbye to black shadows, hello to colored glows! */ + --bs-box-shadow: 0 4px 12px rgba(255, 0, 122, 0.2); + --bs-box-shadow-sm: 0 2px 4px rgba(255, 0, 122, 0.15); + --bs-box-shadow-lg: 0 8px 30px rgba(255, 0, 122, 0.25); + --bs-box-shadow-inset: inset 0 1px 4px rgba(74, 0, 61, 0.2); + + /* --- THE GRADIENT: THE SOUL OF THE THEME --- */ + --bs-gradient: linear-gradient(75deg, var(--bs-primary), var(--bs-secondary)); + + /* --- Don't forget the RGB values for Bootstrap components! --- */ + --bs-primary-rgb: 255, 0, 122; + --bs-secondary-rgb: 207, 255, 80; + --bs-body-color-rgb: 74, 0, 61; + --bs-body-bg-rgb: 255, 245, 253; + } + + + /* + * ================================================================================================= + * 🌙🦇 CYBER GOTH THEME (DARK) 🦇🌙 + * + * The lights are out, the neon is ON. + * A dark, moody theme with vibrant, glowing accents. + * ================================================================================================= + */ + [data-bs-theme=dark] { + color-scheme: dark; + + /* --- BACKGROUNDS & TEXT --- */ + --bs-body-bg: #1D001A; /* Deep, dark space purple */ + --bs-body-color: #FFE9FA; /* Light pink text for high contrast */ + --bs-heading-color: var(--bs-cyan); /* Glowing cyan headings */ + + --bs-tertiary-bg: #2E0028; /* A slightly lighter container background */ + --bs-secondary-bg: #3A0033; + --bs-secondary-color: rgba(255, 233, 250, 0.75); + --bs-tertiary-color: rgba(255, 233, 250, 0.5); + + /* --- LINKS & CODE --- */ + /* Using the Toxic Slime for links gives it that cyber look */ + --bs-link-color: var(--bs-green); + --bs-link-hover-color: var(--bs-cyan); + --bs-code-color: var(--bs-pink); + + /* --- BORDERS & SHADOWS: NEON GLOWS --- */ + --bs-border-color: #5C004F; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + + /* Redefine shadows to be neon glows */ + --bs-box-shadow: 0 0 15px rgba(var(--bs-primary-rgb), 0.4); + --bs-box-shadow-lg: 0 0 30px rgba(var(--bs-primary-rgb), 0.5); + + /* --- EMPHASIS & SUBTLE BACKGROUNDS --- */ + /* These are for alerts, badges, etc. They'll be dark with glowing text. */ + --bs-primary-text-emphasis: #FF8AD1; + --bs-secondary-text-emphasis: #E2FF8A; + --bs-success-text-emphasis: #8AFFEB; + --bs-info-text-emphasis: #7ADCF5; + --bs-warning-text-emphasis: #FAF8A8; + --bs-danger-text-emphasis: #FF8A8A; + + --bs-primary-bg-subtle: #3D002B; + --bs-secondary-bg-subtle: #415215; + --bs-success-bg-subtle: #00332B; + --bs-info-bg-subtle: #00313D; + --bs-warning-bg-subtle: #3E3D1C; + --bs-danger-bg-subtle: #520E0E; + } + +/* === EMOJI LEVELS === */ +.emoji-normal .emoji-normal { display: inline; } +.emoji-normal .emoji-enhanced, +.emoji-normal .emoji-bonkers { display: none; } + +.emoji-enhanced .emoji-enhanced { display: inline; } +.emoji-enhanced .emoji-normal, +.emoji-enhanced .emoji-bonkers { display: none; } + +.emoji-bonkers .emoji-bonkers { display: inline; } +.emoji-bonkers .emoji-normal, +.emoji-bonkers .emoji-enhanced { display: none; } + /* + * ================================================================================================= + * 🌈 RAINBOW PRIDE ELEMENTS 🌈 + * + * Fabulous rainbow-themed elements to celebrate diversity and pride! + * ================================================================================================= + */ + .bg-rainbow { + background: linear-gradient( + to right, + #FF5757, /* Red */ + #FFBD59, /* Orange */ + #F9F871, /* Yellow */ + #CFFF50, /* Green */ + #00F5D4, /* Teal */ + #00A9E0, /* Blue */ + #A328D6 /* Purple */ + ); + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + font-weight: bold; + border: none; + } + + .fun-fact { + font-size: 1.1rem; + line-height: 1.6; + font-style: italic; + } + + /* Add a subtle rainbow border to the fun facts card */ + .card:has(.fun-fact) { + border-width: 2px; + border-style: solid; + border-image: linear-gradient( + to right, + #FF5757, /* Red */ + #FFBD59, /* Orange */ + #F9F871, /* Yellow */ + #CFFF50, /* Green */ + #00F5D4, /* Teal */ + #00A9E0, /* Blue */ + #A328D6 /* Purple */ + ) 1; + box-shadow: 0 4px 15px rgba(163, 40, 214, 0.2); + } diff --git a/assets/styles/emoji-footprint.css b/assets/styles/emoji-footprint.css new file mode 100644 index 0000000..b076361 --- /dev/null +++ b/assets/styles/emoji-footprint.css @@ -0,0 +1,30 @@ + +/* Emoji Footprint Animation */ +.emoji-footprint { + position: absolute; + font-size: 1.6rem; + pointer-events: none; + animation: emojiFade 1s ease-out forwards; + transform: translate(-50%, -50%) scale(1); + opacity: 1; + z-index: 9999; + text-shadow: + 0 0 4px #ff00bf, + 0 0 8px #ff80df, + 0 0 12px #ffccff; +} + +@keyframes emojiFade { + 0% { + transform: translate(-50%, -50%) scale(1); + opacity: 1; + } + 50% { + transform: translate(-50%, -50%) scale(1.5); + opacity: 0.7; + } + 100% { + transform: translate(-50%, -50%) scale(2); + opacity: 0; + } +} \ No newline at end of file diff --git a/assets/styles/modes.css b/assets/styles/modes.css new file mode 100644 index 0000000..383815b --- /dev/null +++ b/assets/styles/modes.css @@ -0,0 +1,565 @@ +/* 🌈✨ BONKERS MODE ANIMATIONS ✨🌈 */ +@keyframes rainbowGradient { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +@keyframes discoFlash { + 0%, 100% { + background-color: var(--bs-pink); + box-shadow: 0 0 20px var(--bs-pink), 0 0 40px var(--bs-pink); + } + 16.66% { + background-color: var(--bs-purple); + box-shadow: 0 0 20px var(--bs-purple), 0 0 40px var(--bs-purple); + } + 33.33% { + background-color: var(--bs-cyan); + box-shadow: 0 0 20px var(--bs-cyan), 0 0 40px var(--bs-cyan); + } + 50% { + background-color: var(--bs-yellow); + box-shadow: 0 0 20px var(--bs-yellow), 0 0 40px var(--bs-yellow); + } + 66.66% { + background-color: var(--bs-green); + box-shadow: 0 0 20px var(--bs-green), 0 0 40px var(--bs-green); + } + 83.33% { + background-color: var(--bs-orange); + box-shadow: 0 0 20px var(--bs-orange), 0 0 40px var(--bs-orange); + } +} + +@keyframes wiggle { + 0%, 100% { transform: rotate(0deg); } + 25% { transform: rotate(-2deg); } + 75% { transform: rotate(2deg); } +} + +@keyframes pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); } +} + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +@keyframes rainbowText { + 0% { color: var(--bs-red); } + 14.28% { color: var(--bs-orange); } + 28.57% { color: var(--bs-yellow); } + 42.85% { color: var(--bs-green); } + 57.14% { color: var(--bs-cyan); } + 71.42% { color: var(--bs-purple); } + 85.71% { color: var(--bs-pink); } + 100% { color: var(--bs-red); } +} + +@keyframes shine { + 0% { left: -100%; } + 50% { left: 100%; } + 100% { left: 100%; } +} + +@keyframes slayFloat { + 0% { + transform: translateY(0) scale(0.5); + opacity: 0; + } + 20% { + transform: translateY(-20px) scale(1); + opacity: 1; + } + 80% { + transform: translateY(-60px) scale(1.2); + opacity: 0.8; + } + 100% { + transform: translateY(-100px) scale(1.5); + opacity: 0; + } +} + +/* 🎭 BONKERS MODE CLASSES 🎭 */ +.bonkers-mode { + transition: all 0.3s ease-in-out; +} + +.bonkers-mode .btn { + animation: discoFlash 0.3s infinite, wiggle 0.2s infinite; + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan), var(--bs-yellow), var(--bs-green), var(--bs-orange), var(--bs-red)); + background-size: 400% 400%; + animation: discoFlash 0.3s infinite, wiggle 0.2s infinite, rainbowGradient 1s ease infinite; + border: 4px solid var(--bs-white); + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; + transition: all 0.2s ease; +} + +.bonkers-mode .btn:hover { + animation: discoFlash 0.2s infinite, wiggle 0.1s infinite, rainbowGradient 0.5s ease infinite; + box-shadow: 0 0 30px var(--bs-pink), 0 0 60px var(--bs-purple); +} + +.bonkers-mode .btn::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255,255,255,0.5), transparent); + transform: rotate(45deg); + animation: spin 0.5s linear infinite; +} + +.bonkers-mode .navbar { + background: linear-gradient(90deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan), var(--bs-yellow), var(--bs-green), var(--bs-orange), var(--bs-red)); + background-size: 200% 200%; + animation: rainbowGradient 2s ease infinite; + box-shadow: 0 0 50px rgba(255, 105, 180, 0.9); + height: auto !important; + min-height: 56px; +} + +.bonkers-mode .navbar-brand { + animation: rainbowText 0.8s infinite, wiggle 0.4s infinite; + font-size: 1.8em; + text-shadow: 3px 3px 6px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; +} + +.bonkers-mode .navbar-brand::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255,255,255,0.3), transparent); + transform: rotate(45deg); + animation: spin 2s linear infinite; +} + +.bonkers-mode .navbar-nav .nav-link { + animation: rainbowText 1.2s infinite, wiggle 0.3s infinite; + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + border: 2px solid transparent; + border-radius: 8px; + padding: 8px 16px; + margin: 0 4px; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +.bonkers-mode .navbar-nav .nav-link::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); + animation: shine 1.5s ease-in-out infinite; +} + +.bonkers-mode .navbar-nav .nav-link:hover { + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + border-color: var(--bs-white); + box-shadow: 0 0 20px var(--bs-pink); + animation: discoFlash 0.5s infinite, wiggle 0.2s infinite; +} + +.bonkers-mode .navbar-nav .nav-link.active { + background: linear-gradient(45deg, var(--bs-yellow), var(--bs-orange)); + border-color: var(--bs-white); + box-shadow: 0 0 25px var(--bs-yellow); + animation: discoFlash 0.8s infinite, wiggle 0.3s infinite; +} + +.bonkers-mode .navbar-text { + animation: rainbowText 1.5s infinite, wiggle 0.5s infinite; + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + border: 2px solid var(--bs-white); + border-radius: 8px; + padding: 6px 12px; + background: linear-gradient(45deg, var(--bs-cyan), var(--bs-blue)); + box-shadow: 0 0 15px var(--bs-cyan); +} + +.bonkers-mode .navbar-toggler { + border: 3px solid var(--bs-white); + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + animation: discoFlash 0.6s infinite, wiggle 0.4s infinite; + box-shadow: 0 0 20px var(--bs-pink); +} + +.bonkers-mode .navbar-toggler:focus { + box-shadow: 0 0 30px var(--bs-pink), 0 0 0 0.2rem rgba(255, 105, 180, 0.5); +} + +.bonkers-mode .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 1)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + animation: spin 1s linear infinite; +} + +.bonkers-mode .dropdown-menu { + background: linear-gradient(135deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan)); + border: 3px solid var(--bs-white); + box-shadow: 0 0 30px rgba(255,105,180,0.8); + animation: rainbowGradient 2s ease infinite; +} + +.bonkers-mode .dropdown-item { + animation: rainbowText 1.8s infinite, wiggle 0.6s infinite; + font-weight: bold; + text-shadow: 1px 1px 2px rgba(0,0,0,0.5); + border-bottom: 1px solid rgba(255,255,255,0.3); + transition: all 0.3s ease; +} + +.bonkers-mode .dropdown-item:hover { + background: linear-gradient(45deg, var(--bs-yellow), var(--bs-orange)); + color: var(--bs-white); + box-shadow: 0 0 15px var(--bs-yellow); + animation: discoFlash 0.5s infinite, wiggle 0.3s infinite; +} + +.bonkers-mode .navbar-collapse { + background: linear-gradient(135deg, rgba(255,105,180,0.1), rgba(138,43,226,0.1)); + border-radius: 8px; + margin-top: 8px; + padding: 8px; + border: 2px solid var(--bs-pink); +} + +.bonkers-mode h1, .bonkers-mode h2, .bonkers-mode h3 { + animation: rainbowText 1.5s infinite; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); +} + +.bonkers-mode .table { + background: linear-gradient(135deg, rgba(255,105,180,0.2), rgba(138,43,226,0.2), rgba(0,255,255,0.2)); + animation: rainbowGradient 3s ease infinite; + border: 3px solid var(--bs-pink); + box-shadow: 0 0 30px rgba(255,105,180,0.5); +} + +.bonkers-mode .table th { + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + color: var(--bs-white); + animation: discoFlash 0.8s infinite; + text-shadow: 1px 1px 2px rgba(0,0,0,0.5); + font-size: 1.1em; +} + +.bonkers-mode .form-control { + border: 3px solid var(--bs-pink); + box-shadow: 0 0 15px var(--bs-pink); + animation: pulse 0.6s infinite; +} + +.bonkers-mode .alert { + animation: discoFlash 0.6s infinite, wiggle 0.3s infinite; + border: 4px solid var(--bs-white); + font-weight: bold; + font-size: 1.1em; +} + +.bonkers-mode .card { + background: linear-gradient(45deg, rgba(255,105,180,0.2), rgba(138,43,226,0.2)); + border: 3px solid var(--bs-purple); + box-shadow: 0 0 35px rgba(138,43,226,0.6); + animation: pulse 1s infinite; +} + +.bonkers-mode .modal-content { + background: linear-gradient(135deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan)); + border: 4px solid var(--bs-white); + box-shadow: 0 0 50px rgba(255,105,180,0.8); + animation: rainbowGradient 2s ease infinite; +} + +.bonkers-mode .modal-header { + background: linear-gradient(90deg, var(--bs-yellow), var(--bs-orange)); + animation: discoFlash 0.8s infinite; + font-size: 1.2em; +} + +.bonkers-mode .number-input-wrapper { + animation: wiggle 0.4s infinite; +} + +.bonkers-mode .number-input-wrapper .btn { + animation: discoFlash 0.3s infinite, wiggle 0.2s infinite; +} + +/* Enhanced mode styles (for future use) */ +[data-website-mode="enhanced"] .btn { + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan), var(--bs-yellow), var(--bs-green), var(--bs-orange), var(--bs-red)); + background-size: 400% 400%; + animation: rainbowGradient 1s ease infinite; + border: 4px solid var(--bs-white); + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; + transition: all 0.2s ease; +} + +[data-website-mode="enhanced"] .btn:hover { + animation: rainbowGradient 0.5s ease infinite; + box-shadow: 0 0 30px var(--bs-pink), 0 0 60px var(--bs-purple); +} + +[data-website-mode="enhanced"] .btn::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255,255,255,0.5), transparent); + transform: rotate(45deg); + animation: spin 0.5s linear infinite; +} + +[data-website-mode="enhanced"] .navbar { + background: linear-gradient(90deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan), var(--bs-yellow), var(--bs-green), var(--bs-orange), var(--bs-red)); + background-size: 200% 200%; + animation: rainbowGradient 2s ease infinite; + box-shadow: 0 0 50px rgba(255, 105, 180, 0.9); + height: auto !important; + min-height: 56px; +} + +[data-website-mode="enhanced"] .navbar-brand { + animation: rainbowText 0.8s infinite; + font-size: 1.8em; + text-shadow: 3px 3px 6px rgba(0,0,0,0.5); + position: relative; + overflow: hidden; +} + +[data-website-mode="enhanced"] .navbar-brand::before { + content: ''; + position: absolute; + top: -50%; + left: -50%; + width: 200%; + height: 200%; + background: linear-gradient(45deg, transparent, rgba(255,255,255,0.3), transparent); + transform: rotate(45deg); + animation: spin 2s linear infinite; +} + +[data-website-mode="enhanced"] .navbar-nav .nav-link { + animation: rainbowText 1.2s infinite; + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + border: 2px solid transparent; + border-radius: 8px; + padding: 8px 16px; + margin: 0 4px; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} + +[data-website-mode="enhanced"] .navbar-nav .nav-link::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent); + animation: shine 1.5s ease-in-out infinite; +} + +[data-website-mode="enhanced"] .navbar-nav .nav-link:hover { + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + border-color: var(--bs-white); + box-shadow: 0 0 20px var(--bs-pink); +} + +[data-website-mode="enhanced"] .navbar-nav .nav-link.active { + background: linear-gradient(45deg, var(--bs-yellow), var(--bs-orange)); + border-color: var(--bs-white); + box-shadow: 0 0 25px var(--bs-yellow); +} + +[data-website-mode="enhanced"] .navbar-text { + animation: rainbowText 1.5s infinite; + font-weight: bold; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + border: 2px solid var(--bs-white); + border-radius: 8px; + padding: 6px 12px; + background: linear-gradient(45deg, var(--bs-cyan), var(--bs-blue)); + box-shadow: 0 0 15px var(--bs-cyan); +} + +[data-website-mode="enhanced"] .navbar-toggler { + border: 3px solid var(--bs-white); + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + animation: rainbowGradient 0.6s ease infinite; + box-shadow: 0 0 20px var(--bs-pink); +} + +[data-website-mode="enhanced"] .navbar-toggler:focus { + box-shadow: 0 0 30px var(--bs-pink), 0 0 0 0.2rem rgba(255, 105, 180, 0.5); +} + +[data-website-mode="enhanced"] .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 1)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + animation: spin 1s linear infinite; +} + +[data-website-mode="enhanced"] .dropdown-menu { + background: linear-gradient(135deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan)); + border: 3px solid var(--bs-white); + box-shadow: 0 0 30px rgba(255,105,180,0.8); + animation: rainbowGradient 2s ease infinite; +} + +[data-website-mode="enhanced"] .dropdown-item { + animation: rainbowText 1.8s infinite; + font-weight: bold; + text-shadow: 1px 1px 2px rgba(0,0,0,0.5); + border-bottom: 1px solid rgba(255,255,255,0.3); + transition: all 0.3s ease; +} + +[data-website-mode="enhanced"] .dropdown-item:hover { + background: linear-gradient(45deg, var(--bs-yellow), var(--bs-orange)); + color: var(--bs-white); + box-shadow: 0 0 15px var(--bs-yellow); +} + +[data-website-mode="enhanced"] .navbar-collapse { + background: linear-gradient(135deg, rgba(255,105,180,0.1), rgba(138,43,226,0.1)); + border-radius: 8px; + margin-top: 8px; + padding: 8px; + border: 2px solid var(--bs-pink); +} + +[data-website-mode="enhanced"] h1, [data-website-mode="enhanced"] h2, [data-website-mode="enhanced"] h3 { + animation: rainbowText 1.5s infinite; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); +} + +[data-website-mode="enhanced"] .table { + background: linear-gradient(135deg, rgba(255,105,180,0.2), rgba(138,43,226,0.2), rgba(0,255,255,0.2)); + animation: rainbowGradient 3s ease infinite; + border: 3px solid var(--bs-pink); + box-shadow: 0 0 30px rgba(255,105,180,0.5); +} + +[data-website-mode="enhanced"] .table th { + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple)); + color: var(--bs-white); + animation: rainbowGradient 0.8s ease infinite; + text-shadow: 1px 1px 2px rgba(0,0,0,0.5); + font-size: 1.1em; +} + +[data-website-mode="enhanced"] .form-control { + border: 3px solid var(--bs-pink); + box-shadow: 0 0 15px var(--bs-pink); +} + +[data-website-mode="enhanced"] .alert { + animation: rainbowGradient 0.6s ease infinite; + border: 4px solid var(--bs-white); + font-weight: bold; + font-size: 1.1em; +} + +[data-website-mode="enhanced"] .card { + background: linear-gradient(45deg, rgba(255,105,180,0.2), rgba(138,43,226,0.2)); + border: 3px solid var(--bs-purple); + box-shadow: 0 0 35px rgba(138,43,226,0.6); +} + +[data-website-mode="enhanced"] .modal-content { + background: linear-gradient(135deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan)); + border: 4px solid var(--bs-white); + box-shadow: 0 0 50px rgba(255,105,180,0.8); + animation: rainbowGradient 2s ease infinite; +} + +[data-website-mode="enhanced"] .modal-header { + background: linear-gradient(90deg, var(--bs-yellow), var(--bs-orange)); + animation: rainbowGradient 0.8s ease infinite; + font-size: 1.2em; +} + +[data-website-mode="enhanced"] .number-input-wrapper { +} + +[data-website-mode="enhanced"] .number-input-wrapper .btn { + animation: rainbowGradient 0.3s ease infinite; +} + +/* Emoji Footprint Animation */ +.emoji-footprint { + position: absolute; + font-size: 1.6rem; + pointer-events: none; + animation: emojiFade 1s ease-out forwards; + transform: translate(-50%, -50%) scale(1); + opacity: 1; + z-index: 9999; + text-shadow: + 0 0 4px #ff00bf, + 0 0 8px #ff80df, + 0 0 12px #ffccff; +} + +@keyframes emojiFade { + 0% { + transform: translate(-50%, -50%) scale(1); + opacity: 1; + } + 50% { + transform: translate(-50%, -50%) scale(1.5); + opacity: 0.7; + } + 100% { + transform: translate(-50%, -50%) scale(2); + opacity: 0; + } +} + +/* 💅 SLAY TEXT EFFECTS 💅 */ +.slay-text { + position: fixed; + font-size: 2rem; + font-weight: bold; + pointer-events: none; + z-index: 10000; + animation: slayFloat 3s ease-out forwards; + text-shadow: + 0 0 10px #ff00bf, + 0 0 20px #ff80df, + 0 0 30px #ffccff, + 2px 2px 4px rgba(0,0,0,0.5); + background: linear-gradient(45deg, var(--bs-pink), var(--bs-purple), var(--bs-cyan), var(--bs-yellow)); + background-size: 400% 400%; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + background-clip: text; + animation: slayFloat 3s ease-out forwards, rainbowGradient 1s ease infinite; +} diff --git a/config/packages/twig.php b/config/packages/twig.php index d08fe3f..1c06a5b 100644 --- a/config/packages/twig.php +++ b/config/packages/twig.php @@ -1,17 +1,16 @@ extension('twig', [ - 'file_name_pattern' => '*.twig', - 'globals' => [ - 'favicon' => '@App\Service\Favicon', - ], - ]); +return static function ( + ContainerConfigurator $containerConfigurator, + TwigConfig $twig, + ): void { if ($containerConfigurator->env() === 'test') { - $containerConfigurator->extension('twig', [ - 'strict_variables' => true, - ]); + $twig->strictVariables(true); } + $twig->formThemes(['bootstrap_5_layout.html.twig']); + $twig->fileNamePattern('*.twig'); + $twig->global('favicon', '@App\Service\Favicon'); }; diff --git a/templates/_form.html.twig b/templates/_form.html.twig index bf20b98..e0ed7ee 100644 --- a/templates/_form.html.twig +++ b/templates/_form.html.twig @@ -1,4 +1,4 @@ -{{ form_start(form) }} - {{ form_widget(form) }} - +{{ form_start(form, {'attr': {'class': 'mb-3'}}) }} + {{ form_widget(form, {'attr': {'class': 'form-control'}}) }} + {{ form_end(form) }} diff --git a/templates/base.html.twig b/templates/base.html.twig index 942c876..6e78f0a 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -11,19 +11,53 @@ {% endblock %} -
    -

    Hello {{ app.request.cookies.get('username', 'nobody') }} - change name

    -