From 300ae8b2d57029ad525b965e4ef6c963bb123b11 Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:32:15 +0100 Subject: [PATCH 01/12] Add local Docker Compose stack with MySQL for setup testing --- .env.sample | 13 +- composer.json | 88 ++++++------ config/bundles.php | 3 - config/packages/dev/swiftmailer.yaml | 3 - config/packages/sensio_framework_extra.yaml | 3 - config/packages/swiftmailer.yaml | 9 -- config/packages/test/swiftmailer.yaml | 2 - config/routes/annotations.yaml | 4 +- docker-compose.yml | 54 ++++++-- src/Controller/AdHocMeetingController.php | 13 +- src/Controller/AdminController.php | 11 +- src/Controller/AdressbookController.php | 7 +- src/Controller/AtendeelistController.php | 7 +- .../ChangePermissionsController.php | 17 +-- src/Controller/ConfirmController.php | 7 +- src/Controller/CreateEventsController.php | 7 +- src/Controller/CronController.php | 7 +- src/Controller/DashboardController.php | 6 +- src/Controller/DayListController.php | 12 +- src/Controller/HealthCheckController.php | 7 +- src/Controller/IcalController.php | 11 +- src/Controller/InvitationController.php | 11 +- src/Controller/JoinController.php | 9 +- src/Controller/LoginController.php | 17 +-- src/Controller/LoginControllerKeycloak.php | 22 ++- src/Controller/ParticipantController.php | 7 +- src/Controller/ReminderLizenseController.php | 7 +- src/Controller/RepeatSendController.php | 12 +- src/Controller/RoomController.php | 36 ++--- src/Controller/ScheduleController.php | 51 +++---- src/Controller/ShareLinkController.php | 35 ++--- src/Controller/StandortController.php | 32 ++--- src/Controller/StornoController.php | 12 +- .../TransferOwnershipController.php | 7 +- src/Controller/api/APILicenseController.php | 7 +- src/Controller/api/APIRoomController.php | 22 ++- src/Controller/api/APIUserController.php | 23 ++-- src/Service/MailerService.php | 128 +++++++++--------- 38 files changed, 333 insertions(+), 396 deletions(-) delete mode 100644 config/packages/dev/swiftmailer.yaml delete mode 100644 config/packages/sensio_framework_extra.yaml delete mode 100644 config/packages/swiftmailer.yaml delete mode 100644 config/packages/test/swiftmailer.yaml diff --git a/.env.sample b/.env.sample index bf70dbb..34de2b3 100644 --- a/.env.sample +++ b/.env.sample @@ -1,18 +1,11 @@ -DATABASE_URL=mysql://:@:/ -DATABSE_SERVER= - +DATABASE_URL=mysql://app:app@db:3306/open_event_manager?serverVersion=8.0&charset=utf8mb4 ###> symfony/framework-bundle ### APP_ENV=prod APP_DEBUG=0 APP_SECRET= -###> symfony/swift_mailer ### -MAILER_HOST= -MAILER_PORT= -MAILER_PASSWORD= -MAILER_USERNAME= -MAILER_ENCRYPTION= -MAILER_TRANSPORT=smtp +###> symfony/mailer ### +MAILER_DSN=smtp://localhost ###ODC Parameters### imprint= diff --git a/composer.json b/composer.json index 20a15a2..369404d 100644 --- a/composer.json +++ b/composer.json @@ -2,14 +2,13 @@ "type": "project", "license": "proprietary", "require": { - "php": "^7.4", + "php": "^8.2", "ext-ctype": "*", "ext-iconv": "*", - "composer/package-versions-deprecated": "^1.10", - "doctrine/annotations": "^1.0", - "doctrine/doctrine-bundle": "^2.5", - "doctrine/doctrine-migrations-bundle": "^3.2", - "doctrine/orm": "^2.10", + "doctrine/annotations": "^2.0", + "doctrine/doctrine-bundle": "^2.13", + "doctrine/doctrine-migrations-bundle": "^3.4", + "doctrine/orm": "^3.3", "dpolac/twig-lambda": "^1.0", "eluceo/ical": "0.16.*", "endroid/qr-code-bundle": "^4.0", @@ -21,53 +20,49 @@ "phpdocumentor/reflection-docblock": "^5.3", "phpoffice/phpspreadsheet": "^1.17", "phpstan/phpdoc-parser": "^1.2", - "sensio/framework-extra-bundle": "^5.4", "stevenmaguire/oauth2-keycloak": "^2.2", "symfony/apache-pack": "^1.0", - "symfony/asset": "5.4.*", - "symfony/console": "5.4.*", - "symfony/dotenv": "5.4.*", - "symfony/expression-language": "5.4.*", - "symfony/flex": "^1.3.1", - "symfony/form": "5.4.*", - "symfony/framework-bundle": "5.4.*", - "symfony/http-client": "5.4.*", - "symfony/intl": "5.4.*", - "symfony/mailer": "5.4.*", - "symfony/monolog-bundle": "^3.1", - "symfony/process": "5.4.*", - "symfony/property-access": "5.4.*", - "symfony/property-info": "5.4.*", - "symfony/proxy-manager-bridge": "5.4.*", - "symfony/security-bundle": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/swiftmailer-bundle": "^3.4", - "symfony/templating": "5.4.*", - "symfony/translation": "5.4.*", - "symfony/twig-bundle": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/web-link": "5.4.*", - "symfony/webpack-encore-bundle": "^1.7", - "symfony/yaml": "5.4.*", + "symfony/asset": "7.4.*", + "symfony/console": "7.4.*", + "symfony/dotenv": "7.4.*", + "symfony/expression-language": "7.4.*", + "symfony/flex": "^2.8", + "symfony/form": "7.4.*", + "symfony/framework-bundle": "7.4.*", + "symfony/http-client": "7.4.*", + "symfony/intl": "7.4.*", + "symfony/mailer": "7.4.*", + "symfony/monolog-bundle": "^4.0", + "symfony/process": "7.4.*", + "symfony/property-access": "7.4.*", + "symfony/property-info": "7.4.*", + "symfony/proxy-manager-bridge": "7.4.*", + "symfony/security-bundle": "7.4.*", + "symfony/serializer": "7.4.*", + "symfony/translation": "7.4.*", + "symfony/twig-bundle": "7.4.*", + "symfony/validator": "7.4.*", + "symfony/web-link": "7.4.*", + "symfony/webpack-encore-bundle": "^2.0", + "symfony/yaml": "7.4.*", "twig/cssinliner-extra": "^3.0", - "twig/extra-bundle": "~3.1", + "twig/extra-bundle": "^3.0", "twig/inky-extra": "^3.0", "twig/intl-extra": "^3.2", "twig/markdown-extra": "^3.3", - "twig/twig": "^2.0" + "twig/twig": "^3.0" }, "require-dev": { "dama/doctrine-test-bundle": "^6.5", "doctrine/doctrine-fixtures-bundle": "^3.4", - "phpunit/phpunit": "^9.5", - "symfony/browser-kit": "5.4.*", - "symfony/css-selector": "5.4.*", - "symfony/debug-bundle": "5.4.*", - "symfony/maker-bundle": "^1.0", - "symfony/phpunit-bridge": "^5.4", - "symfony/stopwatch": "5.4.*", - "symfony/web-profiler-bundle": "5.4.*", - "symfony/web-server-bundle": "4.4.*" + "phpunit/phpunit": "^11.0", + "symfony/browser-kit": "7.4.*", + "symfony/css-selector": "7.4.*", + "symfony/debug-bundle": "7.4.*", + "symfony/maker-bundle": "^1.65", + "symfony/phpunit-bridge": "^7.4", + "symfony/stopwatch": "7.4.*", + "symfony/web-profiler-bundle": "7.4.*" }, "config": { "preferred-install": { @@ -88,10 +83,7 @@ "replace": { "paragonie/random_compat": "2.*", "symfony/polyfill-ctype": "*", - "symfony/polyfill-iconv": "*", - "symfony/polyfill-php71": "*", - "symfony/polyfill-php70": "*", - "symfony/polyfill-php56": "*" + "symfony/polyfill-iconv": "*" }, "scripts": { "auto-scripts": { @@ -111,7 +103,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "5.4.*" + "require": "7.4.*" } } } diff --git a/config/bundles.php b/config/bundles.php index e8e4621..6649ba0 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -4,7 +4,6 @@ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], - Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], @@ -12,10 +11,8 @@ Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], - Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true], Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true], KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], - Symfony\Bundle\WebServerBundle\WebServerBundle::class => ['dev' => true], DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], JMS\I18nRoutingBundle\JMSI18nRoutingBundle::class => ['all' => true], diff --git a/config/packages/dev/swiftmailer.yaml b/config/packages/dev/swiftmailer.yaml deleted file mode 100644 index 9b8ff33..0000000 --- a/config/packages/dev/swiftmailer.yaml +++ /dev/null @@ -1,3 +0,0 @@ -# See https://symfony.com/doc/current/email/dev_environment.html -swiftmailer: - delivery_addresses: ['%env(DEV_EMAIL)%'] diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml deleted file mode 100644 index 1821ccc..0000000 --- a/config/packages/sensio_framework_extra.yaml +++ /dev/null @@ -1,3 +0,0 @@ -sensio_framework_extra: - router: - annotations: false diff --git a/config/packages/swiftmailer.yaml b/config/packages/swiftmailer.yaml deleted file mode 100644 index 0dbfe89..0000000 --- a/config/packages/swiftmailer.yaml +++ /dev/null @@ -1,9 +0,0 @@ -swiftmailer: - spool: { type: 'memory' } - disable_delivery: false - host: '%env(MAILER_HOST)%' - password: '%env(MAILER_PASSWORD)%' - username: '%env(MAILER_USERNAME)%' - transport: '%env(MAILER_TRANSPORT)%' - encryption: '%env(MAILER_ENCRYPTION)%' - port: '%env(MAILER_PORT)%' diff --git a/config/packages/test/swiftmailer.yaml b/config/packages/test/swiftmailer.yaml deleted file mode 100644 index f438078..0000000 --- a/config/packages/test/swiftmailer.yaml +++ /dev/null @@ -1,2 +0,0 @@ -swiftmailer: - disable_delivery: true diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml index e92efc5..2d2ab38 100644 --- a/config/routes/annotations.yaml +++ b/config/routes/annotations.yaml @@ -1,7 +1,7 @@ controllers: resource: ../../src/Controller/ - type: annotation + type: attribute kernel: resource: ../../src/Kernel.php - type: annotation + type: attribute diff --git a/docker-compose.yml b/docker-compose.yml index e4a9e5e..edc3034 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,24 +1,54 @@ -version: '3.7' +version: '3.9' services: - traefik: - image: traefik:1.7 - command: --docker --docker.exposedbydefault=false + image: traefik:2.11 + command: + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --entrypoints.web.address=:80 ports: - "80:80" volumes: - - /var/run/docker.sock:/var/run/docker.sock + - /var/run/docker.sock:/var/run/docker.sock:ro app: - image: thecodingmachine/php:7.3-v2-apache-node10 + image: thecodingmachine/php:8.2-v4-apache + depends_on: + db: + condition: service_healthy labels: - traefik.enable=true - - traefik.backend=odc - - traefik.frontend.rule=Host:odc.localhost + - traefik.http.routers.odc.rule=Host(`odc.localhost`) + - traefik.http.routers.odc.entrypoints=web + - traefik.http.services.odc.loadbalancer.server.port=80 + environment: + APACHE_DOCUMENT_ROOT: public/ + PHP_EXTENSION_XDEBUG: 1 + PHP_INI_MEMORY_LIMIT: 1G + DATABASE_URL: mysql://app:app@db:3306/open_event_manager?serverVersion=8.0&charset=utf8mb4 + APP_ENV: dev + APP_DEBUG: 1 + volumes: + - .:/var/www/html:rw + + db: + image: mysql:8.0 + command: --default-authentication-plugin=mysql_native_password environment: - APACHE_DOCUMENT_ROOT: "public/" - PHP_EXTENSION_XDEBUG: "1" - PHP_INI_MEMORY_LIMIT: "1G" + MYSQL_DATABASE: open_event_manager + MYSQL_USER: app + MYSQL_PASSWORD: app + MYSQL_ROOT_PASSWORD: root + ports: + - "3306:3306" volumes: - - .:/var/www/html:rw \ No newline at end of file + - db_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot"] + interval: 10s + timeout: 5s + retries: 10 + +volumes: + db_data: diff --git a/src/Controller/AdHocMeetingController.php b/src/Controller/AdHocMeetingController.php index e68cefc..623f8ea 100644 --- a/src/Controller/AdHocMeetingController.php +++ b/src/Controller/AdHocMeetingController.php @@ -9,19 +9,18 @@ use App\Service\ServerUserManagment; use App\Service\UserService; use phpDocumentor\Reflection\Types\This; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class AdHocMeetingController extends AbstractController { - /** - * @Route("/room/adhoc/meeting/{userId}/{serverId}", name="add_hoc_meeting") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "id"}}) - * @ParamConverter("standort", class="App\Entity\Standort",options={"mapping": {"serverId": "id"}}) - */ + #[Route("/room/adhoc/meeting/{userId}/{serverId}", name: "add_hoc_meeting")] + #[MapEntity(expr: "repository.findOneBy({'id': userId})")] + #[MapEntity(expr: "repository.findOneBy({'id': serverId})")] + public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response { diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 90b26c9..1491ca5 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -6,10 +6,10 @@ use App\Entity\Standort; use App\Service\AdminService; use Doctrine\DBAL\Types\DateType; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -17,10 +17,9 @@ class AdminController extends AbstractController { - /** - * @Route("/admin/server/{server}", name="admin_server") - * @ParamConverter("server", class="App\Entity\Server",options={"mapping": {"server": "id"}}) - */ + #[Route("/admin/server/{server}", name: "admin_server")] + #[MapEntity(expr: "repository.findOneBy({'id': server})")] + public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) { $countPart = 0; diff --git a/src/Controller/AdressbookController.php b/src/Controller/AdressbookController.php index 2f055dd..db1d079 100644 --- a/src/Controller/AdressbookController.php +++ b/src/Controller/AdressbookController.php @@ -6,13 +6,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class AdressbookController extends AbstractController { - /** - * @Route("/room/adressbook/remove", name="adressbook_remove_user") - */ + #[Route("/room/adressbook/remove", name: "adressbook_remove_user")] + public function index(Request $request): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('id')); diff --git a/src/Controller/AtendeelistController.php b/src/Controller/AtendeelistController.php index 97b9ddb..b7f149a 100644 --- a/src/Controller/AtendeelistController.php +++ b/src/Controller/AtendeelistController.php @@ -8,13 +8,12 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class AtendeelistController extends AbstractController { - /** - * @Route("/room/atendeelist/download/excel/{uid}", name="atendeelist_download_excel") - */ + #[Route("/room/atendeelist/download/excel/{uid}", name: "atendeelist_download_excel")] + public function index($uid, TeilnehmerExcelService $teilnehmerExcelService): Response { diff --git a/src/Controller/ChangePermissionsController.php b/src/Controller/ChangePermissionsController.php index 4bcbed0..7d075e9 100644 --- a/src/Controller/ChangePermissionsController.php +++ b/src/Controller/ChangePermissionsController.php @@ -9,14 +9,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class ChangePermissionsController extends AbstractController { - /** - * @Route("/room/change/permissions/shareScreen", name="change_permissions_screenShare") - */ + #[Route("/room/change/permissions/shareScreen", name: "change_permissions_screenShare")] + public function shareScreen(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -33,9 +32,8 @@ public function shareScreen(Request $request, TranslatorInterface $translator, P } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - /** - * @Route("/room/change/permissions/privateMessage", name="change_permissions_privateMessage") - */ + #[Route("/room/change/permissions/privateMessage", name: "change_permissions_privateMessage")] + public function privateMesage(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -52,9 +50,8 @@ public function privateMesage(Request $request, TranslatorInterface $translator, } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - /** - * @Route("/room/addModerator", name="room_add_moderator") - */ + #[Route("/room/addModerator", name: "room_add_moderator")] + public function roomTransferModerator(Request $request, PermissionChangeService $permissionChangeService, TranslatorInterface $translator) { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); diff --git a/src/Controller/ConfirmController.php b/src/Controller/ConfirmController.php index 1ca33a1..2d4c010 100644 --- a/src/Controller/ConfirmController.php +++ b/src/Controller/ConfirmController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class ConfirmController extends AbstractController { @@ -20,9 +20,8 @@ public function __construct(LoggerService $logger) $this->logger = $logger; } - /** - * @Route("/room/confirm/manuell", name="confirm_manuell") - */ + #[Route("/room/confirm/manuell", name: "confirm_manuell")] + public function index(Request $request, SubcriptionService $subcriptionService): Response { $subscriber = $this->getDoctrine()->getRepository(Subscriber::class)->find($request->get('id')); diff --git a/src/Controller/CreateEventsController.php b/src/Controller/CreateEventsController.php index 795b288..8bb4251 100644 --- a/src/Controller/CreateEventsController.php +++ b/src/Controller/CreateEventsController.php @@ -9,14 +9,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class CreateEventsController extends AbstractController { - /** - * @Route("/room/create/events", name="create_events") - */ + #[Route("/room/create/events", name: "create_events")] + public function index(Request $request, TranslatorInterface $translator, CloneService $cloneService): Response { $roomOld = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('roomId')); diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index 9c25396..8143107 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -10,13 +10,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class CronController extends AbstractController { - /** - * @Route("/cron/remember", name="cron_remember") - */ + #[Route("/cron/remember", name: "cron_remember")] + public function updateCronAkademie(Request $request, LoggerInterface $logger, UserService $userService, ReminderService $reminderService) { if ($request->get('token') !== $this->getParameter('cronToken')) { diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index b7f5932..f6ac60a 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -17,7 +17,7 @@ use Firebase\JWT\JWT; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; @@ -29,7 +29,7 @@ class DashboardController extends AbstractController { /** - * @Route("/", name="index") + #[Route("/", name: "index")] * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ @@ -56,7 +56,7 @@ public function index(Request $request, RoomSpaceService $roomSpaceService) /** - * @Route("/room/dashboard", name="dashboard") + #[Route("/room/dashboard", name: "dashboard")] * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ diff --git a/src/Controller/DayListController.php b/src/Controller/DayListController.php index 92b22bf..83527f7 100644 --- a/src/Controller/DayListController.php +++ b/src/Controller/DayListController.php @@ -9,15 +9,14 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class DayListController extends AbstractController { - /** - * @Route("/room/day/list", name="day_list") - */ + #[Route("/room/day/list", name: "day_list")] + public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelService): Response { $from = $request->get('from') ? new \DateTime($request->get('from')) : new \DateTime(); @@ -36,9 +35,8 @@ public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelS ->getResult(); return $this->file($teilnehmerExcelService->generateTeilnehmerDayList($rooms,md5(uniqid()) ), $from->format('d.m.Y').' - '.$to->format('d.m.Y') . '.xlsx', ResponseHeaderBag::DISPOSITION_INLINE); } - /** - * @Route("/room/day/list/modal", name="day_list_modal") - */ + #[Route("/room/day/list/modal", name: "day_list_modal")] + public function modal(Request $request, TeilnehmerExcelService $teilnehmerExcelService,TranslatorInterface $translator): Response { diff --git a/src/Controller/HealthCheckController.php b/src/Controller/HealthCheckController.php index 064af9b..d13d5b0 100644 --- a/src/Controller/HealthCheckController.php +++ b/src/Controller/HealthCheckController.php @@ -7,13 +7,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class HealthCheckController extends AbstractController { - /** - * @Route("/health/check", name="health_check",methods={"GET"}) - */ + #[Route("/health/check", name: "health_check",methods: ["GET"])] + public function index(): Response { try { diff --git a/src/Controller/IcalController.php b/src/Controller/IcalController.php index ff01301..b5fba39 100644 --- a/src/Controller/IcalController.php +++ b/src/Controller/IcalController.php @@ -10,19 +10,18 @@ use Eluceo\iCal\Component\Calendar; use Eluceo\iCal\Component\Event; use Eluceo\iCal\Property\Event\Organizer; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Cache\ItemInterface; class IcalController extends AbstractController { - /** - * @Route("/ical/{id}", name="ical") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "uid"}}) - */ + #[Route("/ical/{id}", name: "ical")] + #[MapEntity(expr: "repository.findOneBy({'uid': id})")] + public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response { diff --git a/src/Controller/InvitationController.php b/src/Controller/InvitationController.php index 698f8a4..c607b47 100644 --- a/src/Controller/InvitationController.php +++ b/src/Controller/InvitationController.php @@ -4,18 +4,17 @@ use App\Entity\User; use App\Service\InviteService; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; class InvitationController extends AbstractController { - /** - * @Route("/login/invitationAccept/{id}", name="invitation_accept") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "registerId"}}) - */ + #[Route("/login/invitationAccept/{id}", name: "invitation_accept")] + #[MapEntity(expr: "repository.findOneBy({'registerId': id})")] + public function index(InviteService $inviteService, User $user, Request $request): Response { diff --git a/src/Controller/JoinController.php b/src/Controller/JoinController.php index d332ec0..0625fd0 100644 --- a/src/Controller/JoinController.php +++ b/src/Controller/JoinController.php @@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Cache\ItemInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -27,10 +27,9 @@ public function __construct(ParameterBagInterface $parameterBag) $this->parameterBag = $parameterBag; } - /** - * @Route("/join/{slug}", name="join_index") - * @Route("/join", name="join_index_no_slug") - */ + #[Route("/join/{slug}", name: "join_index")] + #[Route("/join", name: "join_index_no_slug")] + public function index($slug = null, PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, HttpClientInterface $httpClient) { $data = array(); diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 70cd90c..0ef7164 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -10,22 +10,20 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginController extends AbstractController { - /** - * @Route("/login/auth0_login", name="login_auth0") - */ + #[Route("/login/auth0_login", name: "login_auth0")] + public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('auth0_main')->redirect(['user']); } - /** - * @Route("/login/auth0_login/check", name="connect_auth0_check") - */ + #[Route("/login/auth0_login/check", name: "connect_auth0_check")] + public function check(ClientRegistry $clientRegistry, Request $request) { // ** if you want to *authenticate* the user, then @@ -51,9 +49,8 @@ public function check(ClientRegistry $clientRegistry, Request $request) } - /** - * @Route("/room/logout_keycloak", name="logout_keycloak") - */ + #[Route("/room/logout_keycloak", name: "logout_keycloak")] + public function logout( ClientRegistry $clientRegistry, Request $request diff --git a/src/Controller/LoginControllerKeycloak.php b/src/Controller/LoginControllerKeycloak.php index d43c980..2e55ace 100644 --- a/src/Controller/LoginControllerKeycloak.php +++ b/src/Controller/LoginControllerKeycloak.php @@ -6,22 +6,20 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginControllerKeycloak extends AbstractController { - /** - * @Route("/login", name="login_keycloak") - */ + #[Route("/login", name: "login_keycloak")] + public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('keycloak_main')->redirect(['email','openid','profile']); } - /** - * @Route("/register", name="register_keycloak") - */ + #[Route("/register", name: "register_keycloak")] + public function register(ClientRegistry $clientRegistry): Response { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/protocol/openid-connect/registrations?client_id='. @@ -36,17 +34,15 @@ public function check(ClientRegistry $clientRegistry, Request $request) } - /** - * @Route("/login/keycloak_edit", name="connect_keycloak_edit") - */ + #[Route("/login/keycloak_edit", name: "connect_keycloak_edit")] + public function edit(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account'; return $this->redirect($url); } - /** - * @Route("/login/keycloak_password", name="connect_keycloak_password") - */ + #[Route("/login/keycloak_password", name: "connect_keycloak_password")] + public function password(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account/password'; diff --git a/src/Controller/ParticipantController.php b/src/Controller/ParticipantController.php index 578c132..872c705 100644 --- a/src/Controller/ParticipantController.php +++ b/src/Controller/ParticipantController.php @@ -7,15 +7,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function GuzzleHttp\Psr7\str; class ParticipantController extends AbstractController { - /** - * @Route("/room/participant", name="search_participant") - */ + #[Route("/room/participant", name: "search_participant")] + public function index(Request $request, TranslatorInterface $translator): Response { $string = $request->get('search'); diff --git a/src/Controller/ReminderLizenseController.php b/src/Controller/ReminderLizenseController.php index acb69db..fe13784 100644 --- a/src/Controller/ReminderLizenseController.php +++ b/src/Controller/ReminderLizenseController.php @@ -11,15 +11,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class ReminderLizenseController extends AbstractController { - /** - * @Route("/reminder/lizense", name="reminder_lizense") - */ + #[Route("/reminder/lizense", name: "reminder_lizense")] + public function index(LoggerInterface $logger, Request $request, MailerService $mailerService, TranslatorInterface $translator,ParameterBagInterface $parameterBag): Response { if ($request->get('token') !== $parameterBag->get('cronToken')) { diff --git a/src/Controller/RepeatSendController.php b/src/Controller/RepeatSendController.php index 9e22205..9bc84c3 100644 --- a/src/Controller/RepeatSendController.php +++ b/src/Controller/RepeatSendController.php @@ -10,14 +10,13 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class RepeatSendController extends AbstractController { - /** - * @Route("/rooms/repeat/sendAll", name="room_repeat_send") - */ + #[Route("/rooms/repeat/sendAll", name: "room_repeat_send")] + public function index(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); @@ -31,9 +30,8 @@ public function index(Request $request, UserService $userService, TranslatorInte } - /** - * @Route("/rooms/repeat/sendUser", name="room_repeat_user") - */ + #[Route("/rooms/repeat/sendUser", name: "room_repeat_user")] + public function toOneUser(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); diff --git a/src/Controller/RoomController.php b/src/Controller/RoomController.php index f183149..73b77b0 100644 --- a/src/Controller/RoomController.php +++ b/src/Controller/RoomController.php @@ -19,11 +19,11 @@ use App\Service\RoomService; use phpDocumentor\Reflection\Types\This; use Psr\Log\LoggerInterface; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class RoomController extends AbstractController @@ -37,9 +37,8 @@ public function __construct(TranslatorInterface $translator, LoggerService $logg $this->logger = $logger; } - /** - * @Route("/room/new", name="room_new") - */ + #[Route("/room/new", name: "room_new")] + public function newRoom(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserEventCreateService $userEventCreateService) { $roomOld = null; @@ -145,9 +144,8 @@ public function newRoom(Request $request, UserService $userService, TranslatorIn return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - /** - * @Route("/room/add-user", name="room_add_user") - */ + #[Route("/room/add-user", name: "room_add_user")] + public function roomAddUser(Request $request, InviteService $inviteService, UserService $userService) { $newMember = array(); @@ -191,10 +189,9 @@ public function roomAddUser(Request $request, InviteService $inviteService, User return $this->render('room/attendeeModal.twig', array('form' => $form->createView(), 'title' => $title, 'room' => $room)); } - /** - * @Route("/room/join/{t}/{room}", name="room_join") - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("/room/join/{t}/{room}", name: "room_join")] + #[MapEntity(mapping: ['room' => 'id'])] + public function joinRoom(RoomService $roomService, Rooms $room, $t) { @@ -207,9 +204,8 @@ function joinRoom(RoomService $roomService, Rooms $room, $t) return $this->redirectToRoute('dashboard', ['join_room' => $room->getId(), 'type' => $t]); } - /** - * @Route("/room/user/remove", name="room_user_remove") - */ + #[Route("/room/user/remove", name: "room_user_remove")] + public function roomUserRemove(Request $request, UserService $userService) { @@ -257,9 +253,8 @@ function roomUserRemove(Request $request, UserService $userService) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/room/remove", name="room_remove") - */ + #[Route("/room/remove", name: "room_remove")] + public function roomRemove(Request $request, UserService $userService) { @@ -284,9 +279,8 @@ function roomRemove(Request $request, UserService $userService) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/room/clone", name="room_clone") - */ + #[Route("/room/clone", name: "room_clone")] + public function roomClone(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment) { diff --git a/src/Controller/ScheduleController.php b/src/Controller/ScheduleController.php index 0b2d820..6b08d41 100644 --- a/src/Controller/ScheduleController.php +++ b/src/Controller/ScheduleController.php @@ -13,20 +13,19 @@ use App\Service\ServerUserManagment; use App\Service\UserEventCreateService; use App\Service\UserService; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class ScheduleController extends AbstractController { - /** - * @Route("room/schedule/new", name="schedule_admin_new") - */ + #[Route("room/schedule/new", name: "schedule_admin_new")] + public function new( Request $request, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserService $userService, UserEventCreateService $userEventCreateService): Response { if ($request->get('id')) { @@ -109,10 +108,9 @@ public function new( Request $request, TranslatorInterface $translator, ServerUs return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - /** - * @Route("room/schedule/admin/{id}", name="schedule_admin",methods={"GET"}) - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("room/schedule/admin/[id]", name: "schedule_admin",methods: ["GET"])] + #[MapEntity(mapping: ['room' => 'id'])] + public function index(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -125,10 +123,9 @@ public function index(Rooms $rooms, Request $request): Response ]); } - /** - * @Route("room/schedule/admin/add/{id}", name="schedule_admin_add",methods={"POST"}) - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("room/schedule/admin/add/[id]", name: "schedule_admin_add",methods: ["POST"])] + #[MapEntity(mapping: ['room' => 'id'])] + public function add(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -158,10 +155,9 @@ public function add(Rooms $rooms, Request $request): Response return new JsonResponse(array('error' => false)); } - /** - * @Route("room/schedule/admin/remove/{id}", name="schedule_admin_remove",methods={"DELETE"}) - * @ParamConverter("schedulingTime") - */ + #[Route("room/schedule/admin/remove/[id]", name: "schedule_admin_remove",methods: ["DELETE"])] + #[MapEntity] + public function remove(SchedulingTime $schedulingTime, Request $request): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { @@ -183,10 +179,9 @@ public function remove(SchedulingTime $schedulingTime, Request $request): Respon return new JsonResponse(array('error' => false)); } - /** - * @Route("room/schedule/admin/choose/{id}", name="schedule_admin_choose",methods={"GET"}) - * @ParamConverter("schedulingTime") - */ + #[Route("room/schedule/admin/choose/[id]", name: "schedule_admin_choose",methods: ["GET"])] + #[MapEntity] + public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { @@ -199,11 +194,10 @@ public function choose(SchedulingTime $schedulingTime, Request $request, Schedul return $this->redirectToRoute('dashboard', array('snack' => $text)); } - /** - * @Route("schedule/{scheduleId}/{userId}", name="schedule_public_main", methods={"GET"}) - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "uid"}}) - * @ParamConverter("scheduling", class="App\Entity\Scheduling",options={"mapping": {"scheduleId": "uid"}}) - */ + #[Route("schedule/[scheduleId]/[userId]", name: "schedule_public_main", methods: ["GET"])] + #[MapEntity(expr: "repository.findOneBy({'uid': userId})")] + #[MapEntity(expr: "repository.findOneBy({'uid': scheduleId})")] + public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response { if (!in_array($user, $scheduling->getRoom()->getUser()->toArray())) { @@ -221,9 +215,8 @@ public function public(Scheduling $scheduling, User $user, Request $request, Pex return $this->render('schedule/schedulePublic.html.twig', array('user' => $user, 'scheduling' => $scheduling, 'room' => $scheduling->getRoom(), 'standort' => $standort)); } - /** - * @Route("schedule/vote", name="schedule_public_vote", methods={"POST"}) - */ + #[Route("schedule/vote", name: "schedule_public_vote", methods: ["POST"])] + public function vote(Request $request, TranslatorInterface $translator): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('user')); diff --git a/src/Controller/ShareLinkController.php b/src/Controller/ShareLinkController.php index c8c8ae0..c023b9a 100644 --- a/src/Controller/ShareLinkController.php +++ b/src/Controller/ShareLinkController.php @@ -15,7 +15,6 @@ use App\Service\UserService; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; @@ -23,7 +22,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\Validator\Constraints\Json; use Symfony\Contracts\Translation\TranslatorInterface; use function Symfony\Component\String\s; @@ -40,10 +40,9 @@ public function __construct(EntityManagerInterface $entityManager, LoggerService } - /** - * @Route("/room/share/link/{id}", name="share_link") - * @ParamConverter("rooms") - */ + #[Route("/room/share/link/{id}", name: "share_link")] + #[MapEntity] + public function index(Rooms $rooms): Response { if (!$rooms || !$rooms->getModerator() == $this->getUser() || $rooms->getPublic() != true) { @@ -53,10 +52,9 @@ public function index(Rooms $rooms): Response } - /** - * @Route("/room/share/link/accetwaitinglist/{id}", name="accept_waitingList") - * @ParamConverter("waitinglist") - */ + #[Route("/room/share/link/accetwaitinglist/{id}", name: "accept_waitingList")] + #[MapEntity] + public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { @@ -68,10 +66,9 @@ public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $ return new JsonResponse(array('error' => true)); } - /** - * @Route("/room/share/link/deniewaitinglist/{id}", name="denie_waitingList") - * @ParamConverter("waitinglist") - */ + #[Route("/room/share/link/deniewaitinglist/{id}", name: "denie_waitingList")] + #[MapEntity] + public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response { @@ -116,9 +113,8 @@ public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $s } - /** - * @Route("/subscribe/self/{uid}", name="public_subscribe_participant") - */ + #[Route("/subscribe/self/{uid}", name: "public_subscribe_participant")] + public function participants($uid, Request $request, SubcriptionService $subcriptionService, TranslatorInterface $translator, PexelService $pexelService): Response { $rooms = new Rooms(); @@ -232,9 +228,8 @@ public function participants($uid, Request $request, SubcriptionService $subcrip } - /** - * @Route("/subscribe/optIn/{uid}", name="public_subscribe_doupleOptIn") - */ + #[Route("/subscribe/optIn/{uid}", name: "public_subscribe_doupleOptIn")] + public function doupleoptin($uid, SubcriptionService $subcriptionService, TranslatorInterface $translator, UserService $userService, PexelService $pexelService): Response { $subscriber = $this->em->getRepository(Subscriber::class)->findOneBy(array('uid' => $uid)); diff --git a/src/Controller/StandortController.php b/src/Controller/StandortController.php index 67fc89e..801017d 100644 --- a/src/Controller/StandortController.php +++ b/src/Controller/StandortController.php @@ -21,15 +21,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; class StandortController extends AbstractController { - /** - * @Route("/server/add", name="servers_add") - */ + #[Route("/server/add", name: "servers_add")] + public function serverAdd(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator) { if ($request->get('id')) { @@ -68,9 +67,8 @@ public function serverAdd(Request $request, ValidatorInterface $validator, Stand } - /** - * @Route("/server/enterprise", name="servers_enterprise") - */ + #[Route("/server/enterprise", name: "servers_enterprise")] + public function serverEnterprise(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator, LicenseService $licenseService) { @@ -100,9 +98,8 @@ public function serverEnterprise(Request $request, ValidatorInterface $validator } - /** - * @Route("/server/add-user", name="server_add_user") - */ + #[Route("/server/add-user", name: "server_add_user")] + public function roomAddUser(Request $request, InviteService $inviteService, StandortService $serverService, TranslatorInterface $translator) { $newMember = array(); @@ -139,9 +136,8 @@ public function roomAddUser(Request $request, InviteService $inviteService, Stan return $this->render('servers/permissionModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'users' => $server->getUser(), 'server' => $server)); } - /** - * @Route("/server/user/remove", name="server_user_remove") - */ + #[Route("/server/user/remove", name: "server_user_remove")] + public function serverUserRemove(Request $request, TranslatorInterface $translator) { @@ -160,9 +156,8 @@ function serverUserRemove(Request $request, TranslatorInterface $translator) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/server/delete", name="server_delete") - */ + #[Route("/server/delete", name: "server_delete")] + public function serverDelete(Request $request, TranslatorInterface $translator, StandortService $serverService) { @@ -187,9 +182,8 @@ function serverDelete(Request $request, TranslatorInterface $translator, Standor return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/server/check/email", name="server_check_email") - */ + #[Route("/server/check/email", name: "server_check_email")] + public function servercheckEmail(Request $request, TranslatorInterface $translator, MailerService $mailerService) { diff --git a/src/Controller/StornoController.php b/src/Controller/StornoController.php index 40b024c..0c957a3 100644 --- a/src/Controller/StornoController.php +++ b/src/Controller/StornoController.php @@ -10,14 +10,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class StornoController extends AbstractController { - /** - * @Route("/public/storno/start/{uidRoom}/{uidUser}", name="storno_index") - */ + #[Route("/public/storno/start/{uidRoom}/{uidUser}", name: "storno_index")] + public function index($uidRoom, $uidUser): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); @@ -35,9 +34,8 @@ public function index($uidRoom, $uidUser): Response 'room'=>$rooms, ]); } - /** - * @Route("/public/storno/accept/{uidRoom}/{uidUser}", name="storno_accept") - */ + #[Route("/public/storno/accept/{uidRoom}/{uidUser}", name: "storno_accept")] + public function accept($uidRoom, $uidUser, UserService $userService,TranslatorInterface $translator, NotificationService $notificationService): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); diff --git a/src/Controller/TransferOwnershipController.php b/src/Controller/TransferOwnershipController.php index 2d52d32..3fcc96d 100644 --- a/src/Controller/TransferOwnershipController.php +++ b/src/Controller/TransferOwnershipController.php @@ -12,7 +12,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class TransferOwnershipController extends AbstractController { @@ -31,9 +31,8 @@ public function __construct( $this->transferOwnerShipService = $transferOwnerShipService; } - /** - * @Route("/transfer/ownership", name="transfer_ownership") - */ + #[Route("/transfer/ownership", name: "transfer_ownership")] + public function index(Request $request): Response { $newOwner = $this->userRepository->find($request->get('new_user')); diff --git a/src/Controller/api/APILicenseController.php b/src/Controller/api/APILicenseController.php index 88da362..dbe8c5a 100644 --- a/src/Controller/api/APILicenseController.php +++ b/src/Controller/api/APILicenseController.php @@ -8,13 +8,12 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class APILicenseController extends AbstractController { - /** - * @Route("/api/v1/generateLicense", name="api_generate_license",methods={"POST"}) - */ + #[Route("/api/v1/generateLicense", name: "api_generate_license",methods: ["POST"])] + public function index(Request $request, LicenseService $licenseService): Response { return new JsonResponse($licenseService->generateNewLicense( diff --git a/src/Controller/api/APIRoomController.php b/src/Controller/api/APIRoomController.php index 0fc386c..933e193 100644 --- a/src/Controller/api/APIRoomController.php +++ b/src/Controller/api/APIRoomController.php @@ -16,14 +16,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use function GuzzleHttp\default_user_agent; class APIRoomController extends AbstractController { - /** - * @Route("/api/v1/room", name="api_room_create",methods={"POST"}) - */ + #[Route("/api/v1/room", name: "api_room_create",methods: ["POST"])] + public function index(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { @@ -60,9 +59,8 @@ public function index(LicenseService $licenseService, Request $request, Paramete return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich angelegt')); } - /** - * @Route("/api/v1/room", name="apiV1_roomDelete", methods={"DELETE"}) - */ + #[Route("/api/v1/room", name: "apiV1_roomDelete", methods: ["DELETE"])] + public function removeRoom(Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -81,9 +79,8 @@ public function removeRoom(Request $request, ParameterBagInterface $parameterBag return new JsonResponse(array('error' => false, 'text' => 'Erfolgreich gelöscht')); } - /** - * @Route("/api/v1/room", name="api_room_edit",methods={"PUT"}) - */ + #[Route("/api/v1/room", name: "api_room_edit",methods: ["PUT"])] + public function editRoom(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -112,9 +109,8 @@ public function editRoom(LicenseService $licenseService, Request $request, Para return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich geändert')); } - /** - * @Route("/api/v1/serverInfo", name="api_user_get_server",methods={"GET"}) - */ + #[Route("/api/v1/serverInfo", name: "api_user_get_server",methods: ["GET"])] + public function getServers(ServerUserManagment $serverUserManagment, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { diff --git a/src/Controller/api/APIUserController.php b/src/Controller/api/APIUserController.php index 36d6d49..f002710 100644 --- a/src/Controller/api/APIUserController.php +++ b/src/Controller/api/APIUserController.php @@ -11,19 +11,17 @@ use App\Service\LicenseService; use App\Service\UserService; use PHPUnit\Util\Json; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGenerator; class APIUserController extends AbstractController { - /** - * @Route("/api/v1/getAllEntries", name="apiV1_getAllEntries") - */ + #[Route("/api/v1/getAllEntries", name: "apiV1_getAllEntries")] + public function index(): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findRoomsForUser($this->getUser()); @@ -42,9 +40,8 @@ public function index(): Response return $response; } - /** - * @Route("/api/v1/info/{uidReal}", name="apiV1_roomGetUser",methods={"GET"}) - */ + #[Route("/api/v1/info/[uidReal]", name: "apiV1_roomGetUser",methods: ["GET"])] + public function getRoomInformations(Request $request, $uidReal, RoomService $roomService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uidReal' => $uidReal)); @@ -53,9 +50,8 @@ public function getRoomInformations(Request $request, $uidReal, RoomService $roo return $response; } - /** - * @Route("/api/v1/user", name="apiV1_roomAddUser", methods={"POST"}) - */ + #[Route("/api/v1/user", name: "apiV1_roomAddUser", methods: ["POST"])] + public function addUserToRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, UserService $userService, RoomService $roomService): Response { @@ -70,9 +66,8 @@ public function addUserToRoom(LicenseService $licenseService, Request $request, return new JsonResponse($roomService->addUserToRoom($room, $email)); } - /** - * @Route("/api/v1/user", name="apiV1_roomDeleteUser", methods={"DELETE"}) - */ + #[Route("/api/v1/user", name: "apiV1_roomDeleteUser", methods: ["DELETE"])] + public function removeUserFromRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, RoomService $roomService): Response { diff --git a/src/Service/MailerService.php b/src/Service/MailerService.php index 81681a8..878c30b 100644 --- a/src/Service/MailerService.php +++ b/src/Service/MailerService.php @@ -1,116 +1,122 @@ smtp = $smtp; - $this->swift = $swift_Mailer; + public function __construct( + LicenseService $licenseService, + LoggerInterface $logger, + ParameterBagInterface $parameterBag, + MailerInterface $mailer, + KernelInterface $kernel + ) { + $this->mailer = $mailer; $this->parameter = $parameterBag; $this->kernel = $kernel; $this->logger = $logger; - $this->customMailer = null; - $this->userName = null; $this->licenseService = $licenseService; } - public function buildTransport(Standort $server) + public function buildTransport(Standort $server): void { + if (!$server->getSmtpHost()) { + return; + } - if ($server->getSmtpHost()) { - $this->logger->info('Build new Transport: ' . $server->getSmtpHost()); - $tmpTransport = (new \Swift_SmtpTransport( - $server->getSmtpHost(), - $server->getSmtpPort(), - $server->getSmtpEncryption())) - ->setUsername($server->getSmtpUsername()) - ->setPassword($server->getSmtpPassword()); - $tmpMailer = new \Swift_Mailer($tmpTransport); - if ($this->userName != $server->getSmtpUsername()) { - $this->userName = $server->getSmtpUsername(); - $this->logger->info('The Transport is new and we take him'); - $this->customMailer = $tmpMailer; - } + if ($this->userName === $server->getSmtpUsername() && $this->customMailer !== null) { + return; } + + $this->logger->info('Build new Transport: '.$server->getSmtpHost()); + $dsn = sprintf( + '%s://%s:%s@%s:%d', + $server->getSmtpEncryption() ?: 'smtp', + rawurlencode((string) $server->getSmtpUsername()), + rawurlencode((string) $server->getSmtpPassword()), + $server->getSmtpHost(), + $server->getSmtpPort() + ); + $transport = Transport::fromDsn($dsn); + $this->customMailer = new Mailer($transport); + $this->userName = $server->getSmtpUsername(); } - public function sendEmail($to, $betreff, $content, Standort $server, $attachment = array()):bool + public function sendEmail($to, $betreff, $content, Standort $server, $attachment = []): bool { + $res = true; try { - $this->logger->info('Mail To: ' . $to); - $res = $this->sendViaSwiftMailer($to, $betreff, $content, $server, $attachment); - - } catch (\Exception $e) { + $this->logger->info('Mail To: '.$to); + $res = $this->sendViaMailer($to, $betreff, $content, $server, $attachment); + } catch (\Throwable $e) { $this->logger->error($e->getMessage()); + $res = false; } + return $res; } - private function sendViaSwiftMailer($to, $betreff, $content, Standort $server, $attachment = array()):bool + private function sendViaMailer($to, $betreff, $content, Standort $server, $attachment = []): bool { - if(!$to){ + if (!$to) { return true; } + $this->buildTransport($server); + if ($server->getSmtpHost() && $this->licenseService->verify($server)) { - $this->logger->info($server->getSmtpEmail()); $sender = $server->getSmtpEmail(); $senderName = $server->getSmtpSenderName(); } else { $sender = $this->parameter->get('registerEmailAdress'); $senderName = $this->parameter->get('registerEmailName'); } - $message = (new \Swift_Message($betreff)) - ->setFrom(array($sender => $senderName)) - ->setTo($to) - ->setBody( - $content - , 'text/html' - ); + + $email = (new Email()) + ->subject((string) $betreff) + ->from(new Address((string) $sender, (string) $senderName)) + ->to(...(array) $to) + ->html((string) $content); + foreach ($attachment as $data) { - $message->attach(new \Swift_Attachment($data['body'], $data['filename'], $data['type'])); - }; + $email->addPart(new DataPart($data['body'], $data['filename'], $data['type'])); + } try { - if ($server->getSmtpHost()) { + if ($server->getSmtpHost() && $this->customMailer !== null) { if ($this->kernel->getEnvironment() === 'dev') { - $message->setTo($this->parameter->get('delivery_addresses')); + $email->to(...(array) $this->parameter->get('delivery_addresses')); } - $this->logger->info('Send from Custom Mailer'); - $this->customMailer->send($message); + $this->customMailer->send($email); } else { - $this->swift->send($message); + $this->mailer->send($email); } - } catch (\Exception $e) { - $this->swift->send($message); + } catch (\Throwable $e) { + $this->mailer->send($email); $this->logger->error($e->getMessage()); return false; } + return true; } } From d21c30d4510b18f0acd828ea461a66a33a413e53 Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:18:39 +0100 Subject: [PATCH 02/12] Simplify docker compose: direct app access without Traefik --- docker-compose.yml | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index edc3034..6eb387e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,13 @@ version: '3.9' services: - traefik: - image: traefik:2.11 - command: - - --providers.docker=true - - --providers.docker.exposedbydefault=false - - --entrypoints.web.address=:80 - ports: - - "80:80" - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - app: image: thecodingmachine/php:8.2-v4-apache depends_on: db: condition: service_healthy - labels: - - traefik.enable=true - - traefik.http.routers.odc.rule=Host(`odc.localhost`) - - traefik.http.routers.odc.entrypoints=web - - traefik.http.services.odc.loadbalancer.server.port=80 + ports: + - "8080:80" environment: APACHE_DOCUMENT_ROOT: public/ PHP_EXTENSION_XDEBUG: 1 From 8896791dee3ac840de8bb579f3bdd0b1dea37a9d Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:47:09 +0100 Subject: [PATCH 03/12] Revert routing and converters back to annotations across project --- composer.json | 3 +- config/bundles.php | 1 + config/packages/sensio_framework_extra.yaml | 5 ++ config/routes/annotations.yaml | 4 +- src/Controller/AdHocMeetingController.php | 15 ++--- src/Controller/AdminController.php | 14 ++--- src/Controller/AdressbookController.php | 7 ++- src/Controller/AtendeelistController.php | 7 ++- .../ChangePermissionsController.php | 17 ++--- src/Controller/ConfirmController.php | 8 +-- src/Controller/CreateEventsController.php | 7 ++- src/Controller/CronController.php | 7 ++- src/Controller/DashboardController.php | 6 +- src/Controller/DayListController.php | 12 ++-- src/Controller/HealthCheckController.php | 7 ++- src/Controller/IcalController.php | 13 ++-- src/Controller/InvitationController.php | 13 ++-- src/Controller/JoinController.php | 10 +-- src/Controller/LoginController.php | 19 +++--- src/Controller/LoginControllerKeycloak.php | 24 +++---- src/Controller/ParticipantController.php | 7 ++- src/Controller/ReminderLizenseController.php | 7 ++- src/Controller/RepeatSendController.php | 13 ++-- src/Controller/RoomController.php | 42 ++++++------- src/Controller/ScheduleController.php | 63 ++++++++++--------- src/Controller/ShareLinkController.php | 47 +++++++------- src/Controller/StandortController.php | 37 +++++------ src/Controller/StornoController.php | 12 ++-- .../TransferOwnershipController.php | 8 +-- src/Controller/api/APILicenseController.php | 7 ++- src/Controller/api/APIRoomController.php | 25 ++++---- src/Controller/api/APIUserController.php | 25 ++++---- 32 files changed, 262 insertions(+), 230 deletions(-) create mode 100644 config/packages/sensio_framework_extra.yaml diff --git a/composer.json b/composer.json index 369404d..5b9f996 100644 --- a/composer.json +++ b/composer.json @@ -50,7 +50,8 @@ "twig/inky-extra": "^3.0", "twig/intl-extra": "^3.2", "twig/markdown-extra": "^3.3", - "twig/twig": "^3.0" + "twig/twig": "^3.0", + "sensio/framework-extra-bundle": "^6.2" }, "require-dev": { "dama/doctrine-test-bundle": "^6.5", diff --git a/config/bundles.php b/config/bundles.php index 6649ba0..f7e510a 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -4,6 +4,7 @@ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], + Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml new file mode 100644 index 0000000..17441cd --- /dev/null +++ b/config/packages/sensio_framework_extra.yaml @@ -0,0 +1,5 @@ +sensio_framework_extra: + router: + annotations: true + request: + converters: true diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml index 2d2ab38..e92efc5 100644 --- a/config/routes/annotations.yaml +++ b/config/routes/annotations.yaml @@ -1,7 +1,7 @@ controllers: resource: ../../src/Controller/ - type: attribute + type: annotation kernel: resource: ../../src/Kernel.php - type: attribute + type: annotation diff --git a/src/Controller/AdHocMeetingController.php b/src/Controller/AdHocMeetingController.php index 623f8ea..462b47e 100644 --- a/src/Controller/AdHocMeetingController.php +++ b/src/Controller/AdHocMeetingController.php @@ -11,17 +11,18 @@ use phpDocumentor\Reflection\Types\This; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Contracts\Translation\TranslatorInterface; class AdHocMeetingController extends AbstractController { - #[Route("/room/adhoc/meeting/{userId}/{serverId}", name: "add_hoc_meeting")] - #[MapEntity(expr: "repository.findOneBy({'id': userId})")] - #[MapEntity(expr: "repository.findOneBy({'id': serverId})")] - - public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response + /** + * @Route("/room/adhoc/meeting/{userId}/{serverId}", name= "add_hoc_meeting") + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "id"}}) + * @ParamConverter("standort", class="App\Entity\Standort",options={"mapping": {"serverId": "id"}}) + */ +public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response { if(!in_array($user,$this->getUser()->getAddressbook()->toArray())){ diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 1491ca5..edee5f3 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -8,19 +8,19 @@ use Doctrine\DBAL\Types\DateType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; class AdminController extends AbstractController { - - #[Route("/admin/server/{server}", name: "admin_server")] - #[MapEntity(expr: "repository.findOneBy({'id': server})")] - - public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) + /** + * @Route("/admin/server/{server}", name= "admin_server") + * @ParamConverter("server", class="App\Entity\Server",options={"mapping": {"server": "id"}}) + */ +public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) { $countPart = 0; foreach ($server->getRooms() as $room) { diff --git a/src/Controller/AdressbookController.php b/src/Controller/AdressbookController.php index db1d079..dafa444 100644 --- a/src/Controller/AdressbookController.php +++ b/src/Controller/AdressbookController.php @@ -6,12 +6,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class AdressbookController extends AbstractController { - #[Route("/room/adressbook/remove", name: "adressbook_remove_user")] - + /** + * @Route("/room/adressbook/remove", name= "adressbook_remove_user") + */ public function index(Request $request): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('id')); diff --git a/src/Controller/AtendeelistController.php b/src/Controller/AtendeelistController.php index b7f149a..15be999 100644 --- a/src/Controller/AtendeelistController.php +++ b/src/Controller/AtendeelistController.php @@ -8,12 +8,13 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class AtendeelistController extends AbstractController { - #[Route("/room/atendeelist/download/excel/{uid}", name: "atendeelist_download_excel")] - + /** + * @Route("/room/atendeelist/download/excel/{uid}", name= "atendeelist_download_excel") + */ public function index($uid, TeilnehmerExcelService $teilnehmerExcelService): Response { diff --git a/src/Controller/ChangePermissionsController.php b/src/Controller/ChangePermissionsController.php index 7d075e9..9e91804 100644 --- a/src/Controller/ChangePermissionsController.php +++ b/src/Controller/ChangePermissionsController.php @@ -9,13 +9,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class ChangePermissionsController extends AbstractController { - #[Route("/room/change/permissions/shareScreen", name: "change_permissions_screenShare")] - + /** + * @Route("/room/change/permissions/shareScreen", name= "change_permissions_screenShare") + */ public function shareScreen(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -32,8 +33,9 @@ public function shareScreen(Request $request, TranslatorInterface $translator, P } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - #[Route("/room/change/permissions/privateMessage", name: "change_permissions_privateMessage")] - + /** + * @Route("/room/change/permissions/privateMessage", name= "change_permissions_privateMessage") + */ public function privateMesage(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -50,8 +52,9 @@ public function privateMesage(Request $request, TranslatorInterface $translator, } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - #[Route("/room/addModerator", name: "room_add_moderator")] - + /** + * @Route("/room/addModerator", name= "room_add_moderator") + */ public function roomTransferModerator(Request $request, PermissionChangeService $permissionChangeService, TranslatorInterface $translator) { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); diff --git a/src/Controller/ConfirmController.php b/src/Controller/ConfirmController.php index 2d4c010..5c8aee4 100644 --- a/src/Controller/ConfirmController.php +++ b/src/Controller/ConfirmController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class ConfirmController extends AbstractController { @@ -19,9 +19,9 @@ public function __construct(LoggerService $logger) { $this->logger = $logger; } - - #[Route("/room/confirm/manuell", name: "confirm_manuell")] - + /** + * @Route("/room/confirm/manuell", name= "confirm_manuell") + */ public function index(Request $request, SubcriptionService $subcriptionService): Response { $subscriber = $this->getDoctrine()->getRepository(Subscriber::class)->find($request->get('id')); diff --git a/src/Controller/CreateEventsController.php b/src/Controller/CreateEventsController.php index 8bb4251..5ceff71 100644 --- a/src/Controller/CreateEventsController.php +++ b/src/Controller/CreateEventsController.php @@ -9,13 +9,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class CreateEventsController extends AbstractController { - #[Route("/room/create/events", name: "create_events")] - + /** + * @Route("/room/create/events", name= "create_events") + */ public function index(Request $request, TranslatorInterface $translator, CloneService $cloneService): Response { $roomOld = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('roomId')); diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index 8143107..04ff787 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -10,12 +10,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class CronController extends AbstractController { - #[Route("/cron/remember", name: "cron_remember")] - + /** + * @Route("/cron/remember", name= "cron_remember") + */ public function updateCronAkademie(Request $request, LoggerInterface $logger, UserService $userService, ReminderService $reminderService) { if ($request->get('token') !== $this->getParameter('cronToken')) { diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index f6ac60a..2a63256 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -17,7 +17,7 @@ use Firebase\JWT\JWT; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; @@ -29,7 +29,7 @@ class DashboardController extends AbstractController { /** - #[Route("/", name: "index")] + * @Route("/", name= "index") * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ @@ -56,7 +56,7 @@ public function index(Request $request, RoomSpaceService $roomSpaceService) /** - #[Route("/room/dashboard", name: "dashboard")] + * @Route("/room/dashboard", name= "dashboard") * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ diff --git a/src/Controller/DayListController.php b/src/Controller/DayListController.php index 83527f7..56483de 100644 --- a/src/Controller/DayListController.php +++ b/src/Controller/DayListController.php @@ -9,14 +9,15 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class DayListController extends AbstractController { - #[Route("/room/day/list", name: "day_list")] - + /** + * @Route("/room/day/list", name= "day_list") + */ public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelService): Response { $from = $request->get('from') ? new \DateTime($request->get('from')) : new \DateTime(); @@ -35,8 +36,9 @@ public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelS ->getResult(); return $this->file($teilnehmerExcelService->generateTeilnehmerDayList($rooms,md5(uniqid()) ), $from->format('d.m.Y').' - '.$to->format('d.m.Y') . '.xlsx', ResponseHeaderBag::DISPOSITION_INLINE); } - #[Route("/room/day/list/modal", name: "day_list_modal")] - + /** + * @Route("/room/day/list/modal", name= "day_list_modal") + */ public function modal(Request $request, TeilnehmerExcelService $teilnehmerExcelService,TranslatorInterface $translator): Response { diff --git a/src/Controller/HealthCheckController.php b/src/Controller/HealthCheckController.php index d13d5b0..50ac73b 100644 --- a/src/Controller/HealthCheckController.php +++ b/src/Controller/HealthCheckController.php @@ -7,12 +7,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class HealthCheckController extends AbstractController { - #[Route("/health/check", name: "health_check",methods: ["GET"])] - + /** + * @Route("/health/check", name= "health_check",methods= {"GET"}) + */ public function index(): Response { try { diff --git a/src/Controller/IcalController.php b/src/Controller/IcalController.php index b5fba39..4546c4b 100644 --- a/src/Controller/IcalController.php +++ b/src/Controller/IcalController.php @@ -13,16 +13,17 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Contracts\Cache\ItemInterface; class IcalController extends AbstractController { - #[Route("/ical/{id}", name: "ical")] - #[MapEntity(expr: "repository.findOneBy({'uid': id})")] - - public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response + /** + * @Route("/ical/{id}", name= "ical") + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "uid"}}) + */ +public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response { $response = new Response(); diff --git a/src/Controller/InvitationController.php b/src/Controller/InvitationController.php index c607b47..985b3b6 100644 --- a/src/Controller/InvitationController.php +++ b/src/Controller/InvitationController.php @@ -7,15 +7,16 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; class InvitationController extends AbstractController { - #[Route("/login/invitationAccept/{id}", name: "invitation_accept")] - #[MapEntity(expr: "repository.findOneBy({'registerId': id})")] - - public function index(InviteService $inviteService, User $user, Request $request): Response + /** + * @Route("/login/invitationAccept/{id}", name= "invitation_accept") + * @ParamConverter("user", options={"mapping"={"id":"registerId"}}) + */ +public function index(InviteService $inviteService, User $user, Request $request): Response { $inviteService->connectUserWithEmail($user,$this->getUser()); diff --git a/src/Controller/JoinController.php b/src/Controller/JoinController.php index 0625fd0..06d5f85 100644 --- a/src/Controller/JoinController.php +++ b/src/Controller/JoinController.php @@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Cache\ItemInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -26,10 +26,10 @@ public function __construct(ParameterBagInterface $parameterBag) { $this->parameterBag = $parameterBag; } - - #[Route("/join/{slug}", name: "join_index")] - #[Route("/join", name: "join_index_no_slug")] - + /** + * @Route("/join/{slug}", name= "join_index") + * @Route("/join", name= "join_index_no_slug") + */ public function index($slug = null, PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, HttpClientInterface $httpClient) { $data = array(); diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 0ef7164..0578ba7 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -10,20 +10,22 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginController extends AbstractController { - #[Route("/login/auth0_login", name: "login_auth0")] - + /** + * @Route("/login/auth0_login", name= "login_auth0") + */ public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('auth0_main')->redirect(['user']); } - #[Route("/login/auth0_login/check", name: "connect_auth0_check")] - + /** + * @Route("/login/auth0_login/check", name= "connect_auth0_check") + */ public function check(ClientRegistry $clientRegistry, Request $request) { // ** if you want to *authenticate* the user, then @@ -47,10 +49,9 @@ public function check(ClientRegistry $clientRegistry, Request $request) die; } } - - - #[Route("/room/logout_keycloak", name: "logout_keycloak")] - + /** + * @Route("/room/logout_keycloak", name= "logout_keycloak") + */ public function logout( ClientRegistry $clientRegistry, Request $request diff --git a/src/Controller/LoginControllerKeycloak.php b/src/Controller/LoginControllerKeycloak.php index 2e55ace..536285d 100644 --- a/src/Controller/LoginControllerKeycloak.php +++ b/src/Controller/LoginControllerKeycloak.php @@ -6,20 +6,21 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginControllerKeycloak extends AbstractController { - #[Route("/login", name: "login_keycloak")] - + /** + * @Route("/login", name= "login_keycloak") + */ public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('keycloak_main')->redirect(['email','openid','profile']); } - - #[Route("/register", name: "register_keycloak")] - + /** + * @Route("/register", name= "register_keycloak") + */ public function register(ClientRegistry $clientRegistry): Response { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/protocol/openid-connect/registrations?client_id='. @@ -33,16 +34,17 @@ public function check(ClientRegistry $clientRegistry, Request $request) { } - - #[Route("/login/keycloak_edit", name: "connect_keycloak_edit")] - + /** + * @Route("/login/keycloak_edit", name= "connect_keycloak_edit") + */ public function edit(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account'; return $this->redirect($url); } - #[Route("/login/keycloak_password", name: "connect_keycloak_password")] - + /** + * @Route("/login/keycloak_password", name= "connect_keycloak_password") + */ public function password(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account/password'; diff --git a/src/Controller/ParticipantController.php b/src/Controller/ParticipantController.php index 872c705..352ceae 100644 --- a/src/Controller/ParticipantController.php +++ b/src/Controller/ParticipantController.php @@ -7,14 +7,15 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function GuzzleHttp\Psr7\str; class ParticipantController extends AbstractController { - #[Route("/room/participant", name: "search_participant")] - + /** + * @Route("/room/participant", name= "search_participant") + */ public function index(Request $request, TranslatorInterface $translator): Response { $string = $request->get('search'); diff --git a/src/Controller/ReminderLizenseController.php b/src/Controller/ReminderLizenseController.php index fe13784..dd809e6 100644 --- a/src/Controller/ReminderLizenseController.php +++ b/src/Controller/ReminderLizenseController.php @@ -11,14 +11,15 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class ReminderLizenseController extends AbstractController { - #[Route("/reminder/lizense", name: "reminder_lizense")] - + /** + * @Route("/reminder/lizense", name= "reminder_lizense") + */ public function index(LoggerInterface $logger, Request $request, MailerService $mailerService, TranslatorInterface $translator,ParameterBagInterface $parameterBag): Response { if ($request->get('token') !== $parameterBag->get('cronToken')) { diff --git a/src/Controller/RepeatSendController.php b/src/Controller/RepeatSendController.php index 9bc84c3..aee4671 100644 --- a/src/Controller/RepeatSendController.php +++ b/src/Controller/RepeatSendController.php @@ -10,13 +10,14 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class RepeatSendController extends AbstractController { - #[Route("/rooms/repeat/sendAll", name: "room_repeat_send")] - + /** + * @Route("/rooms/repeat/sendAll", name= "room_repeat_send") + */ public function index(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); @@ -29,9 +30,9 @@ public function index(Request $request, UserService $userService, TranslatorInte return $this->redirectToRoute('dashboard', array('snack' => $translator->trans('Teilnehmer wurden eingeladen'))); } - - #[Route("/rooms/repeat/sendUser", name: "room_repeat_user")] - + /** + * @Route("/rooms/repeat/sendUser", name= "room_repeat_user") + */ public function toOneUser(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); diff --git a/src/Controller/RoomController.php b/src/Controller/RoomController.php index 73b77b0..285048b 100644 --- a/src/Controller/RoomController.php +++ b/src/Controller/RoomController.php @@ -22,8 +22,8 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Contracts\Translation\TranslatorInterface; class RoomController extends AbstractController @@ -36,9 +36,9 @@ public function __construct(TranslatorInterface $translator, LoggerService $logg $this->translator = $translator; $this->logger = $logger; } - - #[Route("/room/new", name: "room_new")] - + /** + * @Route("/room/new", name= "room_new") + */ public function newRoom(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserEventCreateService $userEventCreateService) { $roomOld = null; @@ -143,9 +143,9 @@ public function newRoom(Request $request, UserService $userService, TranslatorIn } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - - #[Route("/room/add-user", name: "room_add_user")] - + /** + * @Route("/room/add-user", name= "room_add_user") + */ public function roomAddUser(Request $request, InviteService $inviteService, UserService $userService) { $newMember = array(); @@ -188,10 +188,10 @@ public function roomAddUser(Request $request, InviteService $inviteService, User return $this->render('room/attendeeModal.twig', array('form' => $form->createView(), 'title' => $title, 'room' => $room)); } - - #[Route("/room/join/{t}/{room}", name: "room_join")] - #[MapEntity(mapping: ['room' => 'id'])] - + /** + * @Route("/room/join/{t}/{room}", name= "room_join") + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ public function joinRoom(RoomService $roomService, Rooms $room, $t) { @@ -203,9 +203,9 @@ function joinRoom(RoomService $roomService, Rooms $room, $t) return $this->redirectToRoute('dashboard', ['join_room' => $room->getId(), 'type' => $t]); } - - #[Route("/room/user/remove", name: "room_user_remove")] - + /** + * @Route("/room/user/remove", name= "room_user_remove") + */ public function roomUserRemove(Request $request, UserService $userService) { @@ -252,9 +252,9 @@ function roomUserRemove(Request $request, UserService $userService) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - - #[Route("/room/remove", name: "room_remove")] - + /** + * @Route("/room/remove", name= "room_remove") + */ public function roomRemove(Request $request, UserService $userService) { @@ -278,9 +278,9 @@ function roomRemove(Request $request, UserService $userService) } return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - - #[Route("/room/clone", name: "room_clone")] - + /** + * @Route("/room/clone", name= "room_clone") + */ public function roomClone(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment) { diff --git a/src/Controller/ScheduleController.php b/src/Controller/ScheduleController.php index 6b08d41..a018a87 100644 --- a/src/Controller/ScheduleController.php +++ b/src/Controller/ScheduleController.php @@ -18,14 +18,15 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Contracts\Translation\TranslatorInterface; class ScheduleController extends AbstractController { - #[Route("room/schedule/new", name: "schedule_admin_new")] - + /** + * @Route("room/schedule/new", name= "schedule_admin_new") + */ public function new( Request $request, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserService $userService, UserEventCreateService $userEventCreateService): Response { if ($request->get('id')) { @@ -107,10 +108,10 @@ public function new( Request $request, TranslatorInterface $translator, ServerUs } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - - #[Route("room/schedule/admin/[id]", name: "schedule_admin",methods: ["GET"])] - #[MapEntity(mapping: ['room' => 'id'])] - + /** + * @Route("room/schedule/admin/{id}", name= "schedule_admin",methods= {"GET"}) + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ public function index(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -122,10 +123,10 @@ public function index(Rooms $rooms, Request $request): Response 'room' => $rooms, ]); } - - #[Route("room/schedule/admin/add/[id]", name: "schedule_admin_add",methods: ["POST"])] - #[MapEntity(mapping: ['room' => 'id'])] - + /** + * @Route("room/schedule/admin/add/{id}", name= "schedule_admin_add",methods= {"POST"}) + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ public function add(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -154,11 +155,11 @@ public function add(Rooms $rooms, Request $request): Response return new JsonResponse(array('error' => false)); } - - #[Route("room/schedule/admin/remove/[id]", name: "schedule_admin_remove",methods: ["DELETE"])] - #[MapEntity] - - public function remove(SchedulingTime $schedulingTime, Request $request): Response + /** + * @Route("room/schedule/admin/remove/{id}", name= "schedule_admin_remove",methods= {"DELETE"}) + * @ParamConverter("schedulingTime") + */ +public function remove(SchedulingTime $schedulingTime, Request $request): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { throw new NotFoundHttpException('Room not found'); @@ -178,11 +179,11 @@ public function remove(SchedulingTime $schedulingTime, Request $request): Respon return new JsonResponse(array('error' => false)); } - - #[Route("room/schedule/admin/choose/[id]", name: "schedule_admin_choose",methods: ["GET"])] - #[MapEntity] - - public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response + /** + * @Route("room/schedule/admin/choose/{id}", name= "schedule_admin_choose",methods= {"GET"}) + * @ParamConverter("schedulingTime") + */ +public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { throw new NotFoundHttpException('Room not found'); @@ -193,12 +194,12 @@ public function choose(SchedulingTime $schedulingTime, Request $request, Schedul }; return $this->redirectToRoute('dashboard', array('snack' => $text)); } - - #[Route("schedule/[scheduleId]/[userId]", name: "schedule_public_main", methods: ["GET"])] - #[MapEntity(expr: "repository.findOneBy({'uid': userId})")] - #[MapEntity(expr: "repository.findOneBy({'uid': scheduleId})")] - - public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response + /** + * @Route("schedule/{scheduleId}/{userId}", name= "schedule_public_main", methods= {"GET"}) + * @ParamConverter("user", options={"mapping"={"userId":"uid"}}) + * @ParamConverter("scheduling", class="App\Entity\Scheduling",options={"mapping": {"scheduleId": "uid"}}) + */ +public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response { if (!in_array($user, $scheduling->getRoom()->getUser()->toArray())) { return $this->redirectToRoute('join_index_no_slug', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.'), 'color' => 'danger']); @@ -214,9 +215,9 @@ public function public(Scheduling $scheduling, User $user, Request $request, Pex return $this->render('schedule/schedulePublic.html.twig', array('user' => $user, 'scheduling' => $scheduling, 'room' => $scheduling->getRoom(), 'standort' => $standort)); } - - #[Route("schedule/vote", name: "schedule_public_vote", methods: ["POST"])] - + /** + * @Route("schedule/vote", name= "schedule_public_vote", methods= {"POST"}) + */ public function vote(Request $request, TranslatorInterface $translator): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('user')); diff --git a/src/Controller/ShareLinkController.php b/src/Controller/ShareLinkController.php index c023b9a..ddf0f18 100644 --- a/src/Controller/ShareLinkController.php +++ b/src/Controller/ShareLinkController.php @@ -22,8 +22,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Component\Validator\Constraints\Json; use Symfony\Contracts\Translation\TranslatorInterface; use function Symfony\Component\String\s; @@ -39,11 +39,11 @@ public function __construct(EntityManagerInterface $entityManager, LoggerService $this->logger = $logger; } - - #[Route("/room/share/link/{id}", name: "share_link")] - #[MapEntity] - - public function index(Rooms $rooms): Response + /** + * @Route("/room/share/link/{id}", name= "share_link") + * @ParamConverter("rooms") + */ +public function index(Rooms $rooms): Response { if (!$rooms || !$rooms->getModerator() == $this->getUser() || $rooms->getPublic() != true) { throw new NotFoundHttpException('Not found'); @@ -51,11 +51,11 @@ public function index(Rooms $rooms): Response return $this->render('share_link/__shareLinkModal.html.twig', array('room' => $rooms)); } - - #[Route("/room/share/link/accetwaitinglist/{id}", name: "accept_waitingList")] - #[MapEntity] - - public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response + /** + * @Route("/room/share/link/accetwaitinglist/{id}", name= "accept_waitingList") + * @ParamConverter("waitinglist") + */ +public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { $subcriptionService->createUserRoom($waitinglist->getUser(), $waitinglist->getRoom()); @@ -65,11 +65,11 @@ public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $ } return new JsonResponse(array('error' => true)); } - - #[Route("/room/share/link/deniewaitinglist/{id}", name: "denie_waitingList")] - #[MapEntity] - - public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response + /** + * @Route("/room/share/link/deniewaitinglist/{id}", name= "denie_waitingList") + * @ParamConverter("waitinglist") + */ +public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { @@ -112,9 +112,9 @@ public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $s return new JsonResponse(array('error' => true)); } - - #[Route("/subscribe/self/{uid}", name: "public_subscribe_participant")] - + /** + * @Route("/subscribe/self/{uid}", name= "public_subscribe_participant") + */ public function participants($uid, Request $request, SubcriptionService $subcriptionService, TranslatorInterface $translator, PexelService $pexelService): Response { $rooms = new Rooms(); @@ -226,10 +226,9 @@ public function participants($uid, Request $request, SubcriptionService $subcrip 'color' => $color, ]); } - - - #[Route("/subscribe/optIn/{uid}", name: "public_subscribe_doupleOptIn")] - + /** + * @Route("/subscribe/optIn/{uid}", name= "public_subscribe_doupleOptIn") + */ public function doupleoptin($uid, SubcriptionService $subcriptionService, TranslatorInterface $translator, UserService $userService, PexelService $pexelService): Response { $subscriber = $this->em->getRepository(Subscriber::class)->findOneBy(array('uid' => $uid)); diff --git a/src/Controller/StandortController.php b/src/Controller/StandortController.php index 801017d..4dca8a6 100644 --- a/src/Controller/StandortController.php +++ b/src/Controller/StandortController.php @@ -21,14 +21,15 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; class StandortController extends AbstractController { - #[Route("/server/add", name: "servers_add")] - + /** + * @Route("/server/add", name= "servers_add") + */ public function serverAdd(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator) { if ($request->get('id')) { @@ -66,9 +67,9 @@ public function serverAdd(Request $request, ValidatorInterface $validator, Stand return $this->render('servers/__addServerModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'standort' => $standort)); } - - #[Route("/server/enterprise", name: "servers_enterprise")] - + /** + * @Route("/server/enterprise", name= "servers_enterprise") + */ public function serverEnterprise(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator, LicenseService $licenseService) { @@ -97,9 +98,9 @@ public function serverEnterprise(Request $request, ValidatorInterface $validator return $this->render('servers/__serverEnterpriseModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'server' => $server)); } - - #[Route("/server/add-user", name: "server_add_user")] - + /** + * @Route("/server/add-user", name= "server_add_user") + */ public function roomAddUser(Request $request, InviteService $inviteService, StandortService $serverService, TranslatorInterface $translator) { $newMember = array(); @@ -135,9 +136,9 @@ public function roomAddUser(Request $request, InviteService $inviteService, Stan return $this->render('servers/permissionModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'users' => $server->getUser(), 'server' => $server)); } - - #[Route("/server/user/remove", name: "server_user_remove")] - + /** + * @Route("/server/user/remove", name= "server_user_remove") + */ public function serverUserRemove(Request $request, TranslatorInterface $translator) { @@ -155,9 +156,9 @@ function serverUserRemove(Request $request, TranslatorInterface $translator) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - - #[Route("/server/delete", name: "server_delete")] - + /** + * @Route("/server/delete", name= "server_delete") + */ public function serverDelete(Request $request, TranslatorInterface $translator, StandortService $serverService) { @@ -181,9 +182,9 @@ function serverDelete(Request $request, TranslatorInterface $translator, Standor return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - - #[Route("/server/check/email", name: "server_check_email")] - + /** + * @Route("/server/check/email", name= "server_check_email") + */ public function servercheckEmail(Request $request, TranslatorInterface $translator, MailerService $mailerService) { diff --git a/src/Controller/StornoController.php b/src/Controller/StornoController.php index 0c957a3..02074c4 100644 --- a/src/Controller/StornoController.php +++ b/src/Controller/StornoController.php @@ -10,13 +10,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class StornoController extends AbstractController { - #[Route("/public/storno/start/{uidRoom}/{uidUser}", name: "storno_index")] - + /** + * @Route("/public/storno/start/{uidRoom}/{uidUser}", name= "storno_index") + */ public function index($uidRoom, $uidUser): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); @@ -34,8 +35,9 @@ public function index($uidRoom, $uidUser): Response 'room'=>$rooms, ]); } - #[Route("/public/storno/accept/{uidRoom}/{uidUser}", name: "storno_accept")] - + /** + * @Route("/public/storno/accept/{uidRoom}/{uidUser}", name= "storno_accept") + */ public function accept($uidRoom, $uidUser, UserService $userService,TranslatorInterface $translator, NotificationService $notificationService): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); diff --git a/src/Controller/TransferOwnershipController.php b/src/Controller/TransferOwnershipController.php index 3fcc96d..4a49901 100644 --- a/src/Controller/TransferOwnershipController.php +++ b/src/Controller/TransferOwnershipController.php @@ -12,7 +12,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class TransferOwnershipController extends AbstractController { @@ -30,9 +30,9 @@ public function __construct( $this->roomsRepository = $roomsRepository; $this->transferOwnerShipService = $transferOwnerShipService; } - - #[Route("/transfer/ownership", name: "transfer_ownership")] - + /** + * @Route("/transfer/ownership", name= "transfer_ownership") + */ public function index(Request $request): Response { $newOwner = $this->userRepository->find($request->get('new_user')); diff --git a/src/Controller/api/APILicenseController.php b/src/Controller/api/APILicenseController.php index dbe8c5a..f186ede 100644 --- a/src/Controller/api/APILicenseController.php +++ b/src/Controller/api/APILicenseController.php @@ -8,12 +8,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class APILicenseController extends AbstractController { - #[Route("/api/v1/generateLicense", name: "api_generate_license",methods: ["POST"])] - + /** + * @Route("/api/v1/generateLicense", name= "api_generate_license",methods= {"POST"}) + */ public function index(Request $request, LicenseService $licenseService): Response { return new JsonResponse($licenseService->generateNewLicense( diff --git a/src/Controller/api/APIRoomController.php b/src/Controller/api/APIRoomController.php index 933e193..ade61d7 100644 --- a/src/Controller/api/APIRoomController.php +++ b/src/Controller/api/APIRoomController.php @@ -16,13 +16,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use function GuzzleHttp\default_user_agent; class APIRoomController extends AbstractController { - #[Route("/api/v1/room", name: "api_room_create",methods: ["POST"])] - + /** + * @Route("/api/v1/room", name= "api_room_create",methods= {"POST"}) + */ public function index(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { @@ -58,9 +59,9 @@ public function index(LicenseService $licenseService, Request $request, Paramete $room = $roomService->createRoom($user, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich angelegt')); } - - #[Route("/api/v1/room", name: "apiV1_roomDelete", methods: ["DELETE"])] - + /** + * @Route("/api/v1/room", name= "apiV1_roomDelete", methods= {"DELETE"}) + */ public function removeRoom(Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -78,9 +79,9 @@ public function removeRoom(Request $request, ParameterBagInterface $parameterBag $roomService->deleteRoom($room); return new JsonResponse(array('error' => false, 'text' => 'Erfolgreich gelöscht')); } - - #[Route("/api/v1/room", name: "api_room_edit",methods: ["PUT"])] - + /** + * @Route("/api/v1/room", name= "api_room_edit",methods= {"PUT"}) + */ public function editRoom(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -108,9 +109,9 @@ public function editRoom(LicenseService $licenseService, Request $request, Para $room = $roomService->editRoom($room, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich geändert')); } - - #[Route("/api/v1/serverInfo", name: "api_user_get_server",methods: ["GET"])] - + /** + * @Route("/api/v1/serverInfo", name= "api_user_get_server",methods= {"GET"}) + */ public function getServers(ServerUserManagment $serverUserManagment, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { diff --git a/src/Controller/api/APIUserController.php b/src/Controller/api/APIUserController.php index f002710..3300d76 100644 --- a/src/Controller/api/APIUserController.php +++ b/src/Controller/api/APIUserController.php @@ -15,13 +15,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGenerator; class APIUserController extends AbstractController { - #[Route("/api/v1/getAllEntries", name: "apiV1_getAllEntries")] - + /** + * @Route("/api/v1/getAllEntries", name= "apiV1_getAllEntries") + */ public function index(): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findRoomsForUser($this->getUser()); @@ -39,9 +40,9 @@ public function index(): Response $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - - #[Route("/api/v1/info/[uidReal]", name: "apiV1_roomGetUser",methods: ["GET"])] - + /** + * @Route("/api/v1/info/{uidReal}", name= "apiV1_roomGetUser",methods= {"GET"}) + */ public function getRoomInformations(Request $request, $uidReal, RoomService $roomService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uidReal' => $uidReal)); @@ -49,9 +50,9 @@ public function getRoomInformations(Request $request, $uidReal, RoomService $roo $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - - #[Route("/api/v1/user", name: "apiV1_roomAddUser", methods: ["POST"])] - + /** + * @Route("/api/v1/user", name= "apiV1_roomAddUser", methods= {"POST"}) + */ public function addUserToRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, UserService $userService, RoomService $roomService): Response { @@ -65,9 +66,9 @@ public function addUserToRoom(LicenseService $licenseService, Request $request, $email = $request->get('email'); return new JsonResponse($roomService->addUserToRoom($room, $email)); } - - #[Route("/api/v1/user", name: "apiV1_roomDeleteUser", methods: ["DELETE"])] - + /** + * @Route("/api/v1/user", name= "apiV1_roomDeleteUser", methods= {"DELETE"}) + */ public function removeUserFromRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, RoomService $roomService): Response { From e54ad84297146f2a18cadb43286c6ffaee612a6b Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:47:15 +0100 Subject: [PATCH 04/12] Migrate controllers, entities and commands to PHP attributes --- composer.json | 3 +- config/bundles.php | 1 - config/packages/sensio_framework_extra.yaml | 5 - config/routes/annotations.yaml | 4 +- src/Command/AddSlugToServerCommand.php | 3 +- src/Command/ConnectServerAndGroupsCommand.php | 3 +- src/Command/CronSendReminderCommand.php | 3 +- src/Command/MigrateToAdressbookCommand.php | 3 +- .../RemoveGroupWithNoLeaderCommand.php | 3 +- src/Command/RemoveServerAndGroupsCommand.php | 3 +- src/Controller/AdHocMeetingController.php | 13 +- src/Controller/AdminController.php | 11 +- src/Controller/AdressbookController.php | 7 +- src/Controller/AtendeelistController.php | 7 +- .../ChangePermissionsController.php | 17 +- src/Controller/ConfirmController.php | 7 +- src/Controller/CreateEventsController.php | 7 +- src/Controller/CronController.php | 7 +- src/Controller/DashboardController.php | 6 +- src/Controller/DayListController.php | 12 +- src/Controller/HealthCheckController.php | 7 +- src/Controller/IcalController.php | 11 +- src/Controller/InvitationController.php | 11 +- src/Controller/JoinController.php | 9 +- src/Controller/LoginController.php | 17 +- src/Controller/LoginControllerKeycloak.php | 22 +- src/Controller/ParticipantController.php | 7 +- src/Controller/ReminderLizenseController.php | 7 +- src/Controller/RepeatSendController.php | 12 +- src/Controller/RoomController.php | 36 ++- src/Controller/ScheduleController.php | 51 ++-- src/Controller/ShareLinkController.php | 35 ++- src/Controller/StandortController.php | 32 +-- src/Controller/StornoController.php | 12 +- .../TransferOwnershipController.php | 7 +- src/Controller/api/APILicenseController.php | 7 +- src/Controller/api/APIRoomController.php | 22 +- src/Controller/api/APIUserController.php | 22 +- src/Entity/ApiKeys.php | 29 +-- src/Entity/FreeField.php | 36 ++- src/Entity/FreeFieldsUserAnswer.php | 38 ++- src/Entity/Group.php | 35 ++- src/Entity/KeycloakGroupsToStandorts.php | 26 +- src/Entity/License.php | 34 ++- src/Entity/Rooms.php | 232 +++++++----------- src/Entity/RoomsUser.php | 45 ++-- src/Entity/Scheduling.php | 36 ++- src/Entity/SchedulingTime.php | 31 +-- src/Entity/SchedulingTimeUser.php | 33 ++- src/Entity/Standort.php | 151 +++++------- src/Entity/Subscriber.php | 33 ++- src/Entity/User.php | 160 +++++------- src/Entity/UserBase.php | 12 +- src/Entity/UserEventCreated.php | 33 ++- src/Entity/Waitinglist.php | 33 ++- 55 files changed, 604 insertions(+), 845 deletions(-) delete mode 100644 config/packages/sensio_framework_extra.yaml diff --git a/composer.json b/composer.json index 5b9f996..369404d 100644 --- a/composer.json +++ b/composer.json @@ -50,8 +50,7 @@ "twig/inky-extra": "^3.0", "twig/intl-extra": "^3.2", "twig/markdown-extra": "^3.3", - "twig/twig": "^3.0", - "sensio/framework-extra-bundle": "^6.2" + "twig/twig": "^3.0" }, "require-dev": { "dama/doctrine-test-bundle": "^6.5", diff --git a/config/bundles.php b/config/bundles.php index f7e510a..6649ba0 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -4,7 +4,6 @@ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], - Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], diff --git a/config/packages/sensio_framework_extra.yaml b/config/packages/sensio_framework_extra.yaml deleted file mode 100644 index 17441cd..0000000 --- a/config/packages/sensio_framework_extra.yaml +++ /dev/null @@ -1,5 +0,0 @@ -sensio_framework_extra: - router: - annotations: true - request: - converters: true diff --git a/config/routes/annotations.yaml b/config/routes/annotations.yaml index e92efc5..2d2ab38 100644 --- a/config/routes/annotations.yaml +++ b/config/routes/annotations.yaml @@ -1,7 +1,7 @@ controllers: resource: ../../src/Controller/ - type: annotation + type: attribute kernel: resource: ../../src/Kernel.php - type: annotation + type: attribute diff --git a/src/Command/AddSlugToServerCommand.php b/src/Command/AddSlugToServerCommand.php index 56367b3..ba01050 100644 --- a/src/Command/AddSlugToServerCommand.php +++ b/src/Command/AddSlugToServerCommand.php @@ -5,6 +5,7 @@ use App\Entity\Standort; use App\Service\StandortService; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -12,9 +13,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:addSlugToServer', description: 'Adds a slug to all servers, which does not have a slug')] class AddSlugToServerCommand extends Command { - protected static $defaultName = 'app:addSlugToServer'; private $em; private $serverService; public function __construct(EntityManagerInterface $entityManager, StandortService $serverService,string $name = null) diff --git a/src/Command/ConnectServerAndGroupsCommand.php b/src/Command/ConnectServerAndGroupsCommand.php index 382cc7a..1bb628b 100644 --- a/src/Command/ConnectServerAndGroupsCommand.php +++ b/src/Command/ConnectServerAndGroupsCommand.php @@ -5,6 +5,7 @@ use App\Entity\KeycloakGroupsToStandorts; use App\Entity\Standort; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -12,9 +13,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:connectServerAndGroups', description: 'This connects a kecloak Group or a emaildomain with a server. Please add the server-Id, which can be found in the database and the keycloakgroup (on windows machines you need two leading /all --> //all) or the domain of an email (info@example.com --> example.com)')] class ConnectServerAndGroupsCommand extends Command { - protected static $defaultName = 'app:connectServerAndGroups'; private $em; public function __construct( EntityManagerInterface $entityManager, string $name = null) { diff --git a/src/Command/CronSendReminderCommand.php b/src/Command/CronSendReminderCommand.php index 936af96..84bc21c 100644 --- a/src/Command/CronSendReminderCommand.php +++ b/src/Command/CronSendReminderCommand.php @@ -3,6 +3,7 @@ namespace App\Command; use App\Service\ReminderService; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -10,9 +11,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:cron:sendReminder', description: 'Send a reminder to all users which are in a room in the next 10 min')] class CronSendReminderCommand extends Command { - protected static $defaultName = 'app:cron:sendReminder'; private $reminderService; public function __construct( ReminderService $reminderService, string $name = null) { diff --git a/src/Command/MigrateToAdressbookCommand.php b/src/Command/MigrateToAdressbookCommand.php index 1efb72f..a97659f 100644 --- a/src/Command/MigrateToAdressbookCommand.php +++ b/src/Command/MigrateToAdressbookCommand.php @@ -4,6 +4,7 @@ use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -11,9 +12,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:migrateToAdressbook', description: 'Add a short description for your command')] class MigrateToAdressbookCommand extends Command { - protected static $defaultName = 'app:migrateToAdressbook'; protected $em; public function __construct(EntityManagerInterface $entityManager, string $name = null) { diff --git a/src/Command/RemoveGroupWithNoLeaderCommand.php b/src/Command/RemoveGroupWithNoLeaderCommand.php index 3a1bc87..73bcffd 100644 --- a/src/Command/RemoveGroupWithNoLeaderCommand.php +++ b/src/Command/RemoveGroupWithNoLeaderCommand.php @@ -4,6 +4,7 @@ use App\Entity\Rooms; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -11,9 +12,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:removeGroupWithNoLeader')] class RemoveGroupWithNoLeaderCommand extends Command { - protected static $defaultName = 'app:removeGroupWithNoLeader'; protected static $defaultDescription = 'Removes all Users which are members of a group thats leader is not user of the room anymore'; private $em; public function __construct(EntityManagerInterface $entityManager, string $name = null ) diff --git a/src/Command/RemoveServerAndGroupsCommand.php b/src/Command/RemoveServerAndGroupsCommand.php index 5929838..b434ac6 100644 --- a/src/Command/RemoveServerAndGroupsCommand.php +++ b/src/Command/RemoveServerAndGroupsCommand.php @@ -5,6 +5,7 @@ use App\Entity\KeycloakGroupsToStandorts; use App\Entity\Standort; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -12,9 +13,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +#[AsCommand(name: 'app:removeServerAndGroups', description: 'This removes a yecloak Group or a emaildomain connection from a server. Please add the server-Id, which can be found in the database and the keycloakgroup (on windows machines you need two leading /all --> //all) or the emaildomain')] class RemoveServerAndGroupsCommand extends Command { - protected static $defaultName = 'app:removeServerAndGroups'; private $em; public function __construct( EntityManagerInterface $entityManager, string $name = null) { diff --git a/src/Controller/AdHocMeetingController.php b/src/Controller/AdHocMeetingController.php index 462b47e..1b53afb 100644 --- a/src/Controller/AdHocMeetingController.php +++ b/src/Controller/AdHocMeetingController.php @@ -11,17 +11,16 @@ use phpDocumentor\Reflection\Types\This; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class AdHocMeetingController extends AbstractController { - /** - * @Route("/room/adhoc/meeting/{userId}/{serverId}", name= "add_hoc_meeting") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "id"}}) - * @ParamConverter("standort", class="App\Entity\Standort",options={"mapping": {"serverId": "id"}}) - */ + #[Route("/room/adhoc/meeting/{userId}/{serverId}", name: "add_hoc_meeting")] + #[MapEntity(expr: "repository.findOneBy({'id': userId})")] + #[MapEntity(expr: "repository.findOneBy({'id': serverId})")] + public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response { diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index edee5f3..e06ad90 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -8,18 +8,17 @@ use Doctrine\DBAL\Types\DateType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; class AdminController extends AbstractController { - /** - * @Route("/admin/server/{server}", name= "admin_server") - * @ParamConverter("server", class="App\Entity\Server",options={"mapping": {"server": "id"}}) - */ + #[Route("/admin/server/{server}", name: "admin_server")] + #[MapEntity(expr: "repository.findOneBy({'id': server})")] + public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) { $countPart = 0; diff --git a/src/Controller/AdressbookController.php b/src/Controller/AdressbookController.php index dafa444..db1d079 100644 --- a/src/Controller/AdressbookController.php +++ b/src/Controller/AdressbookController.php @@ -6,13 +6,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class AdressbookController extends AbstractController { - /** - * @Route("/room/adressbook/remove", name= "adressbook_remove_user") - */ + #[Route("/room/adressbook/remove", name: "adressbook_remove_user")] + public function index(Request $request): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('id')); diff --git a/src/Controller/AtendeelistController.php b/src/Controller/AtendeelistController.php index 15be999..b7f149a 100644 --- a/src/Controller/AtendeelistController.php +++ b/src/Controller/AtendeelistController.php @@ -8,13 +8,12 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class AtendeelistController extends AbstractController { - /** - * @Route("/room/atendeelist/download/excel/{uid}", name= "atendeelist_download_excel") - */ + #[Route("/room/atendeelist/download/excel/{uid}", name: "atendeelist_download_excel")] + public function index($uid, TeilnehmerExcelService $teilnehmerExcelService): Response { diff --git a/src/Controller/ChangePermissionsController.php b/src/Controller/ChangePermissionsController.php index 9e91804..7d075e9 100644 --- a/src/Controller/ChangePermissionsController.php +++ b/src/Controller/ChangePermissionsController.php @@ -9,14 +9,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class ChangePermissionsController extends AbstractController { - /** - * @Route("/room/change/permissions/shareScreen", name= "change_permissions_screenShare") - */ + #[Route("/room/change/permissions/shareScreen", name: "change_permissions_screenShare")] + public function shareScreen(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -33,9 +32,8 @@ public function shareScreen(Request $request, TranslatorInterface $translator, P } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - /** - * @Route("/room/change/permissions/privateMessage", name= "change_permissions_privateMessage") - */ + #[Route("/room/change/permissions/privateMessage", name: "change_permissions_privateMessage")] + public function privateMesage(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -52,9 +50,8 @@ public function privateMesage(Request $request, TranslatorInterface $translator, } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - /** - * @Route("/room/addModerator", name= "room_add_moderator") - */ + #[Route("/room/addModerator", name: "room_add_moderator")] + public function roomTransferModerator(Request $request, PermissionChangeService $permissionChangeService, TranslatorInterface $translator) { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); diff --git a/src/Controller/ConfirmController.php b/src/Controller/ConfirmController.php index 5c8aee4..9439546 100644 --- a/src/Controller/ConfirmController.php +++ b/src/Controller/ConfirmController.php @@ -9,7 +9,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class ConfirmController extends AbstractController { @@ -19,9 +19,8 @@ public function __construct(LoggerService $logger) { $this->logger = $logger; } - /** - * @Route("/room/confirm/manuell", name= "confirm_manuell") - */ + #[Route("/room/confirm/manuell", name: "confirm_manuell")] + public function index(Request $request, SubcriptionService $subcriptionService): Response { $subscriber = $this->getDoctrine()->getRepository(Subscriber::class)->find($request->get('id')); diff --git a/src/Controller/CreateEventsController.php b/src/Controller/CreateEventsController.php index 5ceff71..8bb4251 100644 --- a/src/Controller/CreateEventsController.php +++ b/src/Controller/CreateEventsController.php @@ -9,14 +9,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class CreateEventsController extends AbstractController { - /** - * @Route("/room/create/events", name= "create_events") - */ + #[Route("/room/create/events", name: "create_events")] + public function index(Request $request, TranslatorInterface $translator, CloneService $cloneService): Response { $roomOld = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('roomId')); diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index 04ff787..8143107 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -10,13 +10,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class CronController extends AbstractController { - /** - * @Route("/cron/remember", name= "cron_remember") - */ + #[Route("/cron/remember", name: "cron_remember")] + public function updateCronAkademie(Request $request, LoggerInterface $logger, UserService $userService, ReminderService $reminderService) { if ($request->get('token') !== $this->getParameter('cronToken')) { diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index 2a63256..f6ac60a 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -17,7 +17,7 @@ use Firebase\JWT\JWT; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; @@ -29,7 +29,7 @@ class DashboardController extends AbstractController { /** - * @Route("/", name= "index") + #[Route("/", name: "index")] * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ @@ -56,7 +56,7 @@ public function index(Request $request, RoomSpaceService $roomSpaceService) /** - * @Route("/room/dashboard", name= "dashboard") + #[Route("/room/dashboard", name: "dashboard")] * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response */ diff --git a/src/Controller/DayListController.php b/src/Controller/DayListController.php index 56483de..83527f7 100644 --- a/src/Controller/DayListController.php +++ b/src/Controller/DayListController.php @@ -9,15 +9,14 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class DayListController extends AbstractController { - /** - * @Route("/room/day/list", name= "day_list") - */ + #[Route("/room/day/list", name: "day_list")] + public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelService): Response { $from = $request->get('from') ? new \DateTime($request->get('from')) : new \DateTime(); @@ -36,9 +35,8 @@ public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelS ->getResult(); return $this->file($teilnehmerExcelService->generateTeilnehmerDayList($rooms,md5(uniqid()) ), $from->format('d.m.Y').' - '.$to->format('d.m.Y') . '.xlsx', ResponseHeaderBag::DISPOSITION_INLINE); } - /** - * @Route("/room/day/list/modal", name= "day_list_modal") - */ + #[Route("/room/day/list/modal", name: "day_list_modal")] + public function modal(Request $request, TeilnehmerExcelService $teilnehmerExcelService,TranslatorInterface $translator): Response { diff --git a/src/Controller/HealthCheckController.php b/src/Controller/HealthCheckController.php index 50ac73b..d13d5b0 100644 --- a/src/Controller/HealthCheckController.php +++ b/src/Controller/HealthCheckController.php @@ -7,13 +7,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class HealthCheckController extends AbstractController { - /** - * @Route("/health/check", name= "health_check",methods= {"GET"}) - */ + #[Route("/health/check", name: "health_check",methods: ["GET"])] + public function index(): Response { try { diff --git a/src/Controller/IcalController.php b/src/Controller/IcalController.php index 4546c4b..a28e87e 100644 --- a/src/Controller/IcalController.php +++ b/src/Controller/IcalController.php @@ -13,16 +13,15 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Cache\ItemInterface; class IcalController extends AbstractController { - /** - * @Route("/ical/{id}", name= "ical") - * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "uid"}}) - */ + #[Route("/ical/{id}", name: "ical")] + #[MapEntity(expr: "repository.findOneBy({'uid': id})")] + public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response { diff --git a/src/Controller/InvitationController.php b/src/Controller/InvitationController.php index 985b3b6..8a2670f 100644 --- a/src/Controller/InvitationController.php +++ b/src/Controller/InvitationController.php @@ -7,15 +7,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; class InvitationController extends AbstractController { - /** - * @Route("/login/invitationAccept/{id}", name= "invitation_accept") - * @ParamConverter("user", options={"mapping"={"id":"registerId"}}) - */ + #[Route("/login/invitationAccept/{id}", name: "invitation_accept")] + #[MapEntity(expr: "repository.findOneBy({'registerId': id})")] + public function index(InviteService $inviteService, User $user, Request $request): Response { diff --git a/src/Controller/JoinController.php b/src/Controller/JoinController.php index 06d5f85..95b70cf 100644 --- a/src/Controller/JoinController.php +++ b/src/Controller/JoinController.php @@ -13,7 +13,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Cache\ItemInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -26,10 +26,9 @@ public function __construct(ParameterBagInterface $parameterBag) { $this->parameterBag = $parameterBag; } - /** - * @Route("/join/{slug}", name= "join_index") - * @Route("/join", name= "join_index_no_slug") - */ + #[Route("/join/{slug}", name: "join_index")] + #[Route("/join", name: "join_index_no_slug")] + public function index($slug = null, PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, HttpClientInterface $httpClient) { $data = array(); diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 0578ba7..87ec880 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -10,22 +10,20 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginController extends AbstractController { - /** - * @Route("/login/auth0_login", name= "login_auth0") - */ + #[Route("/login/auth0_login", name: "login_auth0")] + public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('auth0_main')->redirect(['user']); } - /** - * @Route("/login/auth0_login/check", name= "connect_auth0_check") - */ + #[Route("/login/auth0_login/check", name: "connect_auth0_check")] + public function check(ClientRegistry $clientRegistry, Request $request) { // ** if you want to *authenticate* the user, then @@ -49,9 +47,8 @@ public function check(ClientRegistry $clientRegistry, Request $request) die; } } - /** - * @Route("/room/logout_keycloak", name= "logout_keycloak") - */ + #[Route("/room/logout_keycloak", name: "logout_keycloak")] + public function logout( ClientRegistry $clientRegistry, Request $request diff --git a/src/Controller/LoginControllerKeycloak.php b/src/Controller/LoginControllerKeycloak.php index 536285d..580794b 100644 --- a/src/Controller/LoginControllerKeycloak.php +++ b/src/Controller/LoginControllerKeycloak.php @@ -6,21 +6,19 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginControllerKeycloak extends AbstractController { - /** - * @Route("/login", name= "login_keycloak") - */ + #[Route("/login", name: "login_keycloak")] + public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('keycloak_main')->redirect(['email','openid','profile']); } - /** - * @Route("/register", name= "register_keycloak") - */ + #[Route("/register", name: "register_keycloak")] + public function register(ClientRegistry $clientRegistry): Response { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/protocol/openid-connect/registrations?client_id='. @@ -34,17 +32,15 @@ public function check(ClientRegistry $clientRegistry, Request $request) { } - /** - * @Route("/login/keycloak_edit", name= "connect_keycloak_edit") - */ + #[Route("/login/keycloak_edit", name: "connect_keycloak_edit")] + public function edit(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account'; return $this->redirect($url); } - /** - * @Route("/login/keycloak_password", name= "connect_keycloak_password") - */ + #[Route("/login/keycloak_password", name: "connect_keycloak_password")] + public function password(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account/password'; diff --git a/src/Controller/ParticipantController.php b/src/Controller/ParticipantController.php index 352ceae..872c705 100644 --- a/src/Controller/ParticipantController.php +++ b/src/Controller/ParticipantController.php @@ -7,15 +7,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function GuzzleHttp\Psr7\str; class ParticipantController extends AbstractController { - /** - * @Route("/room/participant", name= "search_participant") - */ + #[Route("/room/participant", name: "search_participant")] + public function index(Request $request, TranslatorInterface $translator): Response { $string = $request->get('search'); diff --git a/src/Controller/ReminderLizenseController.php b/src/Controller/ReminderLizenseController.php index dd809e6..fe13784 100644 --- a/src/Controller/ReminderLizenseController.php +++ b/src/Controller/ReminderLizenseController.php @@ -11,15 +11,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class ReminderLizenseController extends AbstractController { - /** - * @Route("/reminder/lizense", name= "reminder_lizense") - */ + #[Route("/reminder/lizense", name: "reminder_lizense")] + public function index(LoggerInterface $logger, Request $request, MailerService $mailerService, TranslatorInterface $translator,ParameterBagInterface $parameterBag): Response { if ($request->get('token') !== $parameterBag->get('cronToken')) { diff --git a/src/Controller/RepeatSendController.php b/src/Controller/RepeatSendController.php index aee4671..316983a 100644 --- a/src/Controller/RepeatSendController.php +++ b/src/Controller/RepeatSendController.php @@ -10,14 +10,13 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class RepeatSendController extends AbstractController { - /** - * @Route("/rooms/repeat/sendAll", name= "room_repeat_send") - */ + #[Route("/rooms/repeat/sendAll", name: "room_repeat_send")] + public function index(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); @@ -30,9 +29,8 @@ public function index(Request $request, UserService $userService, TranslatorInte return $this->redirectToRoute('dashboard', array('snack' => $translator->trans('Teilnehmer wurden eingeladen'))); } - /** - * @Route("/rooms/repeat/sendUser", name= "room_repeat_user") - */ + #[Route("/rooms/repeat/sendUser", name: "room_repeat_user")] + public function toOneUser(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); diff --git a/src/Controller/RoomController.php b/src/Controller/RoomController.php index 285048b..cccd214 100644 --- a/src/Controller/RoomController.php +++ b/src/Controller/RoomController.php @@ -22,8 +22,8 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class RoomController extends AbstractController @@ -36,9 +36,8 @@ public function __construct(TranslatorInterface $translator, LoggerService $logg $this->translator = $translator; $this->logger = $logger; } - /** - * @Route("/room/new", name= "room_new") - */ + #[Route("/room/new", name: "room_new")] + public function newRoom(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserEventCreateService $userEventCreateService) { $roomOld = null; @@ -143,9 +142,8 @@ public function newRoom(Request $request, UserService $userService, TranslatorIn } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - /** - * @Route("/room/add-user", name= "room_add_user") - */ + #[Route("/room/add-user", name: "room_add_user")] + public function roomAddUser(Request $request, InviteService $inviteService, UserService $userService) { $newMember = array(); @@ -188,10 +186,9 @@ public function roomAddUser(Request $request, InviteService $inviteService, User return $this->render('room/attendeeModal.twig', array('form' => $form->createView(), 'title' => $title, 'room' => $room)); } - /** - * @Route("/room/join/{t}/{room}", name= "room_join") - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("/room/join/{t}/{room}", name: "room_join")] + #[MapEntity(mapping: ['room' => 'id'])] + public function joinRoom(RoomService $roomService, Rooms $room, $t) { @@ -203,9 +200,8 @@ function joinRoom(RoomService $roomService, Rooms $room, $t) return $this->redirectToRoute('dashboard', ['join_room' => $room->getId(), 'type' => $t]); } - /** - * @Route("/room/user/remove", name= "room_user_remove") - */ + #[Route("/room/user/remove", name: "room_user_remove")] + public function roomUserRemove(Request $request, UserService $userService) { @@ -252,9 +248,8 @@ function roomUserRemove(Request $request, UserService $userService) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/room/remove", name= "room_remove") - */ + #[Route("/room/remove", name: "room_remove")] + public function roomRemove(Request $request, UserService $userService) { @@ -278,9 +273,8 @@ function roomRemove(Request $request, UserService $userService) } return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/room/clone", name= "room_clone") - */ + #[Route("/room/clone", name: "room_clone")] + public function roomClone(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment) { diff --git a/src/Controller/ScheduleController.php b/src/Controller/ScheduleController.php index a018a87..3ab56e1 100644 --- a/src/Controller/ScheduleController.php +++ b/src/Controller/ScheduleController.php @@ -18,15 +18,14 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Contracts\Translation\TranslatorInterface; class ScheduleController extends AbstractController { - /** - * @Route("room/schedule/new", name= "schedule_admin_new") - */ + #[Route("room/schedule/new", name: "schedule_admin_new")] + public function new( Request $request, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserService $userService, UserEventCreateService $userEventCreateService): Response { if ($request->get('id')) { @@ -108,10 +107,9 @@ public function new( Request $request, TranslatorInterface $translator, ServerUs } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - /** - * @Route("room/schedule/admin/{id}", name= "schedule_admin",methods= {"GET"}) - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("room/schedule/admin/{id}", name: "schedule_admin",methods: ["GET"])] + #[MapEntity(mapping: ['room' => 'id'])] + public function index(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -123,10 +121,9 @@ public function index(Rooms $rooms, Request $request): Response 'room' => $rooms, ]); } - /** - * @Route("room/schedule/admin/add/{id}", name= "schedule_admin_add",methods= {"POST"}) - * @ParamConverter("room", options={"mapping"={"room"="id"}}) - */ + #[Route("room/schedule/admin/add/{id}", name: "schedule_admin_add",methods: ["POST"])] + #[MapEntity(mapping: ['room' => 'id'])] + public function add(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -155,10 +152,9 @@ public function add(Rooms $rooms, Request $request): Response return new JsonResponse(array('error' => false)); } - /** - * @Route("room/schedule/admin/remove/{id}", name= "schedule_admin_remove",methods= {"DELETE"}) - * @ParamConverter("schedulingTime") - */ + #[Route("room/schedule/admin/remove/{id}", name: "schedule_admin_remove",methods: ["DELETE"])] + #[MapEntity] + public function remove(SchedulingTime $schedulingTime, Request $request): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { @@ -179,10 +175,9 @@ public function remove(SchedulingTime $schedulingTime, Request $request): Respon return new JsonResponse(array('error' => false)); } - /** - * @Route("room/schedule/admin/choose/{id}", name= "schedule_admin_choose",methods= {"GET"}) - * @ParamConverter("schedulingTime") - */ + #[Route("room/schedule/admin/choose/{id}", name: "schedule_admin_choose",methods: ["GET"])] + #[MapEntity] + public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { @@ -194,11 +189,10 @@ public function choose(SchedulingTime $schedulingTime, Request $request, Schedul }; return $this->redirectToRoute('dashboard', array('snack' => $text)); } - /** - * @Route("schedule/{scheduleId}/{userId}", name= "schedule_public_main", methods= {"GET"}) - * @ParamConverter("user", options={"mapping"={"userId":"uid"}}) - * @ParamConverter("scheduling", class="App\Entity\Scheduling",options={"mapping": {"scheduleId": "uid"}}) - */ + #[Route("schedule/{scheduleId}/{userId}", name: "schedule_public_main", methods: ["GET"])] + #[MapEntity(expr: "repository.findOneBy({'uid': userId})")] + #[MapEntity(expr: "repository.findOneBy({'uid': scheduleId})")] + public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response { if (!in_array($user, $scheduling->getRoom()->getUser()->toArray())) { @@ -215,9 +209,8 @@ public function public(Scheduling $scheduling, User $user, Request $request, Pex return $this->render('schedule/schedulePublic.html.twig', array('user' => $user, 'scheduling' => $scheduling, 'room' => $scheduling->getRoom(), 'standort' => $standort)); } - /** - * @Route("schedule/vote", name= "schedule_public_vote", methods= {"POST"}) - */ + #[Route("schedule/vote", name: "schedule_public_vote", methods: ["POST"])] + public function vote(Request $request, TranslatorInterface $translator): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('user')); diff --git a/src/Controller/ShareLinkController.php b/src/Controller/ShareLinkController.php index ddf0f18..1fc3daa 100644 --- a/src/Controller/ShareLinkController.php +++ b/src/Controller/ShareLinkController.php @@ -22,8 +22,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; -use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; +use Symfony\Component\Routing\Attribute\Route; +use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\Validator\Constraints\Json; use Symfony\Contracts\Translation\TranslatorInterface; use function Symfony\Component\String\s; @@ -39,10 +39,9 @@ public function __construct(EntityManagerInterface $entityManager, LoggerService $this->logger = $logger; } - /** - * @Route("/room/share/link/{id}", name= "share_link") - * @ParamConverter("rooms") - */ + #[Route("/room/share/link/{id}", name: "share_link")] + #[MapEntity] + public function index(Rooms $rooms): Response { if (!$rooms || !$rooms->getModerator() == $this->getUser() || $rooms->getPublic() != true) { @@ -51,10 +50,9 @@ public function index(Rooms $rooms): Response return $this->render('share_link/__shareLinkModal.html.twig', array('room' => $rooms)); } - /** - * @Route("/room/share/link/accetwaitinglist/{id}", name= "accept_waitingList") - * @ParamConverter("waitinglist") - */ + #[Route("/room/share/link/accetwaitinglist/{id}", name: "accept_waitingList")] + #[MapEntity] + public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { @@ -65,10 +63,9 @@ public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $ } return new JsonResponse(array('error' => true)); } - /** - * @Route("/room/share/link/deniewaitinglist/{id}", name= "denie_waitingList") - * @ParamConverter("waitinglist") - */ + #[Route("/room/share/link/deniewaitinglist/{id}", name: "denie_waitingList")] + #[MapEntity] + public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response { @@ -112,9 +109,8 @@ public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $s return new JsonResponse(array('error' => true)); } - /** - * @Route("/subscribe/self/{uid}", name= "public_subscribe_participant") - */ + #[Route("/subscribe/self/{uid}", name: "public_subscribe_participant")] + public function participants($uid, Request $request, SubcriptionService $subcriptionService, TranslatorInterface $translator, PexelService $pexelService): Response { $rooms = new Rooms(); @@ -226,9 +222,8 @@ public function participants($uid, Request $request, SubcriptionService $subcrip 'color' => $color, ]); } - /** - * @Route("/subscribe/optIn/{uid}", name= "public_subscribe_doupleOptIn") - */ + #[Route("/subscribe/optIn/{uid}", name: "public_subscribe_doupleOptIn")] + public function doupleoptin($uid, SubcriptionService $subcriptionService, TranslatorInterface $translator, UserService $userService, PexelService $pexelService): Response { $subscriber = $this->em->getRepository(Subscriber::class)->findOneBy(array('uid' => $uid)); diff --git a/src/Controller/StandortController.php b/src/Controller/StandortController.php index 4dca8a6..e3c7099 100644 --- a/src/Controller/StandortController.php +++ b/src/Controller/StandortController.php @@ -21,15 +21,14 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; class StandortController extends AbstractController { - /** - * @Route("/server/add", name= "servers_add") - */ + #[Route("/server/add", name: "servers_add")] + public function serverAdd(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator) { if ($request->get('id')) { @@ -67,9 +66,8 @@ public function serverAdd(Request $request, ValidatorInterface $validator, Stand return $this->render('servers/__addServerModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'standort' => $standort)); } - /** - * @Route("/server/enterprise", name= "servers_enterprise") - */ + #[Route("/server/enterprise", name: "servers_enterprise")] + public function serverEnterprise(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator, LicenseService $licenseService) { @@ -98,9 +96,8 @@ public function serverEnterprise(Request $request, ValidatorInterface $validator return $this->render('servers/__serverEnterpriseModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'server' => $server)); } - /** - * @Route("/server/add-user", name= "server_add_user") - */ + #[Route("/server/add-user", name: "server_add_user")] + public function roomAddUser(Request $request, InviteService $inviteService, StandortService $serverService, TranslatorInterface $translator) { $newMember = array(); @@ -136,9 +133,8 @@ public function roomAddUser(Request $request, InviteService $inviteService, Stan return $this->render('servers/permissionModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'users' => $server->getUser(), 'server' => $server)); } - /** - * @Route("/server/user/remove", name= "server_user_remove") - */ + #[Route("/server/user/remove", name: "server_user_remove")] + public function serverUserRemove(Request $request, TranslatorInterface $translator) { @@ -156,9 +152,8 @@ function serverUserRemove(Request $request, TranslatorInterface $translator) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/server/delete", name= "server_delete") - */ + #[Route("/server/delete", name: "server_delete")] + public function serverDelete(Request $request, TranslatorInterface $translator, StandortService $serverService) { @@ -182,9 +177,8 @@ function serverDelete(Request $request, TranslatorInterface $translator, Standor return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - /** - * @Route("/server/check/email", name= "server_check_email") - */ + #[Route("/server/check/email", name: "server_check_email")] + public function servercheckEmail(Request $request, TranslatorInterface $translator, MailerService $mailerService) { diff --git a/src/Controller/StornoController.php b/src/Controller/StornoController.php index 02074c4..0c957a3 100644 --- a/src/Controller/StornoController.php +++ b/src/Controller/StornoController.php @@ -10,14 +10,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Contracts\Translation\TranslatorInterface; class StornoController extends AbstractController { - /** - * @Route("/public/storno/start/{uidRoom}/{uidUser}", name= "storno_index") - */ + #[Route("/public/storno/start/{uidRoom}/{uidUser}", name: "storno_index")] + public function index($uidRoom, $uidUser): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); @@ -35,9 +34,8 @@ public function index($uidRoom, $uidUser): Response 'room'=>$rooms, ]); } - /** - * @Route("/public/storno/accept/{uidRoom}/{uidUser}", name= "storno_accept") - */ + #[Route("/public/storno/accept/{uidRoom}/{uidUser}", name: "storno_accept")] + public function accept($uidRoom, $uidUser, UserService $userService,TranslatorInterface $translator, NotificationService $notificationService): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); diff --git a/src/Controller/TransferOwnershipController.php b/src/Controller/TransferOwnershipController.php index 4a49901..f0beaf9 100644 --- a/src/Controller/TransferOwnershipController.php +++ b/src/Controller/TransferOwnershipController.php @@ -12,7 +12,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class TransferOwnershipController extends AbstractController { @@ -30,9 +30,8 @@ public function __construct( $this->roomsRepository = $roomsRepository; $this->transferOwnerShipService = $transferOwnerShipService; } - /** - * @Route("/transfer/ownership", name= "transfer_ownership") - */ + #[Route("/transfer/ownership", name: "transfer_ownership")] + public function index(Request $request): Response { $newOwner = $this->userRepository->find($request->get('new_user')); diff --git a/src/Controller/api/APILicenseController.php b/src/Controller/api/APILicenseController.php index f186ede..dbe8c5a 100644 --- a/src/Controller/api/APILicenseController.php +++ b/src/Controller/api/APILicenseController.php @@ -8,13 +8,12 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; class APILicenseController extends AbstractController { - /** - * @Route("/api/v1/generateLicense", name= "api_generate_license",methods= {"POST"}) - */ + #[Route("/api/v1/generateLicense", name: "api_generate_license",methods: ["POST"])] + public function index(Request $request, LicenseService $licenseService): Response { return new JsonResponse($licenseService->generateNewLicense( diff --git a/src/Controller/api/APIRoomController.php b/src/Controller/api/APIRoomController.php index ade61d7..d53a258 100644 --- a/src/Controller/api/APIRoomController.php +++ b/src/Controller/api/APIRoomController.php @@ -16,14 +16,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use function GuzzleHttp\default_user_agent; class APIRoomController extends AbstractController { - /** - * @Route("/api/v1/room", name= "api_room_create",methods= {"POST"}) - */ + #[Route("/api/v1/room", name: "api_room_create",methods: ["POST"])] + public function index(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { @@ -59,9 +58,8 @@ public function index(LicenseService $licenseService, Request $request, Paramete $room = $roomService->createRoom($user, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich angelegt')); } - /** - * @Route("/api/v1/room", name= "apiV1_roomDelete", methods= {"DELETE"}) - */ + #[Route("/api/v1/room", name: "apiV1_roomDelete", methods: ["DELETE"])] + public function removeRoom(Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -79,9 +77,8 @@ public function removeRoom(Request $request, ParameterBagInterface $parameterBag $roomService->deleteRoom($room); return new JsonResponse(array('error' => false, 'text' => 'Erfolgreich gelöscht')); } - /** - * @Route("/api/v1/room", name= "api_room_edit",methods= {"PUT"}) - */ + #[Route("/api/v1/room", name: "api_room_edit",methods: ["PUT"])] + public function editRoom(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -109,9 +106,8 @@ public function editRoom(LicenseService $licenseService, Request $request, Para $room = $roomService->editRoom($room, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich geändert')); } - /** - * @Route("/api/v1/serverInfo", name= "api_user_get_server",methods= {"GET"}) - */ + #[Route("/api/v1/serverInfo", name: "api_user_get_server",methods: ["GET"])] + public function getServers(ServerUserManagment $serverUserManagment, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { diff --git a/src/Controller/api/APIUserController.php b/src/Controller/api/APIUserController.php index 3300d76..fa90b64 100644 --- a/src/Controller/api/APIUserController.php +++ b/src/Controller/api/APIUserController.php @@ -15,14 +15,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Annotation\Route; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Generator\UrlGenerator; class APIUserController extends AbstractController { - /** - * @Route("/api/v1/getAllEntries", name= "apiV1_getAllEntries") - */ + #[Route("/api/v1/getAllEntries", name: "apiV1_getAllEntries")] + public function index(): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findRoomsForUser($this->getUser()); @@ -40,9 +39,8 @@ public function index(): Response $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - /** - * @Route("/api/v1/info/{uidReal}", name= "apiV1_roomGetUser",methods= {"GET"}) - */ + #[Route("/api/v1/info/{uidReal}", name: "apiV1_roomGetUser",methods: ["GET"])] + public function getRoomInformations(Request $request, $uidReal, RoomService $roomService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uidReal' => $uidReal)); @@ -50,9 +48,8 @@ public function getRoomInformations(Request $request, $uidReal, RoomService $roo $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - /** - * @Route("/api/v1/user", name= "apiV1_roomAddUser", methods= {"POST"}) - */ + #[Route("/api/v1/user", name: "apiV1_roomAddUser", methods: ["POST"])] + public function addUserToRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, UserService $userService, RoomService $roomService): Response { @@ -66,9 +63,8 @@ public function addUserToRoom(LicenseService $licenseService, Request $request, $email = $request->get('email'); return new JsonResponse($roomService->addUserToRoom($room, $email)); } - /** - * @Route("/api/v1/user", name= "apiV1_roomDeleteUser", methods= {"DELETE"}) - */ + #[Route("/api/v1/user", name: "apiV1_roomDeleteUser", methods: ["DELETE"])] + public function removeUserFromRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, RoomService $roomService): Response { diff --git a/src/Entity/ApiKeys.php b/src/Entity/ApiKeys.php index 56a2f08..adc0f6a 100644 --- a/src/Entity/ApiKeys.php +++ b/src/Entity/ApiKeys.php @@ -5,31 +5,26 @@ use App\Repository\ApiKeysRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=ApiKeysRepository::class) - */ + #[ORM\Entity(repositoryClass: ApiKeysRepository::class)] + class ApiKeys { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $clientId; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $clientSecret; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $createdAt; public function getId(): ?int diff --git a/src/Entity/FreeField.php b/src/Entity/FreeField.php index 97ef51c..a94c04d 100644 --- a/src/Entity/FreeField.php +++ b/src/Entity/FreeField.php @@ -7,37 +7,31 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=FreeFieldRepository::class) - */ + #[ORM\Entity(repositoryClass: FreeFieldRepository::class)] + class FreeField { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $label; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $required; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="freeFields",cascade={"persist"}) - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "freeFields",cascade: ["persist"])] + #[ORM\JoinColumn(nullable: false)] + private $Room; - /** - * @ORM\OneToMany(targetEntity=FreeFieldsUserAnswer::class, mappedBy="freeField") - */ + #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: "freeField")] + private $yes; public function __construct() diff --git a/src/Entity/FreeFieldsUserAnswer.php b/src/Entity/FreeFieldsUserAnswer.php index 6f80619..9b2662e 100644 --- a/src/Entity/FreeFieldsUserAnswer.php +++ b/src/Entity/FreeFieldsUserAnswer.php @@ -5,38 +5,32 @@ use App\Repository\FreeFieldsUserAnswerRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=FreeFieldsUserAnswerRepository::class) - */ + #[ORM\Entity(repositoryClass: FreeFieldsUserAnswerRepository::class)] + class FreeFieldsUserAnswer { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $answer; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="freeFieldsUserAnswers") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "freeFieldsUserAnswers")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=FreeField::class, inversedBy="yes") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: FreeField::class, inversedBy: "yes")] + #[ORM\JoinColumn(nullable: false)] + private $freeField; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $createdAt; public function getId(): ?int diff --git a/src/Entity/Group.php b/src/Entity/Group.php index ecff8e3..94092dd 100644 --- a/src/Entity/Group.php +++ b/src/Entity/Group.php @@ -7,34 +7,29 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=GroupRepository::class) - * @ORM\Table(name="`group`") - */ + #[ORM\Entity(repositoryClass: GroupRepository::class)] + #[ORM\Table(name: "`group`")] + class Group { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="eventGroups") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "eventGroups")] + #[ORM\JoinColumn(nullable: false)] + private $leader; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="groups") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "groups")] + #[ORM\JoinColumn(nullable: false)] + private $rooms; - /** - * @ORM\ManyToMany(targetEntity=User::class, inversedBy="eventGroupsMemebers") - */ + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "eventGroupsMemebers")] + private $members; public function __construct() diff --git a/src/Entity/KeycloakGroupsToStandorts.php b/src/Entity/KeycloakGroupsToStandorts.php index 251f9b9..30c4089 100644 --- a/src/Entity/KeycloakGroupsToStandorts.php +++ b/src/Entity/KeycloakGroupsToStandorts.php @@ -5,27 +5,23 @@ use App\Repository\KeycloakGroupsToStandortsRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=KeycloakGroupsToStandortsRepository::class) - */ + #[ORM\Entity(repositoryClass: KeycloakGroupsToStandortsRepository::class)] + class KeycloakGroupsToStandorts { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=Standort::class, inversedBy="keycloakGroups") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: "keycloakGroups")] + #[ORM\JoinColumn(nullable: false)] + private $standort; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $keycloakGroup; public function getId(): ?int diff --git a/src/Entity/License.php b/src/Entity/License.php index 989a977..c091d71 100644 --- a/src/Entity/License.php +++ b/src/Entity/License.php @@ -8,37 +8,31 @@ use Doctrine\ORM\Mapping as ORM; use phpDocumentor\Reflection\Types\This; -/** - * @ORM\Entity(repositoryClass=LicenseRepository::class) - */ + #[ORM\Entity(repositoryClass: LicenseRepository::class)] + class License { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $licenseKey; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $license; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $validUntil; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $url; diff --git a/src/Entity/Rooms.php b/src/Entity/Rooms.php index c6eae53..1a080d6 100644 --- a/src/Entity/Rooms.php +++ b/src/Entity/Rooms.php @@ -7,230 +7,186 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=RoomsRepository::class) - * @ORM\HasLifecycleCallbacks - */ + #[ORM\Entity(repositoryClass: RoomsRepository::class)] + #[ORM\HasLifecycleCallbacks] + class Rooms { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $name; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: "datetime", nullable: true)] + private $start; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: "datetime", nullable: true)] + private $enddate; - /** - * @ORM\ManyToMany(targetEntity=User::class, inversedBy="rooms") - */ + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "rooms")] + private $user; - /** - * @ORM\ManyToOne(targetEntity=Standort::class, inversedBy="rooms") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: "rooms")] + #[ORM\JoinColumn(nullable: false)] + private $standort; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $uid; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="roomModerator") - * @ORM\JoinColumn(nullable=true) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "roomModerator")] + #[ORM\JoinColumn(nullable: true)] + private $moderator; - /** - * @ORM\Column(type="float") - */ + #[ORM\Column(type: "float")] + private $duration; - /** - * @ORM\Column(type="integer") - */ + #[ORM\Column(type: "integer")] + private $sequence; - /** - * @ORM\Column(type="text",nullable=true) - */ + #[ORM\Column(type: "text",nullable: true)] + private $uidReal; - /** - * @ORM\Column(type="boolean") - */ + #[ORM\Column(type: "boolean")] + private $onlyRegisteredUsers= false; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $agenda; - /** - * @ORM\OneToMany(targetEntity=RoomsUser::class, mappedBy="room") - */ + #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: "room")] + private $userAttributes; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $dissallowScreenshareGlobal; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $dissallowPrivateMessage; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $public = true; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $showRoomOnJoinpage; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $uidParticipant; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $uidModerator; - /** - * @ORM\OneToMany(targetEntity=Subscriber::class, mappedBy="room") - */ + #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: "room")] + private $subscribers; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: "integer", nullable: true)] + private $maxParticipants; - /** - * @ORM\OneToMany(targetEntity=Scheduling::class, mappedBy="room") - */ + #[ORM\OneToMany(targetEntity: Scheduling::class, mappedBy: "room")] + private $schedulings; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $scheduleMeeting; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $waitinglist; - /** - * @ORM\OneToMany(targetEntity=Waitinglist::class, mappedBy="room") - */ + #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: "room")] + private $waitinglists; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: "integer", nullable: true)] + private $maxWaitingList; - /** - * @ORM\ManyToMany(targetEntity=User::class, inversedBy="roomsStorno") - * @ORM\JoinTable(name="rooms_storno") - */ + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "roomsStorno")] + #[ORM\JoinTable(name: "rooms_storno")] + private $storno; - /** - * @ORM\OneToMany(targetEntity=Group::class, mappedBy="rooms") - */ + #[ORM\OneToMany(targetEntity: Group::class, mappedBy: "rooms")] + private $groups; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $allowGroups; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: "integer", nullable: true)] + private $maxGroupSize; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $showRoomOnCalendar; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: "datetime", nullable: true)] + private $entryDateTime; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $promoter; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $additionalInfo; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $showInCalendarWhenNoSpace; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $textWhenNoSpace; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $textWhenRoomWarteliste; - /** - * @ORM\OneToMany(targetEntity=FreeField::class, mappedBy="Room",cascade={"persist"}) - */ + #[ORM\OneToMany(targetEntity: FreeField::class, mappedBy: "Room",cascade: ["persist"])] + private $freeFields; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: "datetime", nullable: true)] + private $showAfterDate; - /** - * @ORM\OneToMany(targetEntity=UserEventCreated::class, mappedBy="event", orphanRemoval=true) - */ + #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: "event", orphanRemoval: true)] + private $userEventCreateds; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $sendEmailOnRegister; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $allowQuickRegistration; public function __construct() diff --git a/src/Entity/RoomsUser.php b/src/Entity/RoomsUser.php index b941557..5c44c51 100644 --- a/src/Entity/RoomsUser.php +++ b/src/Entity/RoomsUser.php @@ -5,44 +5,37 @@ use App\Repository\RoomsUserRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=RoomsUserRepository::class ) - * @ORM\Table(name="userRoomsAttributes") - */ + #[ORM\Entity(repositoryClass: RoomsUserRepository::class )] + #[ORM\Table(name: "userRoomsAttributes")] + class RoomsUser { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="roomsNew") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "roomsNew")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="userAttributes") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "userAttributes")] + #[ORM\JoinColumn(nullable: false)] + private $room; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $shareDisplay; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $moderator; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $privateMessage; diff --git a/src/Entity/Scheduling.php b/src/Entity/Scheduling.php index d952598..e5c0896 100644 --- a/src/Entity/Scheduling.php +++ b/src/Entity/Scheduling.php @@ -7,37 +7,31 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=SchedulingRepository::class) - */ + #[ORM\Entity(repositoryClass: SchedulingRepository::class)] + class Scheduling { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $uid; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $description; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="schedulings") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "schedulings")] + #[ORM\JoinColumn(nullable: false)] + private $room; - /** - * @ORM\OneToMany(targetEntity=SchedulingTime::class, mappedBy="scheduling") - */ + #[ORM\OneToMany(targetEntity: SchedulingTime::class, mappedBy: "scheduling")] + private $schedulingTimes; public function __construct() diff --git a/src/Entity/SchedulingTime.php b/src/Entity/SchedulingTime.php index ee3e709..8168f3f 100644 --- a/src/Entity/SchedulingTime.php +++ b/src/Entity/SchedulingTime.php @@ -7,32 +7,27 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=SchedulingTimeRepository::class) - */ + #[ORM\Entity(repositoryClass: SchedulingTimeRepository::class)] + class SchedulingTime { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $time; - /** - * @ORM\ManyToOne(targetEntity=Scheduling::class, inversedBy="schedulingTimes") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Scheduling::class, inversedBy: "schedulingTimes")] + #[ORM\JoinColumn(nullable: false)] + private $scheduling; - /** - * @ORM\OneToMany(targetEntity=SchedulingTimeUser::class, mappedBy="scheduleTime") - */ + #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: "scheduleTime")] + private $schedulingTimeUsers; public function __construct() diff --git a/src/Entity/SchedulingTimeUser.php b/src/Entity/SchedulingTimeUser.php index 185a49f..a310eea 100644 --- a/src/Entity/SchedulingTimeUser.php +++ b/src/Entity/SchedulingTimeUser.php @@ -5,33 +5,28 @@ use App\Repository\SchedulingTimeUserRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=SchedulingTimeUserRepository::class) - */ + #[ORM\Entity(repositoryClass: SchedulingTimeUserRepository::class)] + class SchedulingTimeUser { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="schedulingTimeUsers") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "schedulingTimeUsers")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=SchedulingTime::class, inversedBy="schedulingTimeUsers") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: SchedulingTime::class, inversedBy: "schedulingTimeUsers")] + #[ORM\JoinColumn(nullable: false)] + private $scheduleTime; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: "integer", nullable: true)] + private $accept; public function getId(): ?int diff --git a/src/Entity/Standort.php b/src/Entity/Standort.php index a90d0f9..8fede09 100644 --- a/src/Entity/Standort.php +++ b/src/Entity/Standort.php @@ -7,156 +7,127 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=StandortRepository::class) - */ + #[ORM\Entity(repositoryClass: StandortRepository::class)] + class Standort { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToMany(targetEntity=User::class, inversedBy="servers") - */ + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "servers")] + private $user; - /** - * @ORM\OneToMany(targetEntity=Rooms::class, mappedBy="server") - */ + #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: "server")] + private $rooms; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="serverAdmins") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "serverAdmins")] + #[ORM\JoinColumn(nullable: false)] + private $administrator; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $logoUrl; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpHost; - /** - * @ORM\Column(type="integer", nullable=true) - */ + #[ORM\Column(type: "integer", nullable: true)] + private $smtpPort; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpPassword; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpUsername; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpEncryption; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpEmail; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $smtpSenderName; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $slug; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $privacyPolicy; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $licenseKey; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $apiKey; - /** - * @ORM\Column(type="string", length=7, nullable=true) - */ + #[ORM\Column(type: "string", length: 7, nullable: true)] + private $staticBackgroundColor; - /** - * @ORM\Column(type="boolean", nullable=true) - */ + #[ORM\Column(type: "boolean", nullable: true)] + private $showStaticBackgroundColor; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $serverEmailHeader; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $serverEmailBody; - /** - * @ORM\OneToMany(targetEntity=KeycloakGroupsToStandorts::class, mappedBy="server") - */ + #[ORM\OneToMany(targetEntity: KeycloakGroupsToStandorts::class, mappedBy: "server")] + private $keycloakGroups; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $name; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $street; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $number; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $roomnumber; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $plz; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $city; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $directions; diff --git a/src/Entity/Subscriber.php b/src/Entity/Subscriber.php index d0daa79..ca59429 100644 --- a/src/Entity/Subscriber.php +++ b/src/Entity/Subscriber.php @@ -5,33 +5,28 @@ use App\Repository\SubscriberRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=SubscriberRepository::class) - */ + #[ORM\Entity(repositoryClass: SubscriberRepository::class)] + class Subscriber { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="subscribers") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "subscribers")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="subscribers") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "subscribers")] + #[ORM\JoinColumn(nullable: false)] + private $room; - /** - * @ORM\Column(type="text") - */ + #[ORM\Column(type: "text")] + private $uid; public function getId(): ?int diff --git a/src/Entity/User.php b/src/Entity/User.php index 3c89948..bf98507 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -10,160 +10,128 @@ use Symfony\Component\Validator\Constraints as Assert; use App\Repository\UserRepository; -/** - * @ORM\Table(name="fos_user") - * @ORM\Entity(repositoryClass=UserRepository::class) - */ + #[ORM\Table(name: "fos_user")] + #[ORM\Entity(repositoryClass: UserRepository::class)] + class User extends BaseUser { - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ + #[ORM\Id] + #[ORM\Column(type: "integer")] + #[ORM\GeneratedValue(strategy: "AUTO")] + protected $id; - /** - * @Assert\NotBlank(message="fos_user.password.blank", groups={"Registration", "ResetPassword", "ChangePassword"}) - * @Assert\Length(min=8, - * minMessage="fos_user.password.short", - * groups={"Registration", "Profile", "ResetPassword", "ChangePassword"}) - */ + #[Assert\NotBlank(message: "fos_user.password.blank", groups: ["Registration", "ResetPassword", "ChangePassword"])] + #[Assert\Length(min: 8, minMessage: "fos_user.password.short", groups: ["Registration", "Profile", "ResetPassword", "ChangePassword"])] + protected $plainPassword; - /** - * @ORM\Column(type="text",nullable=true) - */ + #[ORM\Column(type: "text",nullable: true)] + private $email; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $keycloakId; - /** - * @ORM\Column(type="datetime",nullable=true) - */ + #[ORM\Column(type: "datetime",nullable: true)] + private $createdAt; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $username; - /** - * @ORM\Column(type="datetime", nullable=true) - */ + #[ORM\Column(type: "datetime", nullable: true)] + private $lastLogin; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $firstName; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $lastName; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $registerId; - /** - * @ORM\ManyToMany(targetEntity=Rooms::class, mappedBy="user") - */ + #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: "user")] + private $rooms; - /** - * @ORM\ManyToMany(targetEntity=Standort::class, mappedBy="user") - */ + #[ORM\ManyToMany(targetEntity: Standort::class, mappedBy: "user")] + private $standort; - /** - * @ORM\OneToMany(targetEntity=Rooms::class, mappedBy="moderator") - */ + #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: "moderator")] + private $roomModerator; - /** - * @ORM\OneToMany(targetEntity=Standort::class, mappedBy="administrator") - */ + #[ORM\OneToMany(targetEntity: Standort::class, mappedBy: "administrator")] + private $standortAdmins; - /** - * @ORM\ManyToMany(targetEntity=User::class, inversedBy="addressbookInverse") - */ + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "addressbookInverse")] + private $addressbook; - /** - * @ORM\ManyToMany(targetEntity=User::class, mappedBy="addressbook") - */ + #[ORM\ManyToMany(targetEntity: User::class, mappedBy: "addressbook")] + private $addressbookInverse; - /** - * @ORM\OneToMany(targetEntity=RoomsUser::class, mappedBy="user") - */ + #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: "user")] + private $roomsAttributes; - /** - * @ORM\OneToMany(targetEntity=Subscriber::class, mappedBy="user") - */ + #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: "user")] + private $subscribers; - /** - * @ORM\Column(type="array", nullable=true,name="keycloakGroup") - */ + #[ORM\Column(type: "array", nullable: true,name: "keycloakGroup")] + private $groups = []; - /** - * @ORM\OneToMany(targetEntity=SchedulingTimeUser::class, mappedBy="user") - */ + #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: "user")] + private $schedulingTimeUsers; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $uid; - /** - * @ORM\OneToMany(targetEntity=Waitinglist::class, mappedBy="user") - */ + #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: "user")] + private $waitinglists; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $phone; - /** - * @ORM\ManyToMany(targetEntity=Rooms::class, mappedBy="storno") - */ + #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: "storno")] + private $roomsStorno; - /** - * @ORM\OneToMany(targetEntity=Group::class, mappedBy="leader") - */ + #[ORM\OneToMany(targetEntity: Group::class, mappedBy: "leader")] + private $eventGroups; - /** - * @ORM\ManyToMany(targetEntity=Group::class, mappedBy="members") - */ + #[ORM\ManyToMany(targetEntity: Group::class, mappedBy: "members")] + private $eventGroupsMemebers; - /** - * @ORM\Column(type="text", nullable=true) - */ + #[ORM\Column(type: "text", nullable: true)] + private $address; - /** - * @ORM\OneToMany(targetEntity=FreeFieldsUserAnswer::class, mappedBy="user") - */ + #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: "user")] + private $freeFieldsUserAnswers; - /** - * @ORM\OneToMany(targetEntity=UserEventCreated::class, mappedBy="user", orphanRemoval=true) - */ + #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: "user", orphanRemoval: true)] + private $userEventCreateds; diff --git a/src/Entity/UserBase.php b/src/Entity/UserBase.php index c1db597..5ea3c30 100644 --- a/src/Entity/UserBase.php +++ b/src/Entity/UserBase.php @@ -10,19 +10,17 @@ class UserBase implements UserInterface { - /** - * @ORM\Column(type="string", length=180, unique=true) - */ + #[ORM\Column(type: "string", length: 180, unique: true)] + private $uuid; - /** - * @ORM\Column(type="json") - */ + #[ORM\Column(type: "json")] + private $roles = []; /** * @var string The hashed password - * @ORM\Column(type="string") + #[ORM\Column(type: "string")] */ private $password; diff --git a/src/Entity/UserEventCreated.php b/src/Entity/UserEventCreated.php index 671a8db..7111fe4 100644 --- a/src/Entity/UserEventCreated.php +++ b/src/Entity/UserEventCreated.php @@ -5,33 +5,28 @@ use App\Repository\UserEventCreatedRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=UserEventCreatedRepository::class) - */ + #[ORM\Entity(repositoryClass: UserEventCreatedRepository::class)] + class UserEventCreated { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="userEventCreateds") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "userEventCreateds")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="userEventCreateds") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "userEventCreateds")] + #[ORM\JoinColumn(nullable: false)] + private $event; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $created_at; public function getId(): ?int diff --git a/src/Entity/Waitinglist.php b/src/Entity/Waitinglist.php index f483221..73a8aaf 100644 --- a/src/Entity/Waitinglist.php +++ b/src/Entity/Waitinglist.php @@ -5,33 +5,28 @@ use App\Repository\WaitinglistRepository; use Doctrine\ORM\Mapping as ORM; -/** - * @ORM\Entity(repositoryClass=WaitinglistRepository::class) - */ + #[ORM\Entity(repositoryClass: WaitinglistRepository::class)] + class Waitinglist { - /** - * @ORM\Id - * @ORM\GeneratedValue - * @ORM\Column(type="integer") - */ + #[ORM\Id] + #[ORM\GeneratedValue] + #[ORM\Column(type: "integer")] + private $id; - /** - * @ORM\ManyToOne(targetEntity=User::class, inversedBy="waitinglists") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "waitinglists")] + #[ORM\JoinColumn(nullable: false)] + private $user; - /** - * @ORM\ManyToOne(targetEntity=Rooms::class, inversedBy="waitinglists") - * @ORM\JoinColumn(nullable=false) - */ + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "waitinglists")] + #[ORM\JoinColumn(nullable: false)] + private $room; - /** - * @ORM\Column(type="datetime") - */ + #[ORM\Column(type: "datetime")] + private $createdAt; public function getId(): ?int From 2bba9278d7b7643a4becddc6c5d4247fb61a43e6 Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 21:52:41 +0100 Subject: [PATCH 05/12] Auto-install Composer dependencies on app container startup --- docker-compose.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 6eb387e..9cfdcdd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,14 @@ services: APP_DEBUG: 1 volumes: - .:/var/www/html:rw + - composer_cache:/tmp/composer + command: > + sh -lc ' + if [ ! -f /var/www/html/vendor/autoload.php ]; then + composer install --working-dir=/var/www/html --no-interaction --prefer-dist; + fi; + apache2-foreground + ' db: image: mysql:8.0 @@ -38,3 +46,4 @@ services: volumes: db_data: + composer_cache: From 87c50da1a93f423c2f09b9ea202f540f2c71f6c6 Mon Sep 17 00:00:00 2001 From: bavxhack <44317199+bavxhack@users.noreply.github.com> Date: Thu, 19 Feb 2026 22:16:20 +0100 Subject: [PATCH 06/12] Fix Composer 8.2 blockers and add install/update fallback guidance --- composer.json | 3 --- config/services.yaml | 3 --- docker-compose.yml | 2 +- docs/composer-troubleshooting.md | 31 +++++++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 docs/composer-troubleshooting.md diff --git a/composer.json b/composer.json index 369404d..a175bf1 100644 --- a/composer.json +++ b/composer.json @@ -9,14 +9,11 @@ "doctrine/doctrine-bundle": "^2.13", "doctrine/doctrine-migrations-bundle": "^3.4", "doctrine/orm": "^3.3", - "dpolac/twig-lambda": "^1.0", "eluceo/ical": "0.16.*", "endroid/qr-code-bundle": "^4.0", "erusev/parsedown": "^1.7", "jms/i18n-routing-bundle": "dev-master", "knpuniversity/oauth2-client-bundle": "^2.5", - "laminas/laminas-code": "^3.4", - "laminas/laminas-escaper": "^2.6", "phpdocumentor/reflection-docblock": "^5.3", "phpoffice/phpspreadsheet": "^1.17", "phpstan/phpdoc-parser": "^1.2", diff --git a/config/services.yaml b/config/services.yaml index 4c08e6c..453f536 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -45,6 +45,3 @@ services: # add more service definitions when explicit configuration is needed # please note that last definitions always *replace* previous ones - dpolac.twig_lambda.extension: - class: DPolac\TwigLambda\LambdaExtension - tags: [ { name: twig.extension } ] diff --git a/docker-compose.yml b/docker-compose.yml index 9cfdcdd..0c756dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,7 @@ services: command: > sh -lc ' if [ ! -f /var/www/html/vendor/autoload.php ]; then - composer install --working-dir=/var/www/html --no-interaction --prefer-dist; + composer install --working-dir=/var/www/html --no-interaction --prefer-dist || composer update --working-dir=/var/www/html --with-all-dependencies --no-interaction --prefer-dist; fi; apache2-foreground ' diff --git a/docs/composer-troubleshooting.md b/docs/composer-troubleshooting.md new file mode 100644 index 0000000..f49eceb --- /dev/null +++ b/docs/composer-troubleshooting.md @@ -0,0 +1,31 @@ +# Composer Troubleshooting (PHP 8.2 / Symfony 7.4) + +Wenn du Meldungen wie diese bekommst: + +- `php composer.phar install` zeigt viele `Deprecated`-Hinweise +- `The lock file is not up to date with the latest changes in composer.json` +- `Your requirements could not be resolved ... php ^7.x` + +liegt das in diesem Projekt typischerweise an **zwei Punkten**: + +1. Es wird ein altes lokales `composer.phar` (Composer 1.x) benutzt. +2. `composer.lock` enthält alte Versionen (5.4/7.x-Pakete), während `composer.json` bereits auf Symfony 7.4 / PHP 8.2 steht. + +## Empfohlene Befehle + +Nutze Composer 2 (nicht `php composer.phar`): + +```bash +composer --version +composer update --with-all-dependencies +composer install +``` + +## Docker + +Der `app`-Container versucht beim ersten Start automatisch: + +1. `composer install` +2. Fallback auf `composer update --with-all-dependencies`, falls der Lockfile-Stand nicht passt. + +Damit wird `vendor/autoload.php` erstellt und Symfony kann starten. From b3a917a38ea50de84e71eb96e05fd0780fb6645c Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 00:14:53 +0100 Subject: [PATCH 07/12] *makw update working --- .env | 6 + composer.json | 14 +- composer.lock | 8714 ++++++++++------- config/bundles.php | 1 - config/packages/csrf.yaml | 11 + .../packages/dama_doctrine_test_bundle.yaml | 5 + config/packages/debug.yaml | 5 + config/packages/doctrine.yaml | 1 - config/packages/jms_i18n_routing.yaml | 4 - config/packages/monolog.yaml | 55 + config/packages/property_info.yaml | 3 + config/packages/security.yaml | 5 +- config/packages/web_profiler.yaml | 13 + config/routes/framework.yaml | 4 + config/routes/security.yaml | 3 + config/routes/web_profiler.yaml | 8 + package-lock.json | 55 +- package.json | 8 +- phpunit.xml.dist | 5 + src/Controller/JoinController.php | 2 +- src/DataFixtures/AppFixtures.php | 17 - src/DataFixtures/User.php | 2 +- src/Entity/UserBase.php | 7 +- src/Kernel.php | 43 - src/Security/KeycloakAuthenticator.php | 2 +- src/Security/UserProvider.php | 11 +- symfony.lock | 748 +- templates/base.html.twig | 1 + 28 files changed, 5351 insertions(+), 4402 deletions(-) create mode 100644 config/packages/csrf.yaml create mode 100644 config/packages/dama_doctrine_test_bundle.yaml create mode 100644 config/packages/debug.yaml create mode 100644 config/packages/monolog.yaml create mode 100644 config/packages/property_info.yaml create mode 100644 config/packages/web_profiler.yaml create mode 100644 config/routes/framework.yaml create mode 100644 config/routes/security.yaml create mode 100644 config/routes/web_profiler.yaml delete mode 100644 src/DataFixtures/AppFixtures.php diff --git a/.env b/.env index f516767..ef7ba84 100644 --- a/.env +++ b/.env @@ -109,3 +109,9 @@ laf_loginButton="Login" ###> Default Jitsi Server ### default_jitsi_server_id=0 ###< Default Jitsi Server ### + +###> symfony/routing ### +# Configure how to generate URLs in non-HTTP contexts, such as CLI commands. +# See https://symfony.com/doc/current/routing.html#generating-urls-in-commands +DEFAULT_URI=http://localhost +###< symfony/routing ### diff --git a/composer.json b/composer.json index a175bf1..ab7f5c7 100644 --- a/composer.json +++ b/composer.json @@ -5,14 +5,13 @@ "php": "^8.2", "ext-ctype": "*", "ext-iconv": "*", - "doctrine/annotations": "^2.0", "doctrine/doctrine-bundle": "^2.13", "doctrine/doctrine-migrations-bundle": "^3.4", "doctrine/orm": "^3.3", "eluceo/ical": "0.16.*", - "endroid/qr-code-bundle": "^4.0", + "endroid/qr-code-bundle": "^6.0", "erusev/parsedown": "^1.7", - "jms/i18n-routing-bundle": "dev-master", + "h2invent/i18n-routing-bundle": "^3.2", "knpuniversity/oauth2-client-bundle": "^2.5", "phpdocumentor/reflection-docblock": "^5.3", "phpoffice/phpspreadsheet": "^1.17", @@ -33,7 +32,6 @@ "symfony/process": "7.4.*", "symfony/property-access": "7.4.*", "symfony/property-info": "7.4.*", - "symfony/proxy-manager-bridge": "7.4.*", "symfony/security-bundle": "7.4.*", "symfony/serializer": "7.4.*", "symfony/translation": "7.4.*", @@ -50,7 +48,7 @@ "twig/twig": "^3.0" }, "require-dev": { - "dama/doctrine-test-bundle": "^6.5", + "dama/doctrine-test-bundle": "^v8.0", "doctrine/doctrine-fixtures-bundle": "^3.4", "phpunit/phpunit": "^11.0", "symfony/browser-kit": "7.4.*", @@ -65,7 +63,11 @@ "preferred-install": { "*": "dist" }, - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "endroid/installer": true, + "symfony/flex": true + } }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 172af19..649a8be 100644 --- a/composer.lock +++ b/composer.lock @@ -4,31 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b0fe5357fc21a4ce564b98582624c687", + "content-hash": "7bc527e5b278a0f3926834ec3377502c", "packages": [ { "name": "bacon/bacon-qr-code", - "version": "2.0.4", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09" + "reference": "36a1cb2b81493fa5b82e50bf8068bf84d1542563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/36a1cb2b81493fa5b82e50bf8068bf84d1542563", + "reference": "36a1cb2b81493fa5b82e50bf8068bf84d1542563", "shasum": "" }, "require": { "dasprid/enum": "^1.0.3", "ext-iconv": "*", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" + "phly/keep-a-changelog": "^2.12", + "phpunit/phpunit": "^10.5.11 || ^11.0.4", + "spatie/phpunit-snapshot-assertions": "^5.1.5", + "spatie/pixelmatch-php": "^1.2.0", + "squizlabs/php_codesniffer": "^3.9" }, "suggest": { "ext-imagick": "to generate QR code images" @@ -53,44 +55,51 @@ ], "description": "BaconQrCode is a QR code generator for PHP.", "homepage": "https://github.com/Bacon/BaconQrCode", - "time": "2021-06-18T13:26:35+00:00" + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.0.3" + }, + "time": "2025-11-19T17:15:36+00:00" }, { - "name": "composer/package-versions-deprecated", - "version": "1.11.99.4", + "name": "composer/pcre", + "version": "3.3.2", "source": { "type": "git", - "url": "https://github.com/composer/package-versions-deprecated.git", - "reference": "b174585d1fe49ceed21928a945138948cb394600" + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", - "reference": "b174585d1fe49ceed21928a945138948cb394600", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1.0 || ^2.0", - "php": "^7 || ^8" + "php": "^7.4 || ^8.0" }, - "replace": { - "ocramius/package-versions": "1.11.99" + "conflict": { + "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "composer/composer": "^1.9.3 || ^2.0@dev", - "ext-zip": "^1.13", - "phpunit/phpunit": "^6.5 || ^7" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, - "type": "composer-plugin", + "type": "library", "extra": { - "class": "PackageVersions\\Installer", + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "PackageVersions\\": "src/PackageVersions" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -99,34 +108,58 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "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" }, { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2021-09-13T08:41:34+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "dasprid/enum", - "version": "1.0.3", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, + "require": { + "php": ">=7.1 <9.0" + }, "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" }, "type": "library", "autoload": { @@ -151,184 +184,42 @@ "enum", "map" ], - "time": "2020-10-02T16:03:48+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.13.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", - "reference": "5b668aef16090008790395c02c893b1ba13f7e08", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^6.0 || ^8.1", - "phpstan/phpstan": "^0.12.20", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", - "symfony/cache": "^4.4 || ^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2021-08-05T19:00:23+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "doctrine/collections", - "version": "1.6.8", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af" + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1958a744696c6bb3bb0d28db2611dc11610e78af", - "reference": "1958a744696c6bb3bb0d28db2611dc11610e78af", + "url": "https://api.github.com/repos/doctrine/collections/zipball/7713da39d8e237f28411d6a616a3dce5e20d5de2", + "reference": "7713da39d8e237f28411d6a616a3dce5e20d5de2", "shasum": "" }, "require": { - "php": "^7.1.3 || ^8.0" + "doctrine/deprecations": "^1", + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", - "vimeo/psalm": "^4.2.1" + "doctrine/coding-standard": "^14", + "ext-json": "*", + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + "Doctrine\\Common\\Collections\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -365,121 +256,62 @@ "iterators", "php" ], - "time": "2021-08-10T18:51:53+00:00" - }, - { - "name": "doctrine/common", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "6d970a11479275300b5144e9373ce5feacfa9b91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/6d970a11479275300b5144e9373ce5feacfa9b91", - "reference": "6d970a11479275300b5144e9373ce5feacfa9b91", - "shasum": "" - }, - "require": { - "doctrine/persistence": "^2.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0 || ^8.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.5.20 || ^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.0", - "symfony/phpunit-bridge": "^4.0.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" - } + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.6.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, + "funding": [ { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" }, { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", + "type": "tidelift" } ], - "description": "PHP Doctrine Common project is a library that provides additional functionality that other Doctrine projects depend on such as better reflection support, proxies and much more.", - "homepage": "https://www.doctrine-project.org/projects/common.html", - "keywords": [ - "common", - "doctrine", - "php" - ], - "time": "2021-10-19T06:47:22+00:00" + "time": "2026-01-15T10:01:58+00:00" }, { "name": "doctrine/dbal", - "version": "3.2.0", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4" + "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5d54f63541d7bed1156cb5c9b79274ced61890e4", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c", + "reference": "3d544473fb93f5c25b483ea4f4ce99f8c4d9d44c", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.11.99", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/deprecations": "^1.1.5", + "php": "^8.2", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.2.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "9.5.10", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.1", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.13.0" + "doctrine/coding-standard": "14.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.2", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "2.0.7", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "11.5.23", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", + "symfony/cache": "^6.3.8|^7.0|^8.0", + "symfony/console": "^5.4|^6.3|^7.0|^8.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -530,29 +362,52 @@ "sqlserver", "sqlsrv" ], - "time": "2021-11-26T21:00:12+00:00" + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/4.4.1" + }, + "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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2025-12-04T10:11:03+00:00" }, { "name": "doctrine/deprecations", - "version": "v0.5.3", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", - "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", + "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=14" }, "require-dev": { - "doctrine/coding-standard": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "psr/log": "^1.0" + "doctrine/coding-standard": "^9 || ^12 || ^14", + "phpstan/phpstan": "1.4.10 || 2.1.30", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -560,7 +415,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -569,59 +424,71 @@ ], "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", "homepage": "https://www.doctrine-project.org/", - "time": "2021-03-21T12:59:47+00:00" + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.6" + }, + "time": "2026-02-07T07:09:04+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.5.2", + "version": "2.18.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "5b77477ba2981a00b423d1bb17084b87eb57a4a5" + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5b77477ba2981a00b423d1bb17084b87eb57a4a5", - "reference": "5b77477ba2981a00b423d1bb17084b87eb57a4a5", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546", + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546", "shasum": "" }, "require": { - "doctrine/annotations": "^1", - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^2.13.1|^3.1", - "doctrine/persistence": "^2.2", + "doctrine/dbal": "^3.7.0 || ^4.0", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.1 || ^8.0", - "symfony/cache": "^4.3.3|^5.0|^6.0", - "symfony/config": "^4.4.3|^5.0|^6.0", - "symfony/console": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/dependency-injection": "^4.3.3|^5.0|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/doctrine-bridge": "^4.4.22|^5.2.7|^6.0", - "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/service-contracts": "^1.1.1|^2.0|^3" + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" }, "conflict": { - "doctrine/orm": "<2.9", - "twig/twig": "<1.34|>=2.0,<2.4" + "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", + "doctrine/orm": "<2.17 || >=4.0", + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "doctrine/orm": "^2.9", + "doctrine/annotations": "^1 || ^2", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0 || ^9.3 || ^10.0", - "psalm/plugin-phpunit": "^0.16.1", - "psalm/plugin-symfony": "^3", - "symfony/phpunit-bridge": "^5.2|^6.0", - "symfony/property-info": "^4.3.3|^5.0|^6.0", - "symfony/proxy-manager-bridge": "^3.4|^4.3.3|^5.0|^6.0", - "symfony/security-bundle": "^4.4|^5.0|^6.0", - "symfony/twig-bridge": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/validator": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/web-profiler-bundle": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/yaml": "^3.4.30|^4.3.3|^5.0|^6.0", - "twig/twig": "^1.34|^2.12|^3.0", - "vimeo/psalm": "^4.7" + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", + "psr/log": "^1.1.4 || ^2.0 || ^3.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -631,7 +498,7 @@ "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "" + "Doctrine\\Bundle\\DoctrineBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -649,62 +516,80 @@ }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org/" + "homepage": "https://www.doctrine-project.org/" } ], "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "database", "dbal", "orm", "persistence" ], - "time": "2021-12-01T10:13:31+00:00" + "support": { + "issues": "https://github.com/doctrine/DoctrineBundle/issues", + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.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%2Fdoctrine-bundle", + "type": "tidelift" + } + ], + "time": "2025-12-20T21:35:32+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.2.1", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "c1b10bc1466e08bba82640e49c7bbcce0c9853c2" + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/c1b10bc1466e08bba82640e49c7bbcce0c9853c2", - "reference": "c1b10bc1466e08bba82640e49c7bbcce0c9853c2", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "~1.0|~2.0", + "doctrine/doctrine-bundle": "^2.4 || ^3.0", "doctrine/migrations": "^3.2", - "php": "^7.2|^8.0", - "symfony/framework-bundle": "~3.4|~4.0|~5.0|~6.0" + "php": "^7.2 || ^8.0", + "symfony/deprecation-contracts": "^2.1 || ^3", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "doctrine/orm": "^2.6", - "doctrine/persistence": "^1.3||^2.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^8.0|^9.0", - "vimeo/psalm": "^4.11" + "composer/semver": "^3.0", + "doctrine/coding-standard": "^12 || ^14", + "doctrine/orm": "^2.6 || ^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 || ^8", + "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Doctrine\\Bundle\\MigrationsBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -717,11 +602,11 @@ }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" + "homepage": "https://www.doctrine-project.org" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DoctrineMigrationsBundle", @@ -731,41 +616,56 @@ "migrations", "schema" ], - "time": "2021-11-11T11:08:52+00:00" + "support": { + "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.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-migrations-bundle", + "type": "tidelift" + } + ], + "time": "2025-11-15T19:02:59+00:00" }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/dda33921b198841ca8dbad2eaa5d4d34769d18cf", + "reference": "dda33921b198841ca8dbad2eaa5d4d34769d18cf", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^14", + "phpdocumentor/guides-cli": "^1.4", + "phpstan/phpstan": "^2.1.32", + "phpunit/phpunit": "^10.5.58" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -807,37 +707,54 @@ "event system", "events" ], - "time": "2020-05-29T18:28:51+00:00" + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.1.1" + }, + "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%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2026-01-29T07:11:08+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -880,33 +797,52 @@ "uppercase", "words" ], - "time": "2021-10-22T20:16:43+00:00" + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.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%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -931,39 +867,54 @@ "constructor", "instantiate" ], - "time": "2020-11-10T18:47:58+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.2.1", + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -993,49 +944,70 @@ "parser", "php" ], - "time": "2020-05-25T17:44:05+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "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%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" }, { "name": "doctrine/migrations", - "version": "3.3.2", + "version": "3.9.6", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "b6e43bb5815f4dbb88c79a0fef1c669dfba52d58" + "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/b6e43bb5815f4dbb88c79a0fef1c669dfba52d58", - "reference": "b6e43bb5815f4dbb88c79a0fef1c669dfba52d58", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/ffd8355cdd8505fc650d9604f058bf62aedd80a1", + "reference": "ffd8355cdd8505fc650d9604f058bf62aedd80a1", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/dbal": "^2.11 || ^3.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "php": "^7.2 || ^8.0", + "composer-runtime-api": "^2", + "doctrine/dbal": "^3.6 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2.0", + "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^3.4 || ^4.4.16 || ^5.0 || ^6.0", - "symfony/stopwatch": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" + }, + "conflict": { + "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^8.0", - "doctrine/orm": "^2.6", - "doctrine/persistence": "^1.3 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.13 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", "doctrine/sql-formatter": "^1.0", - "ergebnis/composer-normalize": "^2.9", "ext-pdo_sqlite": "*", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpstan/phpstan-symfony": "^0.12", - "phpunit/phpunit": "^8.5 || ^9.4", - "symfony/cache": "^3.4.26 || ~4.1.12 || ^4.2.7 || ^5.0 || ^6.0", - "symfony/process": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "fig/log-test": "^1", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1045,15 +1017,9 @@ "bin/doctrine-migrations" ], "type": "library", - "extra": { - "composer-normalize": { - "indent-size": 4, - "indent-style": "space" - } - }, "autoload": { "psr-4": { - "Doctrine\\Migrations\\": "lib/Doctrine/Migrations" + "Doctrine\\Migrations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1081,67 +1047,74 @@ "dbal", "migrations" ], - "time": "2021-11-12T09:03:27+00:00" + "support": { + "issues": "https://github.com/doctrine/migrations/issues", + "source": "https://github.com/doctrine/migrations/tree/3.9.6" + }, + "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%2Fmigrations", + "type": "tidelift" + } + ], + "time": "2026-02-11T06:46:11+00:00" }, { "name": "doctrine/orm", - "version": "2.10.3", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "7b242753466508e1dd10f67c1baee95785f845c1" + "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/7b242753466508e1dd10f67c1baee95785f845c1", - "reference": "7b242753466508e1dd10f67c1baee95785f845c1", + "url": "https://api.github.com/repos/doctrine/orm/zipball/4262eb495b4d2a53b45de1ac58881e0091f2970f", + "reference": "4262eb495b4d2a53b45de1ac58881e0091f2970f", "shasum": "" }, "require": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/cache": "^1.12.1 || ^2.1.1", - "doctrine/collections": "^1.5", - "doctrine/common": "^3.0.3", - "doctrine/dbal": "^2.13.1 || ^3.1.1", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.1", + "composer-runtime-api": "^2", + "doctrine/collections": "^2.2", + "doctrine/dbal": "^3.8.2 || ^4", + "doctrine/deprecations": "^0.5.3 || ^1", + "doctrine/event-manager": "^1.2 || ^2", "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3", - "doctrine/lexer": "^1.0", - "doctrine/persistence": "^2.2", + "doctrine/instantiator": "^1.3 || ^2", + "doctrine/lexer": "^3", + "doctrine/persistence": "^3.3.1 || ^4", "ext-ctype": "*", - "ext-pdo": "*", - "php": "^7.1 ||^8.0", + "php": "^8.1", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/polyfill-php72": "^1.23", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "doctrine/annotations": "<1.13 || >= 2.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.3.9 || ^7.0 || ^8.0" }, "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/coding-standard": "^9.0", - "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "1.2.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", - "squizlabs/php_codesniffer": "3.6.1", - "symfony/cache": "^4.4 || ^5.2", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0", - "vimeo/psalm": "4.13.1" + "doctrine/coding-standard": "^14.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "2.1.23", + "phpstan/phpstan-deprecation-rules": "^2", + "phpunit/phpunit": "^10.5.0 || ^11.5", + "psr/log": "^1 || ^2 || ^3", + "symfony/cache": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "suggest": { - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0", - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + "ext-dom": "Provides support for XSD validation for XML mapping files", + "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" }, - "bin": [ - "bin/doctrine" - ], "type": "library", "autoload": { "psr-4": { - "Doctrine\\ORM\\": "lib/Doctrine/ORM" + "Doctrine\\ORM\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1176,48 +1149,44 @@ "database", "orm" ], - "time": "2021-12-03T12:27:05+00:00" + "support": { + "issues": "https://github.com/doctrine/orm/issues", + "source": "https://github.com/doctrine/orm/tree/3.6.2" + }, + "time": "2026-01-30T21:41:41+00:00" }, { "name": "doctrine/persistence", - "version": "2.2.3", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee" + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", - "reference": "5e7bdbbfe9811c06e1f745d1c166647d5c47d6ee", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", + "reference": "b9c49ad3558bb77ef973f4e173f2e9c2eca9be09", "shasum": "" }, "require": { - "doctrine/annotations": "^1.0", - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/collections": "^1.0", - "doctrine/deprecations": "^0.5.3", - "doctrine/event-manager": "^1.0", - "php": "^7.1 || ^8.0", - "psr/cache": "^1.0|^2.0|^3.0" - }, - "conflict": { - "doctrine/common": "<2.10@dev" + "doctrine/event-manager": "^1 || ^2", + "php": "^8.1", + "psr/cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^6.0 || ^9.0", - "doctrine/common": "^3.0", - "phpstan/phpstan": "0.12.84", - "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", - "symfony/cache": "^4.4|^5.0", - "vimeo/psalm": "4.7.0" + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.58 || ^12", + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common", - "Doctrine\\Persistence\\": "lib/Doctrine/Persistence" + "Doctrine\\Persistence\\": "src/Persistence" } }, "notification-url": "https://packagist.org/downloads/", @@ -1251,7 +1220,7 @@ } ], "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://doctrine-project.org/projects/persistence.html", + "homepage": "https://www.doctrine-project.org/projects/persistence.html", "keywords": [ "mapper", "object", @@ -1259,27 +1228,48 @@ "orm", "persistence" ], - "time": "2021-10-25T19:59:10+00:00" + "support": { + "issues": "https://github.com/doctrine/persistence/issues", + "source": "https://github.com/doctrine/persistence/tree/4.1.1" + }, + "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%2Fpersistence", + "type": "tidelift" + } + ], + "time": "2025-10-16T20:13:18+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.1.2", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894" + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/20c39c2de286a9d3262cc8ed282a4ae60e265894", - "reference": "20c39c2de286a9d3262cc8ed282a4ae60e265894", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/9563949f5cd3bd12a17d12fb980528bc141c5806", + "reference": "9563949f5cd3bd12a17d12fb980528bc141c5806", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4" + "doctrine/coding-standard": "^14", + "ergebnis/phpunit-slow-test-detector": "^2.20", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^10.5.58" }, "bin": [ "bin/sql-formatter" @@ -1298,7 +1288,7 @@ { "name": "Jeremy Dorn", "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" + "homepage": "https://jeremydorn.com/" } ], "description": "a PHP SQL highlighting library", @@ -1307,131 +1297,34 @@ "highlight", "sql" ], - "time": "2021-11-05T11:11:14+00:00" - }, - { - "name": "dpolac/dictionary", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dpolac/dictionary.git", - "reference": "7078d8bfe47cfcb11882140f5dbd7c106c1906e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dpolac/dictionary/zipball/7078d8bfe47cfcb11882140f5dbd7c106c1906e6", - "reference": "7078d8bfe47cfcb11882140f5dbd7c106c1906e6", - "shasum": "" - }, - "require": { - "ext-spl": "*", - "php": "^5.4 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DPolac\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Damian Polac", - "email": "damian.polac.111@gmail.com" - } - ], - "description": "Collection indexed with objects and scalars", - "keywords": [ - "SplObjectStorage", - "array", - "dictionary", - "hash" - ], - "time": "2016-06-05T18:29:47+00:00" - }, - { - "name": "dpolac/twig-lambda", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dpolac/twig-lambda.git", - "reference": "9138b853dd786e1646870c409cc26f379e2b0b8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dpolac/twig-lambda/zipball/9138b853dd786e1646870c409cc26f379e2b0b8a", - "reference": "9138b853dd786e1646870c409cc26f379e2b0b8a", - "shasum": "" - }, - "require": { - "dpolac/dictionary": "^1.0", - "php": "^5.6 || ^7.0", - "twig/twig": "^1.0 || ^2.0" - }, - "require-dev": { - "phpunit/phpunit": "~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DPolac\\TwigLambda\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.4" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Damian Polac", - "email": "damian.polac.111@gmail.com" - } - ], - "description": "Lambda expressions for Twig and filters that make use of them", - "keywords": [ - "filter", - "function", - "functional", - "group", - "lambda", - "map", - "sort", - "unique" - ], - "time": "2018-06-06T16:44:04+00:00" + "time": "2026-02-08T16:21:46+00:00" }, { "name": "egulias/email-validator", - "version": "3.1.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697", - "reference": "ee0db30118f661fb166bcffbf5d82032df484697", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { - "doctrine/lexer": "^1.2", - "php": ">=7.2", - "symfony/polyfill-intl-idn": "^1.15" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "vimeo/psalm": "^4" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -1439,7 +1332,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1465,7 +1358,17 @@ "validation", "validator" ], - "time": "2021-10-11T09:18:27+00:00" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" }, { "name": "eluceo/ical", @@ -1516,39 +1419,43 @@ "ics", "php calendar" ], + "support": { + "issues": "https://github.com/markuspoerschke/iCal/issues", + "source": "https://github.com/markuspoerschke/iCal" + }, "time": "2020-10-04T17:41:11+00:00" }, { "name": "endroid/installer", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/endroid/installer.git", - "reference": "7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4" + "reference": "39109e825057b2e7436123d5ad5dc8c2467a4cf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/installer/zipball/7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4", - "reference": "7af9f7fdbe6dcbf65b1d3439932ac45a98d229b4", + "url": "https://api.github.com/repos/endroid/installer/zipball/39109e825057b2e7436123d5ad5dc8c2467a4cf6", + "reference": "39109e825057b2e7436123d5ad5dc8c2467a4cf6", "shasum": "" }, "require": { - "composer-plugin-api": "^1.1||^2.0", - "php": "^7.4||^8.0" + "composer-plugin-api": "^2.0", + "php": "^8.2" }, "require-dev": { "composer/composer": "^2.0", - "endroid/quality": "dev-master" + "endroid/quality": "dev-main" }, "suggest": { "roave/security-advisories": "Avoids installation of package versions with vulnerabilities" }, "type": "composer-plugin", "extra": { + "class": "Endroid\\Installer\\Installer", "branch-alias": { - "dev-master": "1.x-dev" - }, - "class": "Endroid\\Installer\\Installer" + "dev-main": "1.x-dev" + } }, "autoload": { "psr-4": { @@ -1566,30 +1473,40 @@ } ], "description": "Composer plugin for installing configuration files", - "time": "2021-10-30T23:14:36+00:00" + "support": { + "issues": "https://github.com/endroid/installer/issues", + "source": "https://github.com/endroid/installer/tree/1.5.0" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2024-10-20T18:31:36+00:00" }, { "name": "endroid/qr-code", - "version": "4.4.1", + "version": "6.0.9", "source": { "type": "git", "url": "https://github.com/endroid/qr-code.git", - "reference": "963d88b6c6dca7145beaa53ad1d4c0cbe2c39c22" + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code/zipball/963d88b6c6dca7145beaa53ad1d4c0cbe2c39c22", - "reference": "963d88b6c6dca7145beaa53ad1d4c0cbe2c39c22", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/21e888e8597440b2205e2e5c484b6c8e556bcd1a", + "reference": "21e888e8597440b2205e2e5c484b6c8e556bcd1a", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "php": "^7.4||^8.0" + "bacon/bacon-qr-code": "^3.0", + "php": "^8.2" }, "require-dev": { - "endroid/quality": "dev-master", + "endroid/quality": "dev-main", "ext-gd": "*", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", + "khanamiryan/qrcode-detector-decoder": "^2.0.2", "setasign/fpdf": "^1.8.2" }, "suggest": { @@ -1601,7 +1518,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-main": "6.x-dev" } }, "autoload": { @@ -1628,32 +1545,42 @@ "qr", "qrcode" ], - "time": "2021-11-03T10:05:01+00:00" + "support": { + "issues": "https://github.com/endroid/qr-code/issues", + "source": "https://github.com/endroid/qr-code/tree/6.0.9" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2025-07-13T19:59:45+00:00" }, { "name": "endroid/qr-code-bundle", - "version": "4.0.5", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/endroid/qr-code-bundle.git", - "reference": "51ca7d7e921e967c67282c52d43c818287d0ea9f" + "reference": "b1e6972cf7ec154f646f0b0d9d12ca901bc0b9d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code-bundle/zipball/51ca7d7e921e967c67282c52d43c818287d0ea9f", - "reference": "51ca7d7e921e967c67282c52d43c818287d0ea9f", + "url": "https://api.github.com/repos/endroid/qr-code-bundle/zipball/b1e6972cf7ec154f646f0b0d9d12ca901bc0b9d1", + "reference": "b1e6972cf7ec154f646f0b0d9d12ca901bc0b9d1", "shasum": "" }, "require": { "endroid/installer": "^1.2.2", - "endroid/qr-code": "^4.0", - "php": "^7.3||^8.0", - "symfony/framework-bundle": "^3.4||^4.4||^5.0", - "symfony/twig-bundle": "^3.4||^4.4||^5.0", - "symfony/yaml": "^3.4||^4.4||^5.0" + "endroid/qr-code": "^6.0.1", + "php": "^8.2", + "symfony/framework-bundle": "^5.4||^6.4||^7.0", + "symfony/twig-bundle": "^5.4||^6.4||^7.0", + "symfony/yaml": "^5.4||^6.4||^7.0" }, "require-dev": { - "endroid/quality": "dev-master" + "endroid/quality": "dev-main" }, "suggest": { "roave/security-advisories": "Avoids installation of package versions with vulnerabilities" @@ -1661,7 +1588,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-main": "6.x-dev" } }, "autoload": { @@ -1689,28 +1616,38 @@ "qr", "symfony" ], - "time": "2021-08-28T06:35:28+00:00" + "support": { + "issues": "https://github.com/endroid/qr-code-bundle/issues", + "source": "https://github.com/endroid/qr-code-bundle/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/endroid", + "type": "github" + } + ], + "time": "2024-10-21T23:18:20+00:00" }, { "name": "erusev/parsedown", - "version": "1.7.4", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" + "reference": "96baaad00f71ba04d76e45b4620f54d3beabd6f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/96baaad00f71ba04d76e45b4620f54d3beabd6f7", + "reference": "96baaad00f71ba04d76e45b4620f54d3beabd6f7", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=5.3.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35" + "phpunit/phpunit": "^7.5|^8.5|^9.6" }, "type": "library", "autoload": { @@ -1735,36 +1672,53 @@ "markdown", "parser" ], - "time": "2019-12-30T22:54:17+00:00" + "support": { + "issues": "https://github.com/erusev/parsedown/issues", + "source": "https://github.com/erusev/parsedown/tree/1.8.0" + }, + "funding": [ + { + "url": "https://github.com/erusev", + "type": "github" + } + ], + "time": "2026-02-16T11:41:01+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" }, "type": "library", "autoload": { - "psr-0": { - "HTMLPurifier": "library/" - }, "files": [ "library/HTMLPurifier.composer.php" ], + "psr-0": { + "HTMLPurifier": "library/" + }, "exclude-from-classmap": [ "/library/HTMLPurifier/Language/" ] @@ -1785,7 +1739,11 @@ "keywords": [ "html" ], - "time": "2020-06-29T00:56:53+00:00" + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" + }, + "time": "2025-10-17T16:34:55+00:00" }, { "name": "firebase/php-jwt", @@ -1828,106 +1786,43 @@ ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", "homepage": "https://github.com/firebase/php-jwt", - "time": "2016-07-18T04:51:16+00:00" - }, - { - "name": "friendsofphp/proxy-manager-lts", - "version": "v1.0.5", - "source": { - "type": "git", - "url": "https://github.com/FriendsOfPHP/proxy-manager-lts.git", - "reference": "006aa5d32f887a4db4353b13b5b5095613e0611f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/proxy-manager-lts/zipball/006aa5d32f887a4db4353b13b5b5095613e0611f", - "reference": "006aa5d32f887a4db4353b13b5b5095613e0611f", - "shasum": "" - }, - "require": { - "laminas/laminas-code": "~3.4.1|^4.0", - "php": ">=7.1", - "symfony/filesystem": "^4.4.17|^5.0|^6.0" - }, - "conflict": { - "laminas/laminas-stdlib": "<3.2.1", - "zendframework/zend-stdlib": "<3.2.1" - }, - "replace": { - "ocramius/proxy-manager": "^2.1" - }, - "require-dev": { - "ext-phar": "*", - "symfony/phpunit-bridge": "^5.2|^6.0" + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v4.0.0" }, - "type": "library", - "extra": { - "thanks": { - "name": "ocramius/proxy-manager", - "url": "https://github.com/Ocramius/ProxyManager" - } - }, - "autoload": { - "psr-4": { - "ProxyManager\\": "src/ProxyManager" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - } - ], - "description": "Adding support for a wider range of PHP versions to ocramius/proxy-manager", - "homepage": "https://github.com/FriendsOfPHP/proxy-manager-lts", - "keywords": [ - "aop", - "lazy loading", - "proxy", - "proxy pattern", - "service proxies" - ], - "time": "2021-05-22T16:11:15+00:00" + "time": "2016-07-18T04:51:16+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.4.0", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", - "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2" + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1937,17 +1832,18 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.4-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2002,41 +1898,58 @@ "rest", "web service" ], - "time": "2021-10-18T09:52:00+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { "psr-4": { "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2068,26 +1981,44 @@ "keywords": [ "promise" ], - "time": "2021-10-22T20:56:57+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.1.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", - "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -2095,17 +2026,18 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.1-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { @@ -2165,31 +2097,49 @@ "uri", "url" ], - "time": "2021-10-06T17:43:30+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-08-23T21:21:41+00:00" }, { - "name": "jms/i18n-routing-bundle", - "version": "dev-master", + "name": "h2invent/i18n-routing-bundle", + "version": "3.2.5", "target-dir": "JMS/I18nRoutingBundle", "source": { "type": "git", - "url": "https://github.com/schmittjoh/JMSI18nRoutingBundle.git", - "reference": "f2ba5562bf6a2e6778f0bc9372d8a7be8d52a590" + "url": "https://github.com/H2-invent/JMSI18nRoutingBundle.git", + "reference": "145489e68670457db1de35b9b0f9bfab844483a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSI18nRoutingBundle/zipball/f2ba5562bf6a2e6778f0bc9372d8a7be8d52a590", - "reference": "f2ba5562bf6a2e6778f0bc9372d8a7be8d52a590", + "url": "https://api.github.com/repos/H2-invent/JMSI18nRoutingBundle/zipball/145489e68670457db1de35b9b0f9bfab844483a2", + "reference": "145489e68670457db1de35b9b0f9bfab844483a2", "shasum": "" }, "require": { - "php": ">=7.3", + "php": ">=8.1", "symfony/framework-bundle": ">=4.4" }, "require-dev": { "phpunit/phpunit": "^8.0|^9.0", "sensio/framework-extra-bundle": "*", - "symfony/symfony": "^4.4|^5.0" + "symfony/symfony": "^4.4|^5.0|^6.0" }, "suggest": { "jms/translation-bundle": "If you want to use the RouteTranslation extractor" @@ -2202,7 +2152,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ { @@ -2212,6 +2162,10 @@ { "name": "Albert Casademont", "email": "albertcasademont@gmail.com" + }, + { + "name": "Emanuel Holzmann", + "email": "entwicklung@h2-invnet.com" } ], "description": "This bundle allows you to create i18n routes.", @@ -2221,36 +2175,39 @@ "routing", "translation" ], - "time": "2021-02-20T10:25:25+00:00" + "support": { + "source": "https://github.com/H2-invent/JMSI18nRoutingBundle/tree/3.2.5" + }, + "time": "2024-05-23T16:22:41+00:00" }, { "name": "knpuniversity/oauth2-client-bundle", - "version": "v2.9.0", + "version": "v2.20.2", "source": { "type": "git", "url": "https://github.com/knpuniversity/oauth2-client-bundle.git", - "reference": "2c925911cca6ed16b0695000bf927d405815dc36" + "reference": "9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/2c925911cca6ed16b0695000bf927d405815dc36", - "reference": "2c925911cca6ed16b0695000bf927d405815dc36", + "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7", + "reference": "9ce4fcea69dbbf4d19ee7368b8d623ec2d73d3c7", "shasum": "" }, "require": { "league/oauth2-client": "^2.0", - "php": ">=7.2.5", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0" + "php": ">=8.1", + "symfony/dependency-injection": "^6.4|^7.3|^8.0", + "symfony/framework-bundle": "^6.4|^7.3|^8.0", + "symfony/http-foundation": "^6.4|^7.3|^8.0", + "symfony/routing": "^6.4|^7.3|^8.0", + "symfony/security-core": "^6.4|^7.3|^8.0", + "symfony/security-http": "^6.4|^7.3|^8.0" }, "require-dev": { "league/oauth2-facebook": "^1.1|^2.0", - "phpstan/phpstan": "^0.12", - "symfony/phpunit-bridge": "^5.3.1|^6.0", - "symfony/security-guard": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/phpunit-bridge": "^7.3", + "symfony/yaml": "^6.4|^7.3|^8.0" }, "suggest": { "symfony/security-guard": "For integration with Symfony's Guard Security layer" @@ -2277,250 +2234,38 @@ "oauth", "oauth2" ], - "time": "2021-11-22T01:40:58+00:00" + "support": { + "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues", + "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.20.2" + }, + "time": "2026-02-12T17:07:18+00:00" }, { - "name": "laminas/laminas-code", - "version": "3.4.1", + "name": "league/oauth2-client", + "version": "2.9.0", "source": { "type": "git", - "url": "https://github.com/laminas/laminas-code.git", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766" + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "26e8c5da4f3d78cede7021e09b1330a0fc093d5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/1cb8f203389ab1482bf89c0e70a04849bacd7766", - "reference": "1cb8f203389ab1482bf89c0e70a04849bacd7766", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/26e8c5da4f3d78cede7021e09b1330a0fc093d5e", + "reference": "26e8c5da4f3d78cede7021e09b1330a0fc093d5e", "shasum": "" }, "require": { - "laminas/laminas-eventmanager": "^2.6 || ^3.0", - "laminas/laminas-zendframework-bridge": "^1.0", - "php": "^7.1" - }, - "conflict": { - "phpspec/prophecy": "<1.9.0" - }, - "replace": { - "zendframework/zend-code": "self.version" + "ext-json": "*", + "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", + "php": "^7.1 || >=8.0.0 <8.6.0" }, "require-dev": { - "doctrine/annotations": "^1.7", - "ext-phar": "*", - "laminas/laminas-coding-standard": "^1.0", - "laminas/laminas-stdlib": "^2.7 || ^3.0", - "phpunit/phpunit": "^7.5.16 || ^8.4" - }, - "suggest": { - "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", - "laminas/laminas-stdlib": "Laminas\\Stdlib component" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev", - "dev-develop": "3.5.x-dev", - "dev-dev-4.0": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laminas\\Code\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Extensions to the PHP Reflection API, static code scanning, and code generation", - "homepage": "https://laminas.dev", - "keywords": [ - "code", - "laminas" - ], - "time": "2019-12-31T16:28:24+00:00" - }, - { - "name": "laminas/laminas-escaper", - "version": "2.9.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-escaper.git", - "reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/891ad70986729e20ed2e86355fcf93c9dc238a5f", - "reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f", - "shasum": "" - }, - "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-escaper": "*" - }, - "require-dev": { - "laminas/laminas-coding-standard": "~2.3.0", - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.12.2", - "vimeo/psalm": "^3.16" - }, - "suggest": { - "ext-iconv": "*", - "ext-mbstring": "*" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\Escaper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", - "homepage": "https://laminas.dev", - "keywords": [ - "escaper", - "laminas" - ], - "time": "2021-09-02T17:10:53+00:00" - }, - { - "name": "laminas/laminas-eventmanager", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-eventmanager.git", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", - "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", - "shasum": "" - }, - "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" - }, - "conflict": { - "zendframework/zend-eventmanager": "*" - }, - "require-dev": { - "container-interop/container-interop": "^1.1", - "laminas/laminas-coding-standard": "~2.2.1", - "laminas/laminas-stdlib": "^3.6", - "phpbench/phpbench": "^1.1", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5.5" - }, - "suggest": { - "container-interop/container-interop": "^1.1, to use the lazy listeners feature", - "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" - }, - "type": "library", - "autoload": { - "psr-4": { - "Laminas\\EventManager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Trigger and listen to events within a PHP application", - "homepage": "https://laminas.dev", - "keywords": [ - "event", - "eventmanager", - "events", - "laminas" - ], - "time": "2021-09-07T22:35:32+00:00" - }, - { - "name": "laminas/laminas-zendframework-bridge", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-zendframework-bridge.git", - "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", - "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", - "shasum": "" - }, - "require": { - "php": "^7.3 || ~8.0.0 || ~8.1.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "psalm/plugin-phpunit": "^0.15.1", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.6" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\ZendFrameworkBridge" - } - }, - "autoload": { - "files": [ - "src/autoload.php" - ], - "psr-4": { - "Laminas\\ZendFrameworkBridge\\": "src//" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Alias legacy ZF class names to Laminas Project equivalents.", - "keywords": [ - "ZendFramework", - "autoloading", - "laminas", - "zf" - ], - "time": "2021-09-03T17:53:30+00:00" - }, - { - "name": "league/oauth2-client", - "version": "2.6.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/oauth2-client.git", - "reference": "badb01e62383430706433191b82506b6df24ad98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/badb01e62383430706433191b82506b6df24ad98", - "reference": "badb01e62383430706433191b82506b6df24ad98", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0 || ^7.0", - "paragonie/random_compat": "^1 || ^2 || ^9.99", - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^5.7 || ^6.0 || ^9.3", - "squizlabs/php_codesniffer": "^2.3 || ^3.0" + "mockery/mockery": "^1.3.5", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "^3.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.0.x-dev" - } - }, "autoload": { "psr-4": { "League\\OAuth2\\Client\\": "src/" @@ -2554,28 +2299,34 @@ "oauth2", "single sign on" ], - "time": "2020-10-28T02:03:40+00:00" + "support": { + "issues": "https://github.com/thephpleague/oauth2-client/issues", + "source": "https://github.com/thephpleague/oauth2-client/tree/2.9.0" + }, + "time": "2025-11-25T22:17:17+00:00" }, { "name": "lorenzo/pinky", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/lorenzo/pinky.git", - "reference": "2bc1a9d5696d6496df5d5682962929165a823e57" + "reference": "e1b1bdb2c132b8a7ba32bca64d2443f646ddbd17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lorenzo/pinky/zipball/2bc1a9d5696d6496df5d5682962929165a823e57", - "reference": "2bc1a9d5696d6496df5d5682962929165a823e57", + "url": "https://api.github.com/repos/lorenzo/pinky/zipball/e1b1bdb2c132b8a7ba32bca64d2443f646ddbd17", + "reference": "e1b1bdb2c132b8a7ba32bca64d2443f646ddbd17", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-libxml": "*", "ext-xsl": "*", "php": ">=5.6.0" }, "require-dev": { - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.21 || ^9.5.10" }, "type": "library", "autoload": { @@ -2601,33 +2352,44 @@ "template", "zurb" ], - "time": "2019-09-16T21:23:31+00:00" + "support": { + "issues": "https://github.com/lorenzo/pinky/issues", + "source": "https://github.com/lorenzo/pinky/tree/1.1.0" + }, + "time": "2023-07-31T13:36:50+00:00" }, { "name": "maennchen/zipstream-php", - "version": "2.1.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", - "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", "shasum": "" }, "require": { - "myclabs/php-enum": "^1.5", - "php": ">= 7.1", - "psr/http-message": "^1.0", - "symfony/polyfill-mbstring": "^1.0" + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.2" }, "require-dev": { + "brianium/paratest": "^7.7", "ext-zip": "*", - "guzzlehttp/guzzle": ">= 6.3", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": ">= 7.5" + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^11.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" }, "type": "library", "autoload": { @@ -2662,30 +2424,40 @@ "stream", "zip" ], - "time": "2020-05-30T13:11:16+00:00" + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2025-01-27T12:07:53+00:00" }, { "name": "markbaker/complex", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/MarkBaker/PHPComplex.git", - "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22" + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/ab8bc271e404909db09ff2d5ffa1e538085c0f22", - "reference": "ab8bc271e404909db09ff2d5ffa1e538085c0f22", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "phpcompatibility/php-compatibility": "^9.0", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3", - "squizlabs/php_codesniffer": "^3.4" + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" }, "type": "library", "autoload": { @@ -2709,34 +2481,38 @@ "complex", "mathematics" ], - "time": "2021-06-29T15:32:53+00:00" + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" }, { "name": "markbaker/matrix", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/MarkBaker/PHPMatrix.git", - "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576" + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/c66aefcafb4f6c269510e9ac46b82619a904c576", - "reference": "c66aefcafb4f6c269510e9ac46b82619a904c576", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "phpcompatibility/php-compatibility": "^9.0", + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", "phpdocumentor/phpdocumentor": "2.*", "phploc/phploc": "^4.0", "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", "sebastian/phpcpd": "^4.0", - "squizlabs/php_codesniffer": "^3.4" + "squizlabs/php_codesniffer": "^3.7" }, "type": "library", "autoload": { @@ -2761,44 +2537,53 @@ "matrix", "vector" ], - "time": "2021-07-01T19:01:15+00:00" + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", - "graylog2/gelf-php": "^1.4.2", - "mongodb/mongodb": "^1.8", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -2813,14 +2598,13 @@ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2846,53 +2630,21 @@ "logging", "psr-3" ], - "time": "2021-10-01T21:08:31+00:00" - }, - { - "name": "myclabs/php-enum", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/myclabs/php-enum.git", - "reference": "b942d263c641ddb5190929ff840c68f78713e937" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/b942d263c641ddb5190929ff840c68f78713e937", - "reference": "b942d263c641ddb5190929ff840c68f78713e937", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "MyCLabs\\Enum\\": "src/" - } + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, { - "name": "PHP Enum contributors", - "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" } ], - "description": "PHP Enum implementation", - "homepage": "http://github.com/myclabs/php-enum", - "keywords": [ - "enum" - ], - "time": "2021-07-05T08:18:36+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -2941,32 +2693,43 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -2990,33 +2753,45 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2021-10-19T17:43:47+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" + }, + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -3040,23 +2815,28 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2021-10-02T14:08:47+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" + }, + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "1.20.0", + "version": "1.30.2", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "44436f270bb134b4a94670f3d020a85dfa0a3c02" + "reference": "09cdde5e2f078b9a3358dd217e2c8cb4dac84be2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/44436f270bb134b4a94670f3d020a85dfa0a3c02", - "reference": "44436f270bb134b4a94670f3d020a85dfa0a3c02", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/09cdde5e2f078b9a3358dd217e2c8cb4dac84be2", + "reference": "09cdde5e2f078b9a3358dd217e2c8cb4dac84be2", "shasum": "" }, "require": { + "composer/pcre": "^1||^2||^3", "ext-ctype": "*", "ext-dom": "*", "ext-fileinfo": "*", @@ -3070,33 +2850,33 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", - "ezyang/htmlpurifier": "^4.13", - "maennchen/zipstream-php": "^2.1", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", "markbaker/complex": "^3.0", "markbaker/matrix": "^3.0", - "php": "^7.3 || ^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0" + "php": ">=7.4.0 <8.5.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "dompdf/dompdf": "^1.0", + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "doctrine/instantiator": "^1.5", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", "friendsofphp/php-cs-fixer": "^3.2", - "jpgraph/jpgraph": "^4.0", - "mpdf/mpdf": "^8.0", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", "phpcompatibility/php-compatibility": "^9.3", "phpstan/phpstan": "^1.1", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^8.5 || ^9.0", - "squizlabs/php_codesniffer": "^3.6", - "tecnickcom/tcpdf": "^6.4" + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" }, "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)", - "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)" + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" }, "type": "library", "autoload": { @@ -3126,6 +2906,9 @@ }, { "name": "Adrien Crivelli" + }, + { + "name": "Owen Leibman" } ], "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", @@ -3140,39 +2923,41 @@ "xls", "xlsx" ], - "time": "2021-11-23T15:23:42+00:00" + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.30.2" + }, + "time": "2026-01-11T05:58:24+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.2.0", + "version": "1.33.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e" + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/dbc093d7af60eff5cd575d2ed761b15ed40bd08e", - "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ @@ -3185,24 +2970,28 @@ "MIT" ], "description": "PHPDoc parser with support for nullable, intersection and generic types", - "time": "2021-09-16T20:46:02+00:00" + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + }, + "time": "2024-10-13T11:25:22+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -3222,7 +3011,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -3231,26 +3020,82 @@ "psr", "psr-6" ], - "time": "2016-08-06T20:24:11+00:00" + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -3275,7 +3120,11 @@ "container-interop", "psr" ], - "time": "2021-11-05T16:50:12+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -3321,25 +3170,29 @@ "psr", "psr-14" ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, "time": "2019-01-08T18:20:26+00:00" }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -3359,7 +3212,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -3370,25 +3223,28 @@ "psr", "psr-18" ], - "time": "2020-06-29T06:28:15+00:00" + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -3408,10 +3264,10 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -3422,29 +3278,32 @@ "request", "response" ], - "time": "2019-04-30T12:38:16+00:00" + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3459,7 +3318,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -3472,29 +3331,35 @@ "request", "response" ], - "time": "2016-08-06T14:39:51+00:00" + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/link", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/link.git", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" + "reference": "84b159194ecfd7eaa472280213976e96415433f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", - "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", + "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7", + "reference": "84b159194ecfd7eaa472280213976e96415433f7", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" + }, + "suggest": { + "fig/link-util": "Provides some useful PSR-13 utilities" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3513,6 +3378,7 @@ } ], "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", "keywords": [ "http", "http-link", @@ -3521,34 +3387,37 @@ "psr-13", "rest" ], - "time": "2016-10-28T16:06:13+00:00" + "support": { + "source": "https://github.com/php-fig/link/tree/2.0.1" + }, + "time": "2021-03-11T23:00:27+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3568,29 +3437,32 @@ "psr", "psr-3" ], - "time": "2021-05-03T11:20:27+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -3605,7 +3477,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -3616,7 +3488,10 @@ "psr-16", "simple-cache" ], - "time": "2017-10-23T01:57:42+00:00" + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -3656,83 +3531,11 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "sensio/framework-extra-bundle", - "version": "v5.6.1", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "430d14c01836b77c28092883d195a43ce413ee32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/430d14c01836b77c28092883d195a43ce413ee32", - "reference": "430d14c01836b77c28092883d195a43ce413ee32", - "shasum": "" - }, - "require": { - "doctrine/annotations": "^1.0", - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" - }, - "conflict": { - "doctrine/doctrine-cache-bundle": "<1.3.1", - "doctrine/persistence": "<1.3" - }, - "require-dev": { - "doctrine/dbal": "^2.10|^3.0", - "doctrine/doctrine-bundle": "^1.11|^2.0", - "doctrine/orm": "^2.5", - "nyholm/psr7": "^1.1", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/doctrine-bridge": "^4.4|^5.0", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/monolog-bridge": "^4.0|^5.0", - "symfony/monolog-bundle": "^3.2", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9", - "symfony/psr-http-message-bridge": "^1.1", - "symfony/security-bundle": "^4.4|^5.0", - "symfony/twig-bundle": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0", - "twig/twig": "^1.34|^2.4|^3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "5.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Sensio\\Bundle\\FrameworkExtraBundle\\": "src/" - }, - "exclude-from-classmap": [ - "/tests/" - ] + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "This bundle provides a way to configure your controllers with annotations", - "keywords": [ - "annotations", - "controllers" - ], - "time": "2020-08-25T19:10:18+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "stevenmaguire/oauth2-keycloak", @@ -3788,69 +3591,11 @@ "oauth", "oauth2" ], - "time": "2021-06-21T10:16:52+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] + "support": { + "issues": "https://github.com/stevenmaguire/oauth2-keycloak/issues", + "source": "https://github.com/stevenmaguire/oauth2-keycloak/tree/2.2.2" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2021-06-21T10:16:52+00:00" }, { "name": "symfony/apache-pack", @@ -3872,37 +3617,36 @@ "MIT" ], "description": "A pack for Apache support in Symfony", + "support": { + "issues": "https://github.com/symfony/apache-pack/issues", + "source": "https://github.com/symfony/apache-pack/tree/master" + }, "time": "2017-12-12T01:46:35+00:00" }, { "name": "symfony/asset", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d" + "reference": "a6f49cf087a1fcfe7130b9b604a8a2b878b06c40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d", - "reference": "49e355b57b4b6a5cef1d2dbc4e36cee49369cf7d", + "url": "https://api.github.com/repos/symfony/asset/zipball/a6f49cf087a1fcfe7130b9b604a8a2b878b06c40", + "reference": "a6f49cf087a1fcfe7130b9b604a8a2b878b06c40", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2" }, "conflict": { - "symfony/http-foundation": "<5.3" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/http-foundation": "" + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -3929,62 +3673,86 @@ ], "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/asset/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/cache", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "d97d6d7f46cb69968f094e329abd987d5ee17c79" + "reference": "8dde98d5a4123b53877aca493f9be57b333f14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/d97d6d7f46cb69968f094e329abd987d5ee17c79", - "reference": "d97d6d7f46cb69968f094e329abd987d5ee17c79", + "url": "https://api.github.com/repos/symfony/cache/zipball/8dde98d5a4123b53877aca493f9be57b333f14bd", + "reference": "8dde98d5a4123b53877aca493f9be57b333f14bd", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0", + "php": ">=8.2", + "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^1.1.7|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/cache-contracts": "^3.6", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/var-dumper": "<4.4" + "doctrine/dbal": "<3.6", + "ext-redis": "<6.1", + "ext-relay": "<0.12.1", + "symfony/dependency-injection": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/var-dumper": "<6.4" }, "provide": { - "psr/cache-implementation": "1.0|2.0", - "psr/simple-cache-implementation": "1.0|2.0", - "symfony/cache-implementation": "1.0|2.0" + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" }, "require-dev": { "cache/integration-tests": "dev-master", - "doctrine/cache": "^1.6|^2.0", - "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1", - "psr/simple-cache": "^1.0|^2.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "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|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Cache\\": "" }, + "classmap": [ + "Traits/ValueWrapper.php" + ], "exclude-from-classmap": [ "/Tests/" ] @@ -4003,43 +3771,61 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", "homepage": "https://symfony.com", "keywords": [ "caching", "psr6" ], - "time": "2021-11-23T18:51:45+00:00" + "support": { + "source": "https://github.com/symfony/cache/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/cache-contracts", - "version": "v2.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", - "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/cache": "^1.0|^2.0|^3.0" - }, - "suggest": { - "symfony/cache-implementation": "" + "php": ">=8.1", + "psr/cache": "^3.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4071,42 +3857,133 @@ "interoperability", "standards" ], - "time": "2021-08-17T14:20:01+00:00" + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.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": "2025-03-13T15:25:07+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/config", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b" + "reference": "4275b53b8ab0cf37f48bf273dc2285c8178efdfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/e39cf688c80fd79ab0a6a2d05a9facac9b2d534b", - "reference": "e39cf688c80fd79ab0a6a2d05a9facac9b2d534b", + "url": "https://api.github.com/repos/symfony/config/zipball/4275b53b8ab0cf37f48bf273dc2285c8178efdfb", + "reference": "4275b53b8ab0cf37f48bf273dc2285c8178efdfb", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1|^8.0", + "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<4.4" + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4133,56 +4010,72 @@ ], "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/config/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/console", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4211,29 +4104,49 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc" + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -4264,52 +4177,64 @@ ], "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", - "time": "2021-09-09T08:06:01+00:00" + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/dependency-injection", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "69c398723857bb19fdea78496cedea0f756decab" + "reference": "76a02cddca45a5254479ad68f9fa274ead0a7ef2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/69c398723857bb19fdea78496cedea0f756decab", - "reference": "69c398723857bb19fdea78496cedea0f756decab", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/76a02cddca45a5254479ad68f9fa274ead0a7ef2", + "reference": "76a02cddca45a5254479ad68f9fa274ead0a7ef2", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2" + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.6", + "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4336,33 +4261,54 @@ ], "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4386,79 +4332,89 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "time": "2021-07-12T14:48:14+00:00" + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.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-25T14:21:43+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "61efc93370e3c59364b354b7e160c092157d839c" + "reference": "3408d9fb7bda6c8db9f3e4099863c9017bcbc62d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/61efc93370e3c59364b354b7e160c092157d839c", - "reference": "61efc93370e3c59364b354b7e160c092157d839c", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/3408d9fb7bda6c8db9f3e4099863c9017bcbc62d", + "reference": "3408d9fb7bda6c8db9f3e4099863c9017bcbc62d", "shasum": "" }, "require": { - "doctrine/event-manager": "~1.0", - "doctrine/persistence": "^2", - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "doctrine/event-manager": "^2", + "doctrine/persistence": "^3.1|^4", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "doctrine/dbal": "<2.13.1", - "doctrine/orm": "<2.7.3", - "phpunit/phpunit": "<5.4.3", - "symfony/cache": "<5.4", - "symfony/dependency-injection": "<4.4", - "symfony/form": "<5.1", - "symfony/http-kernel": "<5", - "symfony/messenger": "<4.4", - "symfony/property-info": "<5", - "symfony/security-bundle": "<5", - "symfony/security-core": "<5.3", - "symfony/validator": "<5.2" - }, - "require-dev": { - "composer/package-versions-deprecated": "^1.8", - "doctrine/annotations": "^1.10.4", - "doctrine/collections": "~1.0", - "doctrine/data-fixtures": "^1.1", - "doctrine/dbal": "^2.13.1|^3.0", - "doctrine/orm": "^2.7.3", + "doctrine/collections": "<1.8", + "doctrine/dbal": "<3.6", + "doctrine/lexer": "<1.1", + "doctrine/orm": "<2.15", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/form": "<6.4.6|>=7,<7.0.6", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/lock": "<6.4", + "symfony/messenger": "<6.4", + "symfony/property-info": "<6.4", + "symfony/security-bundle": "<6.4", + "symfony/security-core": "<6.4", + "symfony/validator": "<7.4" + }, + "require-dev": { + "doctrine/collections": "^1.8|^2.0", + "doctrine/data-fixtures": "^1.1|^2", + "doctrine/dbal": "^3.6|^4", + "doctrine/orm": "^2.15|^3", "psr/log": "^1|^2|^3", - "symfony/cache": "^5.4|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/doctrine-messenger": "^5.1|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^5.1.3|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/property-info": "^5.0|^6.0", - "symfony/proxy-manager-bridge": "^4.4|^5.0|^6.0", - "symfony/security-core": "^5.3|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^5.2|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "doctrine/data-fixtures": "", - "doctrine/dbal": "", - "doctrine/orm": "", - "symfony/form": "", - "symfony/property-info": "", - "symfony/validator": "" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/doctrine-messenger": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.2|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -4485,29 +4441,53 @@ ], "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/doctrine-bridge/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-20T16:42:42+00:00" }, { "name": "symfony/dotenv", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "9bd173ff68fa90d39c59d91a42ae42b7f11713a0" + "reference": "1658a4d34df028f3d93bcdd8e81f04423925a364" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/9bd173ff68fa90d39c59d91a42ae42b7f11713a0", - "reference": "9bd173ff68fa90d39c59d91a42ae42b7f11713a0", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1658a4d34df028f3d93bcdd8e81f04423925a364", + "reference": "1658a4d34df028f3d93bcdd8e81f04423925a364", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.2" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/process": "<6.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4539,31 +4519,59 @@ "env", "environment" ], - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/dotenv/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-16T10:14:42+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8433fa3145ac78df88b87a4a539118e950828126" + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8433fa3145ac78df88b87a4a539118e950828126", - "reference": "8433fa3145ac78df88b87a4a539118e950828126", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -4593,48 +4601,65 @@ ], "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-20T16:42:42+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb" + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/27d39ae126352b9fa3be5e196ccf4617897be3eb", - "reference": "27d39ae126352b9fa3be5e196ccf4617897be3eb", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4661,37 +4686,55 @@ ], "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T11:45:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4723,26 +4766,44 @@ "interoperability", "standards" ], - "time": "2021-07-12T14:48:14+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.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-25T14:21:43+00:00" }, { "name": "symfony/expression-language", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2" + "reference": "f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2", - "reference": "aff6ee3cf4ac1f37f5c7dad3f89f439dbe0893f2", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667", + "reference": "f3a6497eb6573e185f2ec41cd3b3f0cd68ddf667", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" + "php": ">=8.2", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -4769,27 +4830,50 @@ ], "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/expression-language/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/filesystem", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4816,26 +4900,48 @@ ], "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "time": "2021-10-28T13:39:27+00:00" + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/finder", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", + "reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4862,32 +4968,57 @@ ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/flex", - "version": "v1.17.6", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "7a79135e1dc66b30042b4d968ecba0908f9374bc" + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/7a79135e1dc66b30042b4d968ecba0908f9374bc", - "reference": "7a79135e1dc66b30042b4d968ecba0908f9374bc", + "url": "https://api.github.com/repos/symfony/flex/zipball/9cd384775973eabbf6e8b05784dda279fc67c28d", + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": ">=7.1" + "composer-plugin-api": "^2.1", + "php": ">=8.1" + }, + "conflict": { + "composer/semver": "<1.7.2", + "symfony/dotenv": "<5.4" }, "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "symfony/dotenv": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/phpunit-bridge": "^4.4.12|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" + "composer/composer": "^2.1", + "symfony/dotenv": "^6.4|^7.4|^8.0", + "symfony/filesystem": "^6.4|^7.4|^8.0", + "symfony/phpunit-bridge": "^6.4|^7.4|^8.0", + "symfony/process": "^6.4|^7.4|^8.0" }, "type": "composer-plugin", "extra": { @@ -4909,66 +5040,84 @@ } ], "description": "Composer plugin for Symfony", - "time": "2021-11-29T15:39:37+00:00" + "support": { + "issues": "https://github.com/symfony/flex/issues", + "source": "https://github.com/symfony/flex/tree/v2.10.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-16T09:38:19+00:00" }, { "name": "symfony/form", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0148f46628efa4c12803768efbdfcd6e0b9ceec3" + "reference": "264fc873f01376216f0b884ecc81b34b830e25a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0148f46628efa4c12803768efbdfcd6e0b9ceec3", - "reference": "0148f46628efa4c12803768efbdfcd6e0b9ceec3", + "url": "https://api.github.com/repos/symfony/form/zipball/264fc873f01376216f0b884ecc81b34b830e25a8", + "reference": "264fc873f01376216f0b884ecc81b34b830e25a8", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/options-resolver": "^5.1|^6.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/options-resolver": "^7.3|^8.0", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-icu": "^1.21", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.23", - "symfony/property-access": "^5.0.8|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<4.4", - "symfony/doctrine-bridge": "<4.4", - "symfony/error-handler": "<4.4.5", - "symfony/framework-bundle": "<4.4", - "symfony/http-kernel": "<4.4", - "symfony/translation": "<4.4", - "symfony/translation-contracts": "<1.1.7", - "symfony/twig-bridge": "<4.4" - }, - "require-dev": { - "doctrine/collections": "~1.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^4.4.17|^5.1.9|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/security-csrf": "For protecting forms against CSRF attacks.", - "symfony/twig-bridge": "For templating with Twig.", - "symfony/validator": "For form validation." + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/error-handler": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<7.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "doctrine/collections": "^1.0|^2.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4.12|^7.1.5|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -4995,116 +5144,138 @@ ], "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/form/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-23T10:51:15+00:00" }, { "name": "symfony/framework-bundle", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "4e3b7215071f02e930b00f69741dfd4dab3c31e7" + "reference": "dcf89ca6712d9e1b5d3f14dea0e1c2685a05d1cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/4e3b7215071f02e930b00f69741dfd4dab3c31e7", - "reference": "4e3b7215071f02e930b00f69741dfd4dab3c31e7", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/dcf89ca6712d9e1b5d3f14dea0e1c2685a05d1cd", + "reference": "dcf89ca6712d9e1b5d3f14dea0e1c2685a05d1cd", "shasum": "" }, "require": { + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=7.2.5", - "symfony/cache": "^5.2|^6.0", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4.1|^5.0.1|^6.0", - "symfony/event-dispatcher": "^5.1|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.4|^6.0", + "php": ">=8.2", + "symfony/cache": "^6.4.12|^7.0|^8.0", + "symfony/config": "^7.4.4|^8.0.4", + "symfony/dependency-injection": "^7.4.4|^8.0.4", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^7.3|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^7.1|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/routing": "^5.3|^6.0" + "symfony/polyfill-php85": "^1.32", + "symfony/routing": "^7.4|^8.0" }, "conflict": { - "doctrine/annotations": "<1.13.1", - "doctrine/cache": "<1.11", "doctrine/persistence": "<1.3", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "phpunit/phpunit": "<5.4.3", - "symfony/asset": "<5.3", - "symfony/console": "<5.2.5", - "symfony/dom-crawler": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/form": "<5.2", - "symfony/http-client": "<4.4", - "symfony/lock": "<4.4", - "symfony/mailer": "<5.2", - "symfony/messenger": "<5.4", - "symfony/mime": "<4.4", - "symfony/property-access": "<5.3", - "symfony/property-info": "<4.4", - "symfony/security-csrf": "<5.3", - "symfony/serializer": "<5.2", - "symfony/service-contracts": ">=3.0", - "symfony/stopwatch": "<4.4", - "symfony/translation": "<5.3", - "symfony/twig-bridge": "<4.4", - "symfony/twig-bundle": "<4.4", - "symfony/validator": "<5.2", - "symfony/web-profiler-bundle": "<4.4", - "symfony/workflow": "<5.2" - }, - "require-dev": { - "doctrine/annotations": "^1.13.1", - "doctrine/cache": "^1.11|^2.0", - "doctrine/persistence": "^1.3|^2.0", - "paragonie/sodium_compat": "^1.8", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^5.3|^6.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4.30|^5.3.7|^6.0", - "symfony/dotenv": "^5.1|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^5.2|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/mailer": "^5.2|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/notifier": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.3|^6.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/asset": "<6.4", + "symfony/asset-mapper": "<6.4", + "symfony/clock": "<6.4", + "symfony/console": "<6.4", + "symfony/dom-crawler": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/form": "<7.4", + "symfony/http-client": "<6.4", + "symfony/lock": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<7.4", + "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": "<7.2", + "symfony/serializer": "<7.2.5", + "symfony/stopwatch": "<6.4", + "symfony/translation": "<7.3", + "symfony/twig-bridge": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4", + "symfony/web-profiler-bundle": "<6.4", + "symfony/webhook": "<7.2", + "symfony/workflow": "<7.4" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "dragonmantank/cron-expression": "^3.1", + "phpdocumentor/reflection-docblock": "^5.2", + "seld/jsonlint": "^1.10", + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^7.4|^8.0", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/json-streamer": "^7.3|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/notifier": "^6.4|^7.0|^8.0", + "symfony/object-mapper": "^7.3|^8.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/property-info": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", - "symfony/security-bundle": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/string": "^5.0|^6.0", - "symfony/translation": "^5.3|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/validator": "^5.2|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/workflow": "^5.2|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/twig": "^2.10|^3.0" - }, - "suggest": { - "ext-apcu": "For best performance of the system caches", - "symfony/console": "For using the console commands", - "symfony/form": "For using forms", - "symfony/property-info": "For using the property_info service", - "symfony/serializer": "For using the serializer service", - "symfony/validator": "For using validation", - "symfony/web-link": "For using web links, features such as preloading, prefetching or prerendering", - "symfony/yaml": "For using the debug:config and lint:yaml commands" + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/scheduler": "^6.4.4|^7.0.4|^8.0", + "symfony/security-bundle": "^6.4|^7.0|^8.0", + "symfony/semaphore": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.2.5|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^7.3|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/webhook": "^7.2|^8.0", + "symfony/workflow": "^7.4|^8.0", + "symfony/yaml": "^7.3|^8.0", + "twig/twig": "^3.12" }, "type": "symfony-bundle", "autoload": { @@ -5131,50 +5302,78 @@ ], "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", - "time": "2021-11-29T16:01:17+00:00" + "support": { + "source": "https://github.com/symfony/framework-bundle/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/http-client", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "b3d99775f5372ff746035e98d6fa00182e832380" + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/b3d99775f5372ff746035e98d6fa00182e832380", - "reference": "b3d99775f5372ff746035e98d6fa00182e832380", + "url": "https://api.github.com/repos/symfony/http-client/zipball/84bb634857a893cc146cceb467e31b3f02c5fe9f", + "reference": "84bb634857a893cc146cceb467e31b3f02c5fe9f", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-client-contracts": "^2.4", - "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.0|^2|^3" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "amphp/amp": "<2.5", + "amphp/socket": "<1.1", + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" }, "provide": { "php-http/async-client-implementation": "*", "php-http/client-implementation": "*", "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "2.4" + "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "amphp/socket": "^1.1", - "guzzlehttp/promises": "^1.4", + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", + "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5201,42 +5400,66 @@ ], "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", - "time": "2021-11-23T15:26:31+00:00" + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.5.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166" + "reference": "75d7043853a42837e68111812f4d964b01e5101c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ec82e57b5b714dbb69300d348bd840b345e24166", - "reference": "ec82e57b5b714dbb69300d348bd840b345e24166", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5262,36 +5485,58 @@ "interoperability", "standards" ], - "time": "2021-11-03T09:24:47+00:00" + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.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": "2025-04-29T11:18:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309" + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", - "reference": "5ef86ac7927d2de08dc1e26eb91325f9ccbe6309", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6", + "reference": "446d0db2b1f21575f1284b74533e425096abdfb6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5318,75 +5563,99 @@ ], "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea" + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e012f16688bcb151e965473a70d8ebaa8b1d15ea", - "reference": "e012f16688bcb151e965473a70d8ebaa8b1d15ea", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a", + "reference": "229eda477017f92bd2ce7615d06222ec0c19e82a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -5413,43 +5682,62 @@ ], "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", - "time": "2021-11-29T16:56:53+00:00" + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-28T10:33:42+00:00" }, { "name": "symfony/intl", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "01b11a038293916ad52aab9ac7bd6b4e711d1f3e" + "reference": "7fa2d46174166bcd7829abc8717949f8a0b21fb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/01b11a038293916ad52aab9ac7bd6b4e711d1f3e", - "reference": "01b11a038293916ad52aab9ac7bd6b4e711d1f3e", + "url": "https://api.github.com/repos/symfony/intl/zipball/7fa2d46174166bcd7829abc8717949f8a0b21fb7", + "reference": "7fa2d46174166bcd7829abc8717949f8a0b21fb7", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/string": "<7.1" }, "require-dev": { - "symfony/filesystem": "^4.4|^5.0|^6.0" + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Intl\\": "" }, - "classmap": [ - "Resources/stubs" - ], - "files": [ - "Resources/functions.php" - ], "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/Resources/data/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5474,7 +5762,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library", + "description": "Provides access to the localization data of the ICU library", "homepage": "https://symfony.com", "keywords": [ "i18n", @@ -5484,39 +5772,64 @@ "l10n", "localization" ], - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/intl/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/mailer", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "2823212575ed3a6adfc5bc34ebb47b5395285048" + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/2823212575ed3a6adfc5bc34ebb47b5395285048", - "reference": "2823212575ed3a6adfc5bc34ebb47b5395285048", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", "shasum": "" }, "require": { - "egulias/email-validator": "^2.1.10|^3", - "php": ">=7.2.5", + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/mime": "^5.2.6|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3" + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-kernel": "<4.4" + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^4.4|^5.0|^6.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5543,42 +5856,65 @@ ], "description": "Helps sending emails", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/mime", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d4365000217b67c01acff407573906ff91bcfb34" + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34", - "reference": "d4365000217b67c01acff407573906ff91bcfb34", + "url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148", + "reference": "b18c7e6e9eee1e19958138df10412f3c4c316148", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" }, "type": "library", "autoload": { @@ -5609,47 +5945,63 @@ "mime", "mime-type" ], - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/mime/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "6ce6f39536a718ec2ece37eae81c6899030fc571" + "reference": "9c34e8170b09f062a9a38880a3cb58ee35cb7fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/6ce6f39536a718ec2ece37eae81c6899030fc571", - "reference": "6ce6f39536a718ec2ece37eae81c6899030fc571", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9c34e8170b09f062a9a38880a3cb58ee35cb7fd4", + "reference": "9c34e8170b09f062a9a38880a3cb58ee35cb7fd4", "shasum": "" }, "require": { - "monolog/monolog": "^1.25.1|^2", - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3" + "monolog/monolog": "^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/console": "<4.4", - "symfony/http-foundation": "<5.3" + "symfony/console": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/security-core": "<6.4" }, "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/mailer": "^4.4|^5.0|^6.0", - "symfony/messenger": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/console": "For the possibility to show log messages in console commands depending on verbosity settings.", - "symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.", - "symfony/var-dumper": "For using the debugging handlers like the console handler or the log server handler." + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mailer": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -5676,48 +6028,63 @@ ], "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" - }, - { - "name": "symfony/monolog-bundle", - "version": "v3.7.1", - "source": { + "support": { + "source": "https://github.com/symfony/monolog-bridge/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-07T11:35:36+00:00" + }, + { + "name": "symfony/monolog-bundle", + "version": "v4.0.1", + "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "fde12fc628162787a4e53877abadc30047fd868b" + "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/fde12fc628162787a4e53877abadc30047fd868b", - "reference": "fde12fc628162787a4e53877abadc30047fd868b", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/3b4ee2717ee56c5e1edb516140a175eb2a72bc66", + "reference": "3b4ee2717ee56c5e1edb516140a175eb2a72bc66", "shasum": "" }, "require": { - "monolog/monolog": "~1.22 || ~2.0", - "php": ">=7.1.3", - "symfony/config": "~4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "~4.4 || ^5.0 || ^6.0", - "symfony/monolog-bridge": "~4.4 || ^5.0 || ^6.0" + "composer-runtime-api": "^2.0", + "monolog/monolog": "^3.5", + "php": ">=8.2", + "symfony/config": "^7.3 || ^8.0", + "symfony/dependency-injection": "^7.3 || ^8.0", + "symfony/http-kernel": "^7.3 || ^8.0", + "symfony/monolog-bridge": "^7.3 || ^8.0", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "~4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.2 || ^6.0", - "symfony/yaml": "~4.4 || ^5.0 || ^6.0" + "phpunit/phpunit": "^11.5.41 || ^12.3", + "symfony/console": "^7.3 || ^8.0", + "symfony/yaml": "^7.3 || ^8.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Bundle\\MonologBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5739,27 +6106,47 @@ "log", "logging" ], - "time": "2021-11-05T10:34:29+00:00" + "support": { + "issues": "https://github.com/symfony/monolog-bundle/issues", + "source": "https://github.com/symfony/monolog-bundle/tree/v4.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-08T08:00:13+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847" + "reference": "b38026df55197f9e39a44f3215788edf83187b80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b0fb78576487af19c500aaddb269fd36701d4847", - "reference": "b0fb78576487af19c500aaddb269fd36701d4847", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -5791,32 +6178,52 @@ "configuration", "options" ], - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/password-hasher", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "60c4aba11e2ce4140a5a9cbc13733da4b8333e2d" + "reference": "ab8e0ef42483f31c417c82ecfcf7be7b91d784fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/60c4aba11e2ce4140a5a9cbc13733da4b8333e2d", - "reference": "60c4aba11e2ce4140a5a9cbc13733da4b8333e2d", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/ab8e0ef42483f31c417c82ecfcf7be7b91d784fe", + "reference": "ab8e0ef42483f31c417c82ecfcf7be7b91d784fe", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.2" }, "conflict": { - "symfony/security-core": "<5.3" + "symfony/security-core": "<6.4" }, "require-dev": { - "symfony/console": "^5", - "symfony/security-core": "^5.3|^6.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -5847,45 +6254,63 @@ "hashing", "password" ], - "time": "2021-10-30T15:55:55+00:00" + "support": { + "source": "https://github.com/symfony/password-hasher/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5911,36 +6336,54 @@ "portable", "shim" ], - "time": "2021-05-27T12:26:48+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.23.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda" + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4a80a521d6176870b6445cfb469c130f9cae1dda", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", + "reference": "bfc8fa13dbaf21d69114b0efcd72ab700fb04d0c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance and support of other locales than \"en\"" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -5981,47 +6424,64 @@ "portable", "shim" ], - "time": "2021-05-24T10:04:56+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-20T22:24:30+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6051,45 +6511,63 @@ "portable", "shim" ], - "time": "2021-05-27T09:27:20+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "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" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6118,45 +6596,67 @@ "portable", "shim" ], - "time": "2021-02-19T12:13:01+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6181,101 +6681,60 @@ "portable", "shim" ], - "time": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + { + "url": "https://github.com/fabpot", + "type": "github" }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "url": "https://github.com/nicolas-grekas", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "name": "symfony/polyfill-php83", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6294,7 +6753,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6302,42 +6761,60 @@ "portable", "shim" ], - "time": "2021-02-19T12:13:01+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "name": "symfony/polyfill-php84", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6347,10 +6824,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -6360,7 +6833,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6368,42 +6841,60 @@ "portable", "shim" ], - "time": "2021-07-28T13:41:28+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "name": "symfony/polyfill-php85", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -6422,7 +6913,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6430,25 +6921,45 @@ "portable", "shim" ], - "time": "2021-05-21T13:25:03+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-23T16:12:55+00:00" }, { "name": "symfony/process", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "reference": "608476f4604102976d687c483ac63a79ba18cc97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97", + "reference": "608476f4604102976d687c483ac63a79ba18cc97", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6475,33 +6986,50 @@ ], "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-26T15:07:59+00:00" }, { "name": "symfony/property-access", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562" + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562", - "reference": "07db4e9d1f0bf4b8a0c60a25b2672f20ab8f3562", + "url": "https://api.github.com/repos/symfony/property-access/zipball/fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", + "reference": "fa49bf1ca8fce1ba0e2dba4e4658554cfb9364b1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/property-info": "^5.2|^6.0" + "php": ">=8.2", + "symfony/property-info": "^6.4.32|~7.3.10|^7.4.4|^8.0.4" }, "require-dev": { - "symfony/cache": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "To cache access methods." + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4.1|^7.0.1|^8.0" }, "type": "library", "autoload": { @@ -6536,49 +7064,65 @@ "injection", "object", "property", - "property path", + "property-path", "reflection" ], - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/property-access/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/property-info", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "c21b4221522779537e9693d51536d8174579b1fd" + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/c21b4221522779537e9693d51536d8174579b1fd", - "reference": "c21b4221522779537e9693d51536d8174579b1fd", + "url": "https://api.github.com/repos/symfony/property-info/zipball/1c9d326bd69602561e2ea467a16c09b5972eee21", + "reference": "1c9d326bd69602561e2ea467a16c09b5972eee21", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/string": "^5.1|^6.0" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/type-info": "~7.3.10|^7.4.4|^8.0.4" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4" + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/cache": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "suggest": { - "phpdocumentor/reflection-docblock": "To use the PHPDoc", - "psr/cache-implementation": "To cache results", - "symfony/doctrine-bridge": "To use Doctrine metadata", - "symfony/serializer": "To use Serializer metadata" + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6613,98 +7157,59 @@ "type", "validator" ], - "time": "2021-11-23T10:19:22+00:00" - }, - { - "name": "symfony/proxy-manager-bridge", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7", - "reference": "91e5ddd5f7381f4a5524f10c8789c6d5d07f04e7", - "shasum": "" - }, - "require": { - "composer/package-versions-deprecated": "^1.8", - "friendsofphp/proxy-manager-lts": "^1.0.2", - "php": ">=7.2.5", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "symfony/config": "^4.4|^5.0|^6.0" + "support": { + "source": "https://github.com/symfony/property-info/tree/v7.4.5" }, - "type": "symfony-bridge", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\ProxyManager\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Provides integration for ProxyManager with various Symfony components", - "homepage": "https://symfony.com", - "time": "2021-11-17T12:18:18+00:00" + "time": "2026-01-27T16:16:02+00:00" }, { "name": "symfony/routing", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1" + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1", + "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147", + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6737,65 +7242,92 @@ "uri", "url" ], - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/security-bundle", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "38d5e23c85932deb45289793f7b9a0a1b174071a" + "reference": "7281b644c76985ddf3927f5e65152b0cc29d175b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/38d5e23c85932deb45289793f7b9a0a1b174071a", - "reference": "38d5e23c85932deb45289793f7b9a0a1b174071a", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/7281b644c76985ddf3927f5e65152b0cc29d175b", + "reference": "7281b644c76985ddf3927f5e65152b0cc29d175b", "shasum": "" }, "require": { + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher": "^5.1|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/password-hasher": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/security-core": "^5.4|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/security-guard": "^5.3", - "symfony/security-http": "^5.4|^6.0" + "php": ">=8.2", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^6.4.11|^7.1.4|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/password-hasher": "^6.4|^7.0|^8.0", + "symfony/security-core": "^7.4|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/security-http": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/browser-kit": "<4.4", - "symfony/console": "<4.4", - "symfony/framework-bundle": "<4.4", - "symfony/ldap": "<5.1", - "symfony/twig-bundle": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/browser-kit": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.3|^6.0", - "symfony/ldap": "^5.3|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/twig-bridge": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/browser-kit": "<6.4", + "symfony/console": "<6.4", + "symfony/framework-bundle": "<6.4", + "symfony/http-client": "<6.4", + "symfony/ldap": "<6.4", + "symfony/serializer": "<6.4", + "symfony/twig-bundle": "<6.4", + "symfony/validator": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/ldap": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "twig/twig": "^3.15", + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "symfony-bundle", "autoload": { @@ -6822,56 +7354,71 @@ ], "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/security-bundle/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-10T13:56:23+00:00" }, { "name": "symfony/security-core", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "cc961891c83fc87fd31361b85032db35ae9770e6" + "reference": "958a70725a8d669bec6721f4cd318d209712e944" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/cc961891c83fc87fd31361b85032db35ae9770e6", - "reference": "cc961891c83fc87fd31361b85032db35ae9770e6", + "url": "https://api.github.com/repos/symfony/security-core/zipball/958a70725a8d669bec6721f4cd318d209712e944", + "reference": "958a70725a8d669bec6721f4cd318d209712e944", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^1.1|^2|^3", - "symfony/password-hasher": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1.6|^2|^3" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3", + "symfony/password-hasher": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/event-dispatcher": "<4.4", - "symfony/http-foundation": "<5.3", - "symfony/ldap": "<4.4", - "symfony/security-guard": "<4.4", - "symfony/validator": "<5.2" + "symfony/dependency-injection": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/http-foundation": "<6.4", + "symfony/ldap": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/validator": "<6.4" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.0|^2.0", + "psr/container": "^1.1|^2.0", "psr/log": "^1|^2|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/ldap": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/validator": "^5.2|^6.0" - }, - "suggest": { - "psr/container-implementation": "To instantiate the Security class", - "symfony/event-dispatcher": "", - "symfony/expression-language": "For using the expression voter", - "symfony/http-foundation": "", - "symfony/ldap": "For using LDAP integration", - "symfony/validator": "For using the user password constraint" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/ldap": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6898,35 +7445,54 @@ ], "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", - "time": "2021-11-23T19:07:08+00:00" + "support": { + "source": "https://github.com/symfony/security-core/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-14T09:36:49+00:00" }, { "name": "symfony/security-csrf", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2" + "reference": "06a2a2f90f355b8b4ec23685fa6ceff8d5dc41cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2", - "reference": "a6bfeedc3fcaafd2eb9ce61f0eb6a95e0316a3e2", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/06a2a2f90f355b8b4ec23685fa6ceff8d5dc41cc", + "reference": "06a2a2f90f355b8b4ec23685fa6ceff8d5dc41cc", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16", - "symfony/security-core": "^4.4|^5.0|^6.0" + "php": ">=8.2", + "symfony/security-core": "^6.4|^7.0|^8.0" }, "conflict": { - "symfony/http-foundation": "<5.3" + "symfony/http-foundation": "<6.4" }, "require-dev": { - "symfony/http-foundation": "^5.3|^6.0" - }, - "suggest": { - "symfony/http-foundation": "For using the class SessionTokenStorage." + "psr/log": "^1|^2|^3", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -6953,98 +7519,72 @@ ], "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", - "time": "2021-11-23T19:07:08+00:00" - }, - { - "name": "symfony/security-guard", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-guard.git", - "reference": "5ebbe00731ce0773108116875083a82098ddddcf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-guard/zipball/5ebbe00731ce0773108116875083a82098ddddcf", - "reference": "5ebbe00731ce0773108116875083a82098ddddcf", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15", - "symfony/security-core": "^5.0", - "symfony/security-http": "^5.3" - }, - "require-dev": { - "psr/log": "^1|^2|^3" + "support": { + "source": "https://github.com/symfony/security-csrf/tree/v7.4.4" }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Guard\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Security Component - Guard", - "homepage": "https://symfony.com", - "time": "2021-11-23T19:07:08+00:00" + "time": "2026-01-14T10:11:16+00:00" }, { "name": "symfony/security-http", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4" + "reference": "9d41a473637bf5d074c5f5a73177fd9d769407fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4", - "reference": "3fa1dcbde86f12454a78c69e9d1a6c3dca776ea4", + "url": "https://api.github.com/repos/symfony/security-http/zipball/9d41a473637bf5d074c5f5a73177fd9d769407fd", + "reference": "9d41a473637bf5d074c5f5a73177fd9d769407fd", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/security-core": "^5.4|^6.0" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/security-core": "^7.3|^8.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/event-dispatcher": "<4.3", - "symfony/security-bundle": "<5.3", - "symfony/security-csrf": "<4.4" + "symfony/clock": "<6.4", + "symfony/http-client-contracts": "<3.0", + "symfony/security-bundle": "<6.4", + "symfony/security-csrf": "<6.4" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/rate-limiter": "^5.2|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/routing": "For using the HttpUtils class to create sub-requests, redirect the user, and match URLs", - "symfony/security-csrf": "For using tokens to protect authentication/logout attempts" + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^3.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "web-token/jwt-library": "^3.3.2|^4.0" }, "type": "library", "autoload": { @@ -7071,65 +7611,83 @@ ], "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", - "time": "2021-11-29T15:50:27+00:00" + "support": { + "source": "https://github.com/symfony/security-http/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-14T10:11:16+00:00" }, { "name": "symfony/serializer", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "66942cf6bf412ca72c39353596f4d37ee0f9059b" + "reference": "480cd1237c98ab1219c20945b92c9d4480a44f47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/66942cf6bf412ca72c39353596f4d37ee0f9059b", - "reference": "66942cf6bf412ca72c39353596f4d37ee0f9059b", + "url": "https://api.github.com/repos/symfony/serializer/zipball/480cd1237c98ab1219c20945b92c9d4480a44f47", + "reference": "480cd1237c98ab1219c20945b92c9d4480a44f47", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-php84": "^1.30" }, "conflict": { - "doctrine/annotations": "<1.12", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<4.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.3", - "symfony/yaml": "<4.4" + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<6.4", + "symfony/property-access": "<6.4", + "symfony/property-info": "<6.4", + "symfony/uid": "<6.4", + "symfony/validator": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12", - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.3|^6.0", - "symfony/uid": "^5.1|^6.0", - "symfony/validator": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0", - "symfony/var-exporter": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/cache-implementation": "For using the metadata cache.", - "symfony/config": "For using the XML mapping loader.", - "symfony/mime": "For using a MIME type guesser within the DataUriNormalizer.", - "symfony/property-access": "For using the ObjectNormalizer.", - "symfony/property-info": "To deserialize relations.", - "symfony/var-exporter": "For using the metadata compiler.", - "symfony/yaml": "For using the default YAML mapping loader." + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0|^2.0", + "seld/jsonlint": "^1.10", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^7.2|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/type-info": "^7.1.8|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7156,47 +7714,68 @@ ], "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/serializer/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7222,92 +7801,52 @@ "interoperability", "standards" ], - "time": "2021-11-04T16:48:04+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/208ef96122bfed82a8f3a61458a07113a08bdcfe", - "reference": "208ef96122bfed82a8f3a61458a07113a08bdcfe", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { - "name": "symfony/string", - "version": "v5.4.0", + "name": "symfony/stopwatch", + "version": "v7.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "8a24af0a2e8a872fb745047180649b8418303084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\Stopwatch\\": "" }, - "files": [ - "Resources/functions.php" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -7318,116 +7857,78 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "time": "2021-11-24T10:02:00+00:00" - }, - { - "name": "symfony/swiftmailer-bundle", - "version": "v3.5.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "fa7d78cbdf0a16a4da126c465f25f6547ad69cf6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/fa7d78cbdf0a16a4da126c465f25f6547ad69cf6", - "reference": "fa7d78cbdf0a16a4da126c465f25f6547ad69cf6", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "swiftmailer/swiftmailer": "^6.1.3", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0" - }, - "conflict": { - "twig/twig": "<1.41|>=2.0,<2.10" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0", - "symfony/framework-bundle": "^4.4|^5.0", - "symfony/phpunit-bridge": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Bundle\\SwiftmailerBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" + }, + "funding": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony SwiftmailerBundle", - "homepage": "http://symfony.com", - "time": "2021-12-02T16:23:52+00:00" + "time": "2025-08-04T07:05:15+00:00" }, { - "name": "symfony/templating", - "version": "v5.4.0", + "name": "symfony/string", + "version": "v7.4.4", "source": { "type": "git", - "url": "https://github.com/symfony/templating.git", - "reference": "5951210f5628417a9a0b39ad10d6b0cd39746435" + "url": "https://github.com/symfony/string.git", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/templating/zipball/5951210f5628417a9a0b39ad10d6b0cd39746435", - "reference": "5951210f5628417a9a0b39ad10d6b0cd39746435", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" }, - "require-dev": { - "psr/log": "^1|^2|^3" + "conflict": { + "symfony/translation-contracts": "<2.5" }, - "suggest": { - "psr/log-implementation": "For using debug logging in loaders" + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\Templating\\": "" + "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -7439,67 +7940,95 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides all the tools needed to build any kind of template system", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T10:54:30+00:00" }, { "name": "symfony/translation", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "6fe32b10e912a518805bc9eafc2a87145773cf13" + "reference": "bfde13711f53f549e73b06d27b35a55207528877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/6fe32b10e912a518805bc9eafc2a87145773cf13", - "reference": "6fe32b10e912a518805bc9eafc2a87145773cf13", + "url": "https://api.github.com/repos/symfony/translation/zipball/bfde13711f53f549e73b06d27b35a55207528877", + "reference": "bfde13711f53f549e73b06d27b35a55207528877", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.5.3|^3.3" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7529,42 +8058,63 @@ ], "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/translation/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/d28150f0f44ce854e942b671fc2620a98aae1b1e", - "reference": "d28150f0f44ce854e942b671fc2620a98aae1b1e", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7590,84 +8140,95 @@ "interoperability", "standards" ], - "time": "2021-08-17T14:20:01+00:00" + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/twig-bridge", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "faed6ad85a2f8e675820422a74c4e0d5858a6821" + "reference": "f2dd26b604e856476ef7e0efa4568bc07eb7ddc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/faed6ad85a2f8e675820422a74c4e0d5858a6821", - "reference": "faed6ad85a2f8e675820422a74c4e0d5858a6821", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/f2dd26b604e856476ef7e0efa4568bc07eb7ddc8", + "reference": "f2dd26b604e856476ef7e0efa4568bc07eb7ddc8", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^1.1|^2|^3", - "twig/twig": "^2.13|^3.0.4" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/translation-contracts": "^2.5|^3", + "twig/twig": "^3.21" }, "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<5.3", - "symfony/form": "<5.3", - "symfony/http-foundation": "<5.3", - "symfony/http-kernel": "<4.4", - "symfony/translation": "<5.2", - "symfony/workflow": "<5.2" - }, - "require-dev": { - "doctrine/annotations": "^1.12", - "egulias/email-validator": "^2.1.10|^3", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/console": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^5.3|^6.0", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/mime": "^5.2|^6.0", + "phpdocumentor/reflection-docblock": "<5.2|>=6", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/console": "<6.4", + "symfony/form": "<6.4.32|>7,<7.3.10|>7.4,<7.4.4|>8.0,<8.0.4", + "symfony/http-foundation": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/mime": "<6.4", + "symfony/serializer": "<6.4", + "symfony/translation": "<6.4", + "symfony/workflow": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2", + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/asset-mapper": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/emoji": "^7.1|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4.32|~7.3.10|^7.4.4|^8.0.4", + "symfony/html-sanitizer": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^7.3|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/security-csrf": "^4.4|^5.0|^6.0", - "symfony/security-http": "^4.4|^5.0|^6.0", - "symfony/serializer": "^5.2|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^5.2|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/workflow": "^5.2|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" - }, - "suggest": { - "symfony/asset": "For using the AssetExtension", - "symfony/expression-language": "For using the ExpressionExtension", - "symfony/finder": "", - "symfony/form": "For using the FormExtension", - "symfony/http-kernel": "For using the HttpKernelExtension", - "symfony/routing": "For using the RoutingExtension", - "symfony/security-core": "For using the SecurityExtension", - "symfony/security-csrf": "For using the CsrfExtension", - "symfony/security-http": "For using the LogoutUrlExtension", - "symfony/stopwatch": "For using the StopwatchExtension", - "symfony/translation": "For using the TranslationExtension", - "symfony/var-dumper": "For using the DumpExtension", - "symfony/web-link": "For using the WebLinkExtension", - "symfony/yaml": "For using the YamlExtension" + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-csrf": "^6.4|^7.0|^8.0", + "symfony/security-http": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/workflow": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "twig/cssinliner-extra": "^3", + "twig/inky-extra": "^3", + "twig/markdown-extra": "^3" }, "type": "symfony-bridge", "autoload": { @@ -7694,52 +8255,70 @@ ], "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/twig-bundle", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f" + "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f", - "reference": "de8634b8c604a42277c6cc7e4f0d1e9e30c5ec7f", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/e8829e02ff96a391ed0703bac9e7ff0537480b6b", + "reference": "e8829e02ff96a391ed0703bac9e7ff0537480b6b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/twig-bridge": "^5.3|^6.0", - "twig/twig": "^2.13|^3.0.4" + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/twig-bridge": "^7.3|^8.0", + "twig/twig": "^3.12" }, "conflict": { - "symfony/dependency-injection": "<5.3", - "symfony/framework-bundle": "<5.0", - "symfony/service-contracts": ">=3.0", - "symfony/translation": "<5.0" - }, - "require-dev": { - "doctrine/annotations": "^1.10.4", - "doctrine/cache": "^1.0|^2.0", - "symfony/asset": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/form": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^5.0|^6.0", - "symfony/web-link": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" + "symfony/framework-bundle": "<6.4", + "symfony/translation": "<6.4" + }, + "require-dev": { + "symfony/asset": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/form": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/web-link": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -7766,75 +8345,166 @@ ], "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", - "time": "2021-11-23T21:36:27+00:00" + "support": { + "source": "https://github.com/symfony/twig-bundle/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-06T12:34:24+00:00" + }, + { + "name": "symfony/type-info", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/type-info.git", + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/type-info/zipball/f83c725e72b39b2704b9d6fc85070ad6ac7a5889", + "reference": "f83c725e72b39b2704b9d6fc85070ad6ac7a5889", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "phpstan/phpdoc-parser": "<1.30" + }, + "require-dev": { + "phpstan/phpdoc-parser": "^1.30|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\TypeInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Arlaud", + "email": "mathias.arlaud@gmail.com" + }, + { + "name": "Baptiste LEDUC", + "email": "baptiste.leduc@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts PHP types information.", + "homepage": "https://symfony.com", + "keywords": [ + "PHPStan", + "phpdoc", + "symfony", + "type" + ], + "support": { + "source": "https://github.com/symfony/type-info/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-09T12:14:21+00:00" }, { "name": "symfony/validator", - "version": "v5.4.0", + "version": "v7.4.5", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "68db3401621f75b285cf54ac83e3b89066e08f8d" + "reference": "fcec92c40df1c93507857da08226005573b655c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/68db3401621f75b285cf54ac83e3b89066e08f8d", - "reference": "68db3401621f75b285cf54ac83e3b89066e08f8d", + "url": "https://api.github.com/repos/symfony/validator/zipball/fcec92c40df1c93507857da08226005573b655c6", + "reference": "fcec92c40df1c93507857da08226005573b655c6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^1.1|^2|^3" + "symfony/polyfill-php83": "^1.27", + "symfony/translation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.13", - "doctrine/cache": "<1.11", - "doctrine/lexer": "<1.0.2", - "phpunit/phpunit": "<5.4.3", - "symfony/dependency-injection": "<4.4", - "symfony/expression-language": "<5.1", - "symfony/http-kernel": "<4.4", - "symfony/intl": "<4.4", - "symfony/property-info": "<5.3", - "symfony/translation": "<4.4", - "symfony/yaml": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.13", - "doctrine/cache": "^1.11|^2.0", - "egulias/email-validator": "^2.1.10|^3", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^5.1|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.0|^6.0", - "symfony/property-info": "^5.3|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "egulias/email-validator": "Strict (RFC compliant) email validation", - "psr/cache-implementation": "For using the mapping cache.", - "symfony/config": "", - "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/property-access": "For accessing properties within comparison constraints", - "symfony/property-info": "To automatically add NotNull and Type constraints", - "symfony/translation": "For translating validation errors.", - "symfony/yaml": "" + "doctrine/lexer": "<1.1", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<7.0", + "symfony/expression-language": "<6.4", + "symfony/http-kernel": "<6.4", + "symfony/intl": "<6.4", + "symfony/property-info": "<6.4", + "symfony/translation": "<6.4.3|>=7.0,<7.0.3", + "symfony/var-exporter": "<6.4.25|>=7.0,<7.3.3", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3|^4", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/string": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4.3|^7.0.3|^8.0", + "symfony/type-info": "^7.1.8", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7842,7 +8512,8 @@ "Symfony\\Component\\Validator\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/Resources/bin/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -7861,42 +8532,57 @@ ], "description": "Provides tools to validate values", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/validator/tree/v7.4.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T08:59:58+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9" + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89ab66eaef230c9cd1992de2e9a1b26652b127b9", - "reference": "89ab66eaef230c9cd1992de2e9a1b26652b127b9", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<6.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -7933,28 +8619,51 @@ "debug", "dump" ], - "time": "2021-11-29T15:30:56+00:00" + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/var-exporter", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "d59446d6166b1643a8a3c30c2fa8e16e51cdbde7" + "reference": "03a60f169c79a28513a78c967316fbc8bf17816f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/d59446d6166b1643a8a3c30c2fa8e16e51cdbde7", - "reference": "d59446d6166b1643a8a3c30c2fa8e16e51cdbde7", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/03a60f169c79a28513a78c967316fbc8bf17816f", + "reference": "03a60f169c79a28513a78c967316fbc8bf17816f", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -7987,40 +8696,59 @@ "export", "hydrate", "instantiate", + "lazy-loading", + "proxy", "serialize" ], - "time": "2021-11-22T10:44:13+00:00" + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-09-11T10:15:23+00:00" }, { "name": "symfony/web-link", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/web-link.git", - "reference": "de535b46002214d976c5b092f33f46de5e0c1d05" + "reference": "9ff1f19069e3d2d341d60729392a4a6dfc45052a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/de535b46002214d976c5b092f33f46de5e0c1d05", - "reference": "de535b46002214d976c5b092f33f46de5e0c1d05", + "url": "https://api.github.com/repos/symfony/web-link/zipball/9ff1f19069e3d2d341d60729392a4a6dfc45052a", + "reference": "9ff1f19069e3d2d341d60729392a4a6dfc45052a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/link": "^1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "psr/link": "^1.1|^2.0" }, "conflict": { - "symfony/http-kernel": "<5.3" + "symfony/http-kernel": "<6.4" }, "provide": { - "psr/link-implementation": "1.0" + "psr/link-implementation": "1.0|2.0" }, "require-dev": { - "symfony/http-kernel": "^5.3|^6.0" - }, - "suggest": { - "symfony/http-kernel": "" + "symfony/http-kernel": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -8059,41 +8787,63 @@ "psr13", "push" ], - "time": "2021-07-21T12:43:48+00:00" + "support": { + "source": "https://github.com/symfony/web-link/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/webpack-encore-bundle", - "version": "v1.13.2", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/webpack-encore-bundle.git", - "reference": "509cad50878e838c879743225e0e921b3b64a3f2" + "reference": "5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/509cad50878e838c879743225e0e921b3b64a3f2", - "reference": "509cad50878e838c879743225e0e921b3b64a3f2", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e", + "reference": "5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/asset": "^4.4 || ^5.0 || ^6.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/service-contracts": "^1.0 || ^2.0 || ^3.0" + "php": ">=8.1.0", + "symfony/asset": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/config": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0" }, "require-dev": { - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.3 || ^6.0", - "symfony/twig-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/web-link": "^4.4 || ^5.0 || ^6.0" + "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-client": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/web-link": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "type": "symfony-bundle", "extra": { "thanks": { - "name": "symfony/webpack-encore", - "url": "https://github.com/symfony/webpack-encore" + "url": "https://github.com/symfony/webpack-encore", + "name": "symfony/webpack-encore" } }, "autoload": { @@ -8111,36 +8861,55 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Integration with your Symfony app & Webpack Encore!", - "time": "2021-12-02T19:45:55+00:00" + "description": "Integration of your Symfony app with Webpack Encore", + "support": { + "issues": "https://github.com/symfony/webpack-encore-bundle/issues", + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:41:46+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.0", + "version": "v7.4.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc" + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", - "reference": "034ccc0994f1ae3f7499fa5b1f2e75d5e7a94efc", + "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -8170,35 +8939,58 @@ ], "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "time": "2021-11-28T15:25:38+00:00" + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-04T18:11:45+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -8219,37 +9011,40 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2020-07-13T06:12:54+00:00" + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" }, { "name": "twig/cssinliner-extra", - "version": "v3.3.4", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "a6065b23645282e1c81d847cf0c7f0211d22b682" + "reference": "c25fa18b09a418e4d1454ec291f9406f630675ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/a6065b23645282e1c81d847cf0c7f0211d22b682", - "reference": "a6065b23645282e1c81d847cf0c7f0211d22b682", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/c25fa18b09a418e4d1454ec291f9406f630675ba", + "reference": "c25fa18b09a418e4d1454ec291f9406f630675ba", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", "tijsverkoyen/css-to-inline-styles": "^2.0", - "twig/twig": "^2.7|^3.0" + "twig/twig": "^3.13|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Twig\\Extra\\CssInliner\\": "" }, @@ -8276,44 +9071,53 @@ "inlining", "twig" ], - "time": "2021-11-13T16:20:21+00:00" + "support": { + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-12-02T14:45:16+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.3.4", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "1fe52d84aa22b7891c7717ef904b1551c8d70100" + "reference": "7a27e784dc56eddfef5e9295829b290ce06f1682" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/1fe52d84aa22b7891c7717ef904b1551c8d70100", - "reference": "1fe52d84aa22b7891c7717ef904b1551c8d70100", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/7a27e784dc56eddfef5e9295829b290ce06f1682", + "reference": "7a27e784dc56eddfef5e9295829b290ce06f1682", "shasum": "" }, "require": { - "php": "^7.1.3|^8.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "twig/twig": "^2.7|^3.0" + "php": ">=8.1.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0|^8.0", + "twig/twig": "^3.2|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0", + "league/commonmark": "^2.7", + "symfony/phpunit-bridge": "^6.4|^7.0", "twig/cache-extra": "^3.0", - "twig/cssinliner-extra": "^2.12|^3.0", - "twig/html-extra": "^2.12|^3.0", - "twig/inky-extra": "^2.12|^3.0", - "twig/intl-extra": "^2.12|^3.0", - "twig/markdown-extra": "^2.12|^3.0", - "twig/string-extra": "^2.12|^3.0" + "twig/cssinliner-extra": "^3.0", + "twig/html-extra": "^3.0", + "twig/inky-extra": "^3.0", + "twig/intl-extra": "^3.0", + "twig/markdown-extra": "^3.0", + "twig/string-extra": "^3.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { "psr-4": { "Twig\\Extra\\TwigExtraBundle\\": "" @@ -8341,37 +9145,49 @@ "extra", "twig" ], - "time": "2021-11-13T16:20:21+00:00" + "support": { + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-12-18T20:46:15+00:00" }, { "name": "twig/inky-extra", - "version": "v3.3.4", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", - "reference": "6f81ada491569cfeb04fb43070f3a8908fc0f9ce" + "reference": "6bdca65a38167f7bd0ad7ea04819098d465a5cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/6f81ada491569cfeb04fb43070f3a8908fc0f9ce", - "reference": "6f81ada491569cfeb04fb43070f3a8908fc0f9ce", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/6bdca65a38167f7bd0ad7ea04819098d465a5cc4", + "reference": "6bdca65a38167f7bd0ad7ea04819098d465a5cc4", "shasum": "" }, "require": { "lorenzo/pinky": "^1.0.5", - "php": ">=7.1.3", - "twig/twig": "^2.7|^3.0" + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "twig/twig": "^3.13|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Twig\\Extra\\Inky\\": "" }, @@ -8399,36 +9215,44 @@ "inky", "twig" ], - "time": "2021-11-13T16:20:21+00:00" + "support": { + "source": "https://github.com/twigphp/inky-extra/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-12-02T14:45:16+00:00" }, { "name": "twig/intl-extra", - "version": "v3.3.4", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "a0bdab97a1cf5ccc944c70aee1d2f2602db64d16" + "reference": "32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/a0bdab97a1cf5ccc944c70aee1d2f2602db64d16", - "reference": "a0bdab97a1cf5ccc944c70aee1d2f2602db64d16", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f", + "reference": "32f15a38d45a8d0ec11bc8a3d97d3ac2a261499f", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/intl": "^4.4|^5.0|^6.0", - "twig/twig": "^2.7|^3.0" + "php": ">=8.1.0", + "symfony/intl": "^5.4|^6.4|^7.0|^8.0", + "twig/twig": "^3.13|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { "psr-4": { "Twig\\Extra\\Intl\\": "" @@ -8455,40 +9279,52 @@ "intl", "twig" ], - "time": "2021-11-13T16:20:21+00:00" + "support": { + "source": "https://github.com/twigphp/intl-extra/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2026-01-17T13:57:47+00:00" }, { "name": "twig/markdown-extra", - "version": "v3.3.4", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/markdown-extra.git", - "reference": "c84c1fb75f0abb6e8477631b4ada59de770e83e6" + "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/c84c1fb75f0abb6e8477631b4ada59de770e83e6", - "reference": "c84c1fb75f0abb6e8477631b4ada59de770e83e6", + "url": "https://api.github.com/repos/twigphp/markdown-extra/zipball/faf069b259e2d3930c73c2f53e2dec8440bd90a2", + "reference": "faf069b259e2d3930c73c2f53e2dec8440bd90a2", "shasum": "" }, "require": { - "php": ">=7.1.3", - "twig/twig": "^2.7|^3.0" + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "twig/twig": "^3.13|^4.0" }, "require-dev": { - "erusev/parsedown": "^1.7", - "league/commonmark": "^1.0", + "erusev/parsedown": "dev-master as 1.x-dev", + "league/commonmark": "^2.7", "league/html-to-markdown": "^4.8|^5.0", - "michelf/php-markdown": "^1.8", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "michelf/php-markdown": "^1.8|^2.0", + "symfony/phpunit-bridge": "^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Twig\\Extra\\Markdown\\": "" }, @@ -8515,41 +9351,54 @@ "markdown", "twig" ], - "time": "2021-11-13T16:20:21+00:00" + "support": { + "source": "https://github.com/twigphp/markdown-extra/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-12-02T14:45:16+00:00" }, { "name": "twig/twig", - "version": "v2.14.8", + "version": "v3.23.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "06b450a2326aa879faa2061ff72fe1588b3ab043" + "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/06b450a2326aa879faa2061ff72fe1588b3ab043", - "reference": "06b450a2326aa879faa2061ff72fe1588b3ab043", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", + "reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.14-dev" - } - }, "autoload": { - "psr-0": { - "Twig_": "lib/" - }, + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], "psr-4": { "Twig\\": "src/" } @@ -8580,37 +9429,51 @@ "keywords": [ "templating" ], - "time": "2021-11-25T13:38:06+00:00" + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.23.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2026-01-23T21:00:41+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "2.1.5", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "79155f94852fa27e2f73b459f6503f5e87e2c188" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/79155f94852fa27e2f73b459f6503f5e87e2c188", + "reference": "79155f94852fa27e2f73b459f6503f5e87e2c188", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10-dev" + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -8626,6 +9489,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -8634,50 +9501,56 @@ "check", "validate" ], - "time": "2021-03-09T10:59:23+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/2.1.5" + }, + "time": "2026-02-18T14:09:36+00:00" } ], "packages-dev": [ { "name": "dama/doctrine-test-bundle", - "version": "v6.7.1", + "version": "v8.6.0", "source": { "type": "git", "url": "https://github.com/dmaicher/doctrine-test-bundle.git", - "reference": "2ccf6653ce9c7bf46ae53b2e5bbbb60417d9e3e1" + "reference": "f7e3487643e685432f7e27c50cac64e9f8c515a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/2ccf6653ce9c7bf46ae53b2e5bbbb60417d9e3e1", - "reference": "2ccf6653ce9c7bf46ae53b2e5bbbb60417d9e3e1", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/f7e3487643e685432f7e27c50cac64e9f8c515a4", + "reference": "f7e3487643e685432f7e27c50cac64e9f8c515a4", "shasum": "" }, "require": { - "doctrine/dbal": "^2.9.3 || ^3.0", - "doctrine/doctrine-bundle": "^1.11 || ^2.0", - "php": "^7.1 || ^8.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.3 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0" + "doctrine/dbal": "^3.3 || ^4.0", + "doctrine/doctrine-bundle": "^2.11.0 || ^3.0", + "php": ">= 8.2", + "psr/cache": "^2.0 || ^3.0", + "symfony/cache": "^6.4 || ^7.3 || ^8.0", + "symfony/framework-bundle": "^6.4 || ^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<11.0" }, "require-dev": { "behat/behat": "^3.0", - "doctrine/cache": "^1.12", - "phpstan/phpstan": "^0.12.85", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "symfony/phpunit-bridge": "^5.3 || ^6.0", - "symfony/process": "^4.4 || ^5.3 || ^6.0", - "symfony/yaml": "^4.4 || ^5.3 || ^6.0" + "friendsofphp/php-cs-fixer": "^3.27", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.41|| ^12.3.14", + "symfony/dotenv": "^6.4 || ^7.3 || ^8.0", + "symfony/process": "^6.4 || ^7.3 || ^8.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "6.x-dev" + "dev-master": "8.x-dev" } }, "autoload": { "psr-4": { - "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + "DAMA\\DoctrineTestBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -8696,39 +9569,50 @@ "isolation", "performance", "symfony", + "testing", "tests" ], - "time": "2021-11-09T11:55:09+00:00" + "support": { + "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.6.0" + }, + "time": "2026-01-21T07:39:44+00:00" }, { "name": "doctrine/data-fixtures", - "version": "1.5.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "f18adf13f6c81c67a88360dca359ad474523f8e3" + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f18adf13f6c81c67a88360dca359ad474523f8e3", - "reference": "f18adf13f6c81c67a88360dca359ad474523f8e3", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7a615ba135e45d67674bb623d90f34f6c7b6bd97", + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97", "shasum": "" }, "require": { - "doctrine/common": "^2.13|^3.0", - "doctrine/persistence": "^1.3.3|^2.0", - "php": "^7.2 || ^8.0" + "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": "^9.0", - "doctrine/dbal": "^2.5.4 || ^3.0", + "doctrine/coding-standard": "^14", + "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", - "doctrine/orm": "^2.7.0", + "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", - "phpunit/phpunit": "^8.0" + "fig/log-test": "^1", + "phpstan/phpstan": "2.1.31", + "phpunit/phpunit": "10.5.45 || 12.4.0", + "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)", @@ -8739,7 +9623,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\DataFixtures\\": "lib/Doctrine/Common/DataFixtures" + "Doctrine\\Common\\DataFixtures\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -8753,49 +9637,71 @@ } ], "description": "Data Fixtures for all Doctrine Object Managers", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "database" ], - "time": "2021-09-20T21:51:43+00:00" + "support": { + "issues": "https://github.com/doctrine/data-fixtures/issues", + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.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%2Fdata-fixtures", + "type": "tidelift" + } + ], + "time": "2025-10-17T20:06:20+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.4.1", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "31ba202bebce0b66fe830f49f96228dcdc1503e7" + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/31ba202bebce0b66fe830f49f96228dcdc1503e7", - "reference": "31ba202bebce0b66fe830f49f96228dcdc1503e7", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/4c3dfcc819ba2725a574f4286aa3f6459f582d5b", + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b", "shasum": "" }, "require": { - "doctrine/data-fixtures": "^1.3", - "doctrine/doctrine-bundle": "^1.11|^2.0", - "doctrine/orm": "^2.6.0", - "doctrine/persistence": "^1.3.7|^2.0", - "php": "^7.1 || ^8.0", - "symfony/config": "^3.4|^4.3|^5.0|^6.0", - "symfony/console": "^3.4|^4.3|^5.0|^6.0", - "symfony/dependency-injection": "^3.4.47|^4.3|^5.0|^6.0", - "symfony/doctrine-bridge": "^3.4|^4.1|^5.0|^6.0", - "symfony/http-kernel": "^3.4|^4.3|^5.0|^6.0" + "doctrine/data-fixtures": "^1.5 || ^2.0", + "doctrine/doctrine-bundle": "^2.2", + "doctrine/orm": "^2.14.0 || ^3.0", + "doctrine/persistence": "^2.4 || ^3.0 || ^4", + "php": "^7.4 || ^8.0", + "psr/log": "^1 || ^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": "^8.0", - "phpstan/phpstan": "^0.12.99", - "phpunit/phpunit": "^7.4 || ^8.0 || ^9.2", - "symfony/phpunit-bridge": "^4.1|^5.0|^6.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "14.0.0", + "phpstan/phpstan": "2.1.32", + "phpunit/phpunit": "^9.6.13 || 11.4.14", + "symfony/phpunit-bridge": "7.3.4" }, "type": "symfony-bundle", "autoload": { "psr-4": { - "Doctrine\\Bundle\\FixturesBundle\\": "" + "Doctrine\\Bundle\\FixturesBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -8809,54 +9715,141 @@ }, { "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" + "homepage": "https://www.doctrine-project.org" }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony DoctrineFixturesBundle", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org", "keywords": [ "Fixture", "persistence" ], - "time": "2021-10-28T05:46:28+00:00" + "support": { + "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.3" + }, + "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": "2025-12-03T15:47:21+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8870,29 +9863,41 @@ "object", "object graph" ], - "time": "2020-11-13T09:40:50+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -8900,7 +9905,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -8922,24 +9927,29 @@ "parser", "php" ], - "time": "2021-11-30T19:35:32+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -8978,20 +9988,30 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2021-07-20T11:28:43+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -9025,111 +10045,52 @@ } ], "description": "Library for handling version information and constraints", - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.14.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2021-09-10T09:02:12+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.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" + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.5.46" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -9155,32 +10116,55 @@ "testing", "xunit" ], - "time": "2021-12-05T09:12:13+00:00" + "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/11.0.12" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -9205,28 +10189,51 @@ "filesystem", "iterator" ], - "time": "2021-12-02T12:48:52+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-02-02T13:52:54+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -9234,7 +10241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9258,32 +10265,43 @@ "keywords": [ "process" ], - "time": "2020-09-28T05:58:55+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9307,32 +10325,43 @@ "keywords": [ "template" ], - "time": "2020-10-26T05:33:50+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9356,59 +10385,64 @@ "keywords": [ "timer" ], - "time": "2020-10-26T13:16:10+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "11.5.55", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -9416,15 +10450,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "11.5-dev" } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -9445,32 +10479,59 @@ "testing", "xunit" ], - "time": "2021-09-25T07:38:51+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-02-18T12:37:06+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9491,32 +10552,43 @@ ], "description": "Library for parsing CLI options", "homepage": "https://github.com/sebastianbergmann/cli-parser", - "time": "2020-09-28T06:08:49+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9537,32 +10609,43 @@ ], "description": "Collection of value objects that represent the PHP code units", "homepage": "https://github.com/sebastianbergmann/code-unit", - "time": "2020-10-26T13:08:54+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9582,34 +10665,50 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2020-09-28T05:30:19+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -9646,33 +10745,56 @@ "compare", "equality" ], - "time": "2020-10-26T15:49:45+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9693,33 +10815,44 @@ ], "description": "Library for calculating the complexity of PHP code units", "homepage": "https://github.com/sebastianbergmann/complexity", - "time": "2020-10-26T15:52:27+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^11.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -9749,27 +10882,38 @@ "unidiff", "unified diff" ], - "time": "2020-10-26T13:10:38+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "7.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "suggest": { "ext-posix": "*" @@ -9777,7 +10921,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -9796,40 +10940,63 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], - "time": "2020-09-28T05:52:38+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -9869,38 +11036,58 @@ "export", "exporter" ], - "time": "2021-11-11T14:18:36+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9919,37 +11106,48 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], - "time": "2021-06-11T13:31:12+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -9970,34 +11168,45 @@ ], "description": "Library for counting the lines of code in PHP source code", "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "time": "2020-11-28T06:42:11+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10017,32 +11226,43 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2020-10-26T13:12:34+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -10062,32 +11282,43 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2020-10-26T13:14:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10114,33 +11345,56 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2020-10-26T13:17:30+00:00" + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", + "name": "sebastian/type", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -10155,37 +11409,58 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2020-09-28T06:45:17+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { - "name": "sebastian/type", - "version": "2.3.4", + "name": "sebastian/version", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10204,80 +11479,97 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "time": "2021-06-15T12:49:02+00:00" + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": ">=7.3" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, + "type": "library", "autoload": { "classmap": [ - "src/" + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "url": "https://github.com/staabm", + "type": "github" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "symfony/browser-kit", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde" + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/d250db364a35ba5d60626b2a6f10f2eaf2073bde", - "reference": "d250db364a35ba5d60626b2a6f10f2eaf2073bde", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/bed167eadaaba641f51fc842c9227aa5e251309e", + "reference": "bed167eadaaba641f51fc842c9227aa5e251309e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/dom-crawler": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/process": "" + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -10304,42 +11596,55 @@ ], "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", - "time": "2021-10-26T22:29:18+00:00" + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/debug-bundle", - "version": "v5.4.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "71c299d4516dbc7c8e7bc73f57d57c7f7df9817e" + "reference": "329383fb895353e3c8ab792cc35c4a7e7b17881b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/71c299d4516dbc7c8e7bc73f57d57c7f7df9817e", - "reference": "71c299d4516dbc7c8e7bc73f57d57c7f7df9817e", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/329383fb895353e3c8ab792cc35c4a7e7b17881b", + "reference": "329383fb895353e3c8ab792cc35c4a7e7b17881b", "shasum": "" }, "require": { + "composer-runtime-api": ">=2.1", "ext-xml": "*", - "php": ">=7.2.5", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/twig-bridge": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.2" + "php": ">=8.2", + "symfony/config": "^7.3|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "require-dev": { - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/web-profiler-bundle": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "For service container configuration", - "symfony/dependency-injection": "For using as a service from the container" + "symfony/web-profiler-bundle": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -10364,40 +11669,54 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides a tight integration of the Symfony Debug component into the Symfony full-stack framework", + "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", - "time": "2021-07-21T12:43:48+00:00" + "support": { + "source": "https://github.com/symfony/debug-bundle/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-24T13:56:35+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8" + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/5b06626e940a3ad54e573511d64d4e00dc8d0fd8", - "reference": "5b06626e940a3ad54e573511d64d4e00dc8d0fd8", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/71fd6a82fc357c8b5de22f78b228acfc43dee965", + "reference": "71fd6a82fc357c8b5de22f78b228acfc43dee965", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "masterminds/html5": "^2.6", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "masterminds/html5": "<2.6" + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/css-selector": "" + "symfony/css-selector": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -10424,51 +11743,77 @@ ], "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", - "time": "2021-11-23T10:19:22+00:00" + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T08:47:25+00:00" }, { "name": "symfony/maker-bundle", - "version": "v1.36.4", + "version": "v1.66.0", "source": { "type": "git", "url": "https://github.com/symfony/maker-bundle.git", - "reference": "716eee9c8b10b33e682df1b7d80b9061887e9691" + "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/716eee9c8b10b33e682df1b7d80b9061887e9691", - "reference": "716eee9c8b10b33e682df1b7d80b9061887e9691", + "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/b5b4afa2a570b926682e9f34615a6766dd560ff4", + "reference": "b5b4afa2a570b926682e9f34615a6766dd560ff4", "shasum": "" }, "require": { - "doctrine/inflector": "^1.2|^2.0", - "nikic/php-parser": "^4.11", - "php": ">=7.1.3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "doctrine/inflector": "^2.0", + "nikic/php-parser": "^5.0", + "php": ">=8.1", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^2.2|^3", - "symfony/filesystem": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4|^5.0|^6.0" + "symfony/filesystem": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0" + }, + "conflict": { + "doctrine/doctrine-bundle": "<2.10", + "doctrine/orm": "<2.15" }, "require-dev": { "composer/semver": "^3.0", - "doctrine/doctrine-bundle": "^1.12.3|^2.0", - "doctrine/orm": "^2.3", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/phpunit-bridge": "^4.4|^5.0|^6.0", - "symfony/polyfill-php80": "^1.16.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/security-core": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0", - "twig/twig": "^2.0|^3.0" + "doctrine/doctrine-bundle": "^2.10|^3.0", + "doctrine/orm": "^2.15|^3", + "doctrine/persistence": "^3.1|^4.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/phpunit-bridge": "^6.4.1|^7.0|^8.0", + "symfony/security-core": "^6.4|^7.0|^8.0", + "symfony/security-http": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0", + "twig/twig": "^3.0|^4.x-dev" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-main": "1.0-dev" + "dev-main": "1.x-dev" } }, "autoload": { @@ -10490,38 +11835,55 @@ "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", "keywords": [ "code generator", + "dev", "generator", "scaffold", "scaffolding" ], - "time": "2021-12-01T00:27:38+00:00" + "support": { + "issues": "https://github.com/symfony/maker-bundle/issues", + "source": "https://github.com/symfony/maker-bundle/tree/v1.66.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-02-09T08:55:54+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v5.4.0", + "version": "v7.4.3", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "59bbd98ee7aa15b9f75c0fc088c7a5cbf7aa9b5c" + "reference": "f933e68bb9df29d08077a37e1515a23fea8562ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/59bbd98ee7aa15b9f75c0fc088c7a5cbf7aa9b5c", - "reference": "59bbd98ee7aa15b9f75c0fc088c7a5cbf7aa9b5c", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/f933e68bb9df29d08077a37e1515a23fea8562ab", + "reference": "f933e68bb9df29d08077a37e1515a23fea8562ab", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "phpunit/phpunit": "<7.5|9.1.2" + "php": ">=8.1.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4.3|^7.0.3|^8.0" }, "bin": [ "bin/simple-phpunit" @@ -10529,8 +11891,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": { @@ -10541,7 +11903,8 @@ "Symfony\\Bridge\\PhpUnit\\": "" }, "exclude-from-classmap": [ - "/Tests/" + "/Tests/", + "/bin/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -10560,43 +11923,70 @@ ], "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", - "time": "2021-11-29T15:30:56+00:00" + "keywords": [ + "testing" + ], + "support": { + "source": "https://github.com/symfony/phpunit-bridge/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-09T15:33:45+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v5.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "85261499e255007ac76afe1a943b0c7c0f925c45" + "reference": "be165e29e6109efb89bfaefe56e3deccf72a8643" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/85261499e255007ac76afe1a943b0c7c0f925c45", - "reference": "85261499e255007ac76afe1a943b0c7c0f925c45", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/be165e29e6109efb89bfaefe56e3deccf72a8643", + "reference": "be165e29e6109efb89bfaefe56e3deccf72a8643", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/framework-bundle": "^5.3|^6.0", - "symfony/http-kernel": "^5.3|^6.0", - "symfony/polyfill-php80": "^1.16", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/twig-bundle": "^4.4|^5.0|^6.0", - "twig/twig": "^2.13|^3.0.4" + "composer-runtime-api": ">=2.1", + "php": ">=8.2", + "symfony/config": "^7.3|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^6.4|^7.0|^8.0", + "twig/twig": "^3.15" }, "conflict": { - "symfony/dependency-injection": "<5.2", - "symfony/form": "<4.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<4.4" + "symfony/form": "<6.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/serializer": "<7.2", + "symfony/workflow": "<7.3" }, "require-dev": { - "symfony/browser-kit": "^4.4|^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" }, "type": "symfony-bundle", "autoload": { @@ -10623,75 +12013,44 @@ ], "description": "Provides a development tool that gives detailed information about the execution of any request", "homepage": "https://symfony.com", - "time": "2021-11-21T13:58:13+00:00" - }, - { - "name": "symfony/web-server-bundle", - "version": "v4.4.27", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-server-bundle.git", - "reference": "c283d46b40b1c9dee20771433a19fa7f4a9bb97a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-server-bundle/zipball/c283d46b40b1c9dee20771433a19fa7f4a9bb97a", - "reference": "c283d46b40b1c9dee20771433a19fa7f4a9bb97a", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/http-kernel": "^3.4|^4.0|^5.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/process": "^3.4.2|^4.0.2|^5.0" - }, - "suggest": { - "symfony/expression-language": "For using the filter option of the log server.", - "symfony/monolog-bridge": "For using the log server." + "keywords": [ + "dev" + ], + "support": { + "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.4.4" }, - "type": "symfony-bundle", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\WebServerBundle\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Provides commands for running applications using the PHP built-in web server", - "homepage": "https://symfony.com", - "time": "2021-07-21T12:19:41+00:00" + "time": "2026-01-07T11:56:45+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -10718,20 +12077,29 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2021-07-28T10:34:58+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "jms/i18n-routing-bundle": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "^7.1.3", + "php": "^8.2", "ext-ctype": "*", "ext-iconv": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.3.0" } diff --git a/config/bundles.php b/config/bundles.php index 6649ba0..37bcd42 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -15,6 +15,5 @@ KnpU\OAuth2ClientBundle\KnpUOAuth2ClientBundle::class => ['all' => true], DAMA\DoctrineTestBundle\DAMADoctrineTestBundle::class => ['test' => true], Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true], - JMS\I18nRoutingBundle\JMSI18nRoutingBundle::class => ['all' => true], Endroid\QrCodeBundle\EndroidQrCodeBundle::class => ['all' => true], ]; diff --git a/config/packages/csrf.yaml b/config/packages/csrf.yaml new file mode 100644 index 0000000..40d4040 --- /dev/null +++ b/config/packages/csrf.yaml @@ -0,0 +1,11 @@ +# Enable stateless CSRF protection for forms and logins/logouts +framework: + form: + csrf_protection: + token_id: submit + + csrf_protection: + stateless_token_ids: + - submit + - authenticate + - logout diff --git a/config/packages/dama_doctrine_test_bundle.yaml b/config/packages/dama_doctrine_test_bundle.yaml new file mode 100644 index 0000000..3482cba --- /dev/null +++ b/config/packages/dama_doctrine_test_bundle.yaml @@ -0,0 +1,5 @@ +when@test: + dama_doctrine_test: + enable_static_connection: true + enable_static_meta_data_cache: true + enable_static_query_cache: true diff --git a/config/packages/debug.yaml b/config/packages/debug.yaml new file mode 100644 index 0000000..ad874af --- /dev/null +++ b/config/packages/debug.yaml @@ -0,0 +1,5 @@ +when@dev: + debug: + # Forwards VarDumper Data clones to a centralized server allowing to inspect dumps on CLI or in your browser. + # See the "server:dump" command to start a new server. + dump_destination: "tcp://%env(VAR_DUMPER_SERVER)%" diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 5e80e77..1d94961 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -12,7 +12,6 @@ doctrine: mappings: App: is_bundle: false - type: annotation dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App diff --git a/config/packages/jms_i18n_routing.yaml b/config/packages/jms_i18n_routing.yaml index 01f4ee9..e69de29 100644 --- a/config/packages/jms_i18n_routing.yaml +++ b/config/packages/jms_i18n_routing.yaml @@ -1,4 +0,0 @@ -jms_i18n_routing: - default_locale: de - locales: [de, en, fr, es, vi, zh, tr, ru] - strategy: prefix_except_default diff --git a/config/packages/monolog.yaml b/config/packages/monolog.yaml new file mode 100644 index 0000000..bb59708 --- /dev/null +++ b/config/packages/monolog.yaml @@ -0,0 +1,55 @@ +monolog: + channels: + - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists + +when@dev: + monolog: + handlers: + main: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + channels: ["!event"] + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine", "!console"] + +when@test: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!event"] + nested: + type: stream + path: "%kernel.logs_dir%/%kernel.environment%.log" + level: debug + +when@prod: + monolog: + handlers: + main: + type: fingers_crossed + action_level: error + handler: nested + excluded_http_codes: [404, 405] + channels: ["!deprecation"] + buffer_size: 50 # How many messages should be saved? Prevent memory leaks + nested: + type: stream + path: php://stderr + level: debug + formatter: monolog.formatter.json + console: + type: console + process_psr_3_messages: false + channels: ["!event", "!doctrine"] + deprecation: + type: stream + channels: [deprecation] + path: php://stderr + formatter: monolog.formatter.json diff --git a/config/packages/property_info.yaml b/config/packages/property_info.yaml new file mode 100644 index 0000000..dd31b9d --- /dev/null +++ b/config/packages/property_info.yaml @@ -0,0 +1,3 @@ +framework: + property_info: + with_constructor_extractor: true diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 96db5c4..bc0931f 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -1,8 +1,9 @@ security: - encoders: + password_hashers: App\Entity\User: algorithm: auto - enable_authenticator_manager: true + + role_hierarchy: diff --git a/config/packages/web_profiler.yaml b/config/packages/web_profiler.yaml new file mode 100644 index 0000000..0eac3c9 --- /dev/null +++ b/config/packages/web_profiler.yaml @@ -0,0 +1,13 @@ +when@dev: + web_profiler: + toolbar: true + + framework: + profiler: + collect_serializer_data: true + +when@test: + framework: + profiler: + collect: false + collect_serializer_data: true diff --git a/config/routes/framework.yaml b/config/routes/framework.yaml new file mode 100644 index 0000000..bc1feac --- /dev/null +++ b/config/routes/framework.yaml @@ -0,0 +1,4 @@ +when@dev: + _errors: + resource: '@FrameworkBundle/Resources/config/routing/errors.php' + prefix: /_error diff --git a/config/routes/security.yaml b/config/routes/security.yaml new file mode 100644 index 0000000..f853be1 --- /dev/null +++ b/config/routes/security.yaml @@ -0,0 +1,3 @@ +_security_logout: + resource: security.route_loader.logout + type: service diff --git a/config/routes/web_profiler.yaml b/config/routes/web_profiler.yaml new file mode 100644 index 0000000..b3b7b4b --- /dev/null +++ b/config/routes/web_profiler.yaml @@ -0,0 +1,8 @@ +when@dev: + web_profiler_wdt: + resource: '@WebProfilerBundle/Resources/config/routing/wdt.php' + prefix: /_wdt + + web_profiler_profiler: + resource: '@WebProfilerBundle/Resources/config/routing/profiler.php' + prefix: /_profiler diff --git a/package-lock.json b/package-lock.json index cd8aec7..1ac4b30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "event-manager", + "name": "open-event-manager", "lockfileVersion": 3, "requires": true, "packages": { @@ -2120,7 +2120,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "devOptional": true }, "node_modules/async-limiter": { "version": "1.0.1", @@ -2364,6 +2364,16 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -4869,6 +4879,13 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7240,6 +7257,13 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "node_modules/nan": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", + "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", + "license": "MIT", + "optional": true + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7892,7 +7916,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "devOptional": true }, "node_modules/path-exists": { "version": "4.0.0", @@ -9135,7 +9159,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "devOptional": true }, "node_modules/renderkid": { "version": "2.0.5", @@ -11170,7 +11194,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=4", "yarn": "*" @@ -11327,7 +11351,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -11337,7 +11360,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -11348,7 +11370,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -11361,7 +11382,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -11371,7 +11391,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -11393,7 +11412,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -11407,7 +11425,6 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -11430,7 +11447,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -11446,7 +11462,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -11460,7 +11475,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -11478,7 +11492,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -11489,7 +11502,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -11502,7 +11514,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -11515,7 +11526,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -11528,7 +11538,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -11541,7 +11550,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "optional": true, "dependencies": { "arr-diff": "^4.0.0", @@ -11566,7 +11574,6 @@ "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, "optional": true, "dependencies": { "core-util-is": "~1.0.0", @@ -11582,7 +11589,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -11597,14 +11603,12 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, "optional": true }, "node_modules/watchpack-chokidar2/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "optional": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -11614,7 +11618,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", diff --git a/package.json b/package.json index a1a63d8..d8dde79 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,10 @@ "license": "UNLICENSED", "private": true, "scripts": { - "dev-server": "encore dev-server", - "dev": "encore dev", - "watch": "encore dev --watch", - "build": "encore production --progress" + "dev-server": "set NODE_OPTIONS=--openssl-legacy-provider && encore dev-server", + "dev": "set NODE_OPTIONS=--openssl-legacy-provider && encore dev", + "watch": "set NODE_OPTIONS=--openssl-legacy-provider && encore dev --watch", + "build": "set NODE_OPTIONS=--openssl-legacy-provider && encore production --progress" }, "dependencies": { "@fortawesome/fontawesome-free": "^5.15.2", diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 21f37a2..2dfa33c 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -31,6 +31,11 @@ + + + + + diff --git a/src/Controller/JoinController.php b/src/Controller/JoinController.php index 95b70cf..26bbd45 100644 --- a/src/Controller/JoinController.php +++ b/src/Controller/JoinController.php @@ -29,7 +29,7 @@ public function __construct(ParameterBagInterface $parameterBag) #[Route("/join/{slug}", name: "join_index")] #[Route("/join", name: "join_index_no_slug")] - public function index($slug = null, PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, HttpClientInterface $httpClient) + public function index(PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, $slug = null ) { $data = array(); $standort = $this->getDoctrine()->getRepository(Standort::class)->findOneBy(['slug' => $slug]); diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php deleted file mode 100644 index 6c20526..0000000 --- a/src/DataFixtures/AppFixtures.php +++ /dev/null @@ -1,17 +0,0 @@ -persist($product); - - $manager->flush(); - } -} diff --git a/src/DataFixtures/User.php b/src/DataFixtures/User.php index 8a7faf0..2d7ca44 100644 --- a/src/DataFixtures/User.php +++ b/src/DataFixtures/User.php @@ -7,7 +7,7 @@ class User extends Fixture { - public function load(ObjectManager $manager) + public function load(ObjectManager $manager): void { // $product = new Product(); // $manager->persist($product); diff --git a/src/Entity/UserBase.php b/src/Entity/UserBase.php index 5ea3c30..62fc6e4 100644 --- a/src/Entity/UserBase.php +++ b/src/Entity/UserBase.php @@ -96,9 +96,14 @@ public function getSalt() /** * @see UserInterface */ - public function eraseCredentials() + public function eraseCredentials(): void { // If you store any temporary, sensitive data on the user, clear it here // $this->plainPassword = null; } + + public function getUserIdentifier(): string + { + // TODO: Implement getUserIdentifier() method. + } } diff --git a/src/Kernel.php b/src/Kernel.php index 1cd0572..779cd1f 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -3,52 +3,9 @@ namespace App; use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait; -use Symfony\Component\Config\Loader\LoaderInterface; -use Symfony\Component\Config\Resource\FileResource; -use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Kernel as BaseKernel; -use Symfony\Component\Routing\RouteCollectionBuilder; class Kernel extends BaseKernel { use MicroKernelTrait; - - private const CONFIG_EXTS = '.{php,xml,yaml,yml}'; - - public function registerBundles(): iterable - { - $contents = require $this->getProjectDir().'/config/bundles.php'; - foreach ($contents as $class => $envs) { - if ($envs[$this->environment] ?? $envs['all'] ?? false) { - yield new $class(); - } - } - } - - public function getProjectDir(): string - { - return \dirname(__DIR__); - } - - protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void - { - $container->addResource(new FileResource($this->getProjectDir().'/config/bundles.php')); - $container->setParameter('container.dumper.inline_class_loader', \PHP_VERSION_ID < 70400 || $this->debug); - $container->setParameter('container.dumper.inline_factories', true); - $confDir = $this->getProjectDir().'/config'; - - $loader->load($confDir.'/{packages}/*'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{packages}/'.$this->environment.'/*'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{services}'.self::CONFIG_EXTS, 'glob'); - $loader->load($confDir.'/{services}_'.$this->environment.self::CONFIG_EXTS, 'glob'); - } - - protected function configureRoutes(RouteCollectionBuilder $routes): void - { - $confDir = $this->getProjectDir().'/config'; - - $routes->import($confDir.'/{routes}/'.$this->environment.'/*'.self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob'); - $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob'); - } } diff --git a/src/Security/KeycloakAuthenticator.php b/src/Security/KeycloakAuthenticator.php index ef18fca..e5ca296 100644 --- a/src/Security/KeycloakAuthenticator.php +++ b/src/Security/KeycloakAuthenticator.php @@ -191,7 +191,7 @@ public function onAuthenticationFailure(Request $request, AuthenticationExceptio * Called when authentication is needed, but it's not sent. * This redirects to the 'login'. */ - public function start(Request $request, AuthenticationException $authException = null) + public function start(Request $request, AuthenticationException $authException = null): Response { $targetUrl = $this->router->generate('login_keycloak'); return new RedirectResponse($targetUrl); diff --git a/src/Security/UserProvider.php b/src/Security/UserProvider.php index a8713c4..52a4c8f 100644 --- a/src/Security/UserProvider.php +++ b/src/Security/UserProvider.php @@ -62,7 +62,7 @@ public function loadUserByUsername($username) * @return UserInterface * */ - public function refreshUser(UserInterface $user) + public function refreshUser(UserInterface $user): UserInterface { if (!$user instanceof User) { throw new UnsupportedUserException( @@ -79,8 +79,13 @@ public function refreshUser(UserInterface $user) * * @return bool */ - public function supportsClass($class) + public function supportsClass($class): bool { return $class === 'App\Security\User'; } -} \ No newline at end of file + + public function loadUserByIdentifier(string $identifier): UserInterface + { + // TODO: Implement loadUserByIdentifier() method. + } +} diff --git a/symfony.lock b/symfony.lock index 85f16ad..af1f600 100644 --- a/symfony.lock +++ b/symfony.lock @@ -1,811 +1,323 @@ { - "bacon/bacon-qr-code": { - "version": "2.0.4" - }, "dama/doctrine-test-bundle": { - "version": "4.0", + "version": "8.6", "recipe": { "repo": "github.com/symfony/recipes-contrib", - "branch": "master", - "version": "4.0", - "ref": "56eaa387b5e48ebcc7c95a893b47dfa1ad51449c" + "branch": "main", + "version": "8.3", + "ref": "dfc51177476fb39d014ed89944cde53dc3326d23" }, "files": [ - "./config/packages/test/dama_doctrine_test_bundle.yaml" + "./config/packages/dama_doctrine_test_bundle.yaml" ] }, - "dasprid/enum": { - "version": "1.0.3" - }, - "doctrine/annotations": { - "version": "1.0", + "doctrine/deprecations": { + "version": "1.1", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", + "branch": "main", "version": "1.0", - "ref": "a2759dd6123694c8d901d0ec80006e044c2e6457" - }, - "files": [ - "./config/routes/annotations.yaml" - ] - }, - "doctrine/cache": { - "version": "1.10.0" - }, - "doctrine/collections": { - "version": "1.6.4" - }, - "doctrine/common": { - "version": "2.12.0" - }, - "doctrine/data-fixtures": { - "version": "1.4.4" - }, - "doctrine/dbal": { - "version": "2.10.2" - }, - "doctrine/deprecations": { - "version": "v0.5.3" + "ref": "87424683adc81d7dc305eefec1fced883084aab9" + } }, "doctrine/doctrine-bundle": { - "version": "2.0", + "version": "2.18", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "2.0", - "ref": "a9f2463b9f73efe74482f831f03a204a41328555" + "branch": "main", + "version": "2.13", + "ref": "620b57f496f2e599a6015a9fa222c2ee0a32adcb" }, "files": [ "./config/packages/doctrine.yaml", - "./config/packages/prod/doctrine.yaml", "./src/Entity/.gitignore", "./src/Repository/.gitignore" ] }, "doctrine/doctrine-fixtures-bundle": { - "version": "3.0", + "version": "3.7", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", + "branch": "main", "version": "3.0", - "ref": "e5b542d4ef47d8a003c91beb35650c76907f7e53" + "ref": "1f5514cfa15b947298df4d771e694e578d4c204d" }, "files": [ "./src/DataFixtures/AppFixtures.php" ] }, "doctrine/doctrine-migrations-bundle": { - "version": "1.2", + "version": "3.7", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "1.2", - "ref": "c1431086fec31f17fbcfe6d6d7e92059458facc1" + "branch": "main", + "version": "3.1", + "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" }, "files": [ "./config/packages/doctrine_migrations.yaml", - "./src/Migrations/.gitignore" + "./migrations/.gitignore" ] }, - "doctrine/event-manager": { - "version": "1.1.0" - }, - "doctrine/inflector": { - "version": "1.4.0" - }, - "doctrine/instantiator": { - "version": "1.3.0" - }, - "doctrine/lexer": { - "version": "1.2.0" - }, - "doctrine/migrations": { - "version": "2.2.1" - }, - "doctrine/orm": { - "version": "v2.7.2" - }, - "doctrine/persistence": { - "version": "1.3.7" - }, - "doctrine/sql-formatter": { - "version": "1.1.0" - }, - "dpolac/dictionary": { - "version": "v1.0.0" - }, - "dpolac/twig-lambda": { - "version": "v1.0.0" - }, - "egulias/email-validator": { - "version": "2.1.17" - }, - "eluceo/ical": { - "version": "0.16.1" - }, - "endroid/installer": { - "version": "1.3.3" - }, - "endroid/qr-code": { - "version": "4.3.5" - }, "endroid/qr-code-bundle": { - "version": "4.0.5" - }, - "erusev/parsedown": { - "version": "1.7.4" - }, - "ezyang/htmlpurifier": { - "version": "v4.13.0" - }, - "firebase/php-jwt": { - "version": "v4.0.0" - }, - "friendsofphp/proxy-manager-lts": { - "version": "v1.0.1" - }, - "guzzlehttp/guzzle": { - "version": "6.5.5" - }, - "guzzlehttp/promises": { - "version": "1.4.0" - }, - "guzzlehttp/psr7": { - "version": "1.7.0" + "version": "6.0.0" }, - "jms/i18n-routing-bundle": { - "version": "dev-master" + "h2invent/i18n-routing-bundle": { + "version": "3.2.5" }, "knpuniversity/oauth2-client-bundle": { - "version": "1.20", + "version": "2.20", "recipe": { "repo": "github.com/symfony/recipes-contrib", - "branch": "master", + "branch": "main", "version": "1.20", - "ref": "80acc9223a205cbf5d9828fd616c82a374d281dd" - }, - "files": [ - "./config/packages/knpu_oauth2_client.yaml" - ] - }, - "laminas/laminas-code": { - "version": "3.4.1" - }, - "laminas/laminas-escaper": { - "version": "2.6.1" - }, - "laminas/laminas-eventmanager": { - "version": "3.3.0" - }, - "laminas/laminas-zendframework-bridge": { - "version": "1.0.4" - }, - "league/oauth2-client": { - "version": "2.2.1" - }, - "lorenzo/pinky": { - "version": "1.0.5" - }, - "maennchen/zipstream-php": { - "version": "2.1.0" - }, - "markbaker/complex": { - "version": "2.0.0" - }, - "markbaker/matrix": { - "version": "2.1.2" - }, - "monolog/monolog": { - "version": "1.25.3" - }, - "myclabs/deep-copy": { - "version": "1.10.2" - }, - "myclabs/php-enum": { - "version": "1.8.0" - }, - "nikic/php-parser": { - "version": "v4.4.0" - }, - "ocramius/package-versions": { - "version": "1.5.1" - }, - "ocramius/proxy-manager": { - "version": "2.2.3" - }, - "phar-io/manifest": { - "version": "2.0.1" - }, - "phar-io/version": { - "version": "3.1.0" - }, - "php": { - "version": "7.4" - }, - "phpdocumentor/reflection-common": { - "version": "2.1.0" - }, - "phpdocumentor/reflection-docblock": { - "version": "5.1.0" - }, - "phpdocumentor/type-resolver": { - "version": "1.1.0" - }, - "phpoffice/phpspreadsheet": { - "version": "1.17.1" - }, - "phpspec/prophecy": { - "version": "1.13.0" - }, - "phpstan/phpdoc-parser": { - "version": "1.2.0" - }, - "phpunit/php-code-coverage": { - "version": "9.2.6" - }, - "phpunit/php-file-iterator": { - "version": "3.0.5" - }, - "phpunit/php-invoker": { - "version": "3.1.1" - }, - "phpunit/php-text-template": { - "version": "2.0.4" - }, - "phpunit/php-timer": { - "version": "5.0.3" + "ref": "1ff300d8c030f55c99219cc55050b97a695af3f6" + } }, "phpunit/phpunit": { - "version": "9.3", + "version": "11.5", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "9.3", - "ref": "a6249a6c4392e9169b87abf93225f7f9f59025e6" + "branch": "main", + "version": "11.1", + "ref": "1117deb12541f35793eec9fff7494d7aa12283fc" }, "files": [ "./.env.test", "./phpunit.xml.dist", - "./tests/bootstrap.php" + "./tests/bootstrap.php", + "./bin/phpunit" ] }, - "psr/cache": { - "version": "1.0.1" - }, - "psr/container": { - "version": "1.0.0" - }, - "psr/event-dispatcher": { - "version": "1.0.0" - }, - "psr/http-client": { - "version": "1.0.1" - }, - "psr/http-factory": { - "version": "1.0.1" - }, - "psr/http-message": { - "version": "1.0.1" - }, - "psr/link": { - "version": "1.0.0" - }, - "psr/log": { - "version": "1.1.3" - }, - "psr/simple-cache": { - "version": "1.0.1" - }, - "ralouphie/getallheaders": { - "version": "3.0.3" - }, - "sebastian/cli-parser": { - "version": "1.0.1" - }, - "sebastian/code-unit": { - "version": "1.0.8" - }, - "sebastian/code-unit-reverse-lookup": { - "version": "2.0.3" - }, - "sebastian/comparator": { - "version": "4.0.6" - }, - "sebastian/complexity": { - "version": "2.0.2" - }, - "sebastian/diff": { - "version": "4.0.4" - }, - "sebastian/environment": { - "version": "5.1.3" - }, - "sebastian/exporter": { - "version": "4.0.3" - }, - "sebastian/global-state": { - "version": "5.0.3" - }, - "sebastian/lines-of-code": { - "version": "1.0.3" - }, - "sebastian/object-enumerator": { - "version": "4.0.4" - }, - "sebastian/object-reflector": { - "version": "2.0.4" - }, - "sebastian/recursion-context": { - "version": "4.0.4" - }, - "sebastian/resource-operations": { - "version": "3.0.3" - }, - "sebastian/type": { - "version": "2.3.4" - }, - "sebastian/version": { - "version": "3.0.2" - }, - "sensio/framework-extra-bundle": { - "version": "5.2", - "recipe": { - "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "5.2", - "ref": "fb7e19da7f013d0d422fa9bce16f5c510e27609b" - }, - "files": [ - "./config/packages/sensio_framework_extra.yaml" - ] - }, - "stevenmaguire/oauth2-keycloak": { - "version": "2.2.1" - }, - "swiftmailer/swiftmailer": { - "version": "v6.2.3" - }, "symfony/apache-pack": { "version": "1.0", "recipe": { "repo": "github.com/symfony/recipes-contrib", - "branch": "master", + "branch": "main", "version": "1.0", - "ref": "71599f5b0fdeeeec0fb90e9b17c85e6f5e1350c1" + "ref": "5d454ec6cc4c700ed3d963f3803e1d427d9669fb" }, "files": [ "./public/.htaccess" ] }, - "symfony/asset": { - "version": "v4.4.8" - }, - "symfony/browser-kit": { - "version": "v4.4.8" - }, - "symfony/cache": { - "version": "v4.4.8" - }, - "symfony/cache-contracts": { - "version": "v2.0.1" - }, - "symfony/config": { - "version": "v4.4.8" - }, "symfony/console": { - "version": "4.4", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.4", - "ref": "ea8c0eda34fda57e7d5cd8cbd889e2a387e3472c" + "branch": "main", + "version": "5.3", + "ref": "1781ff40d8a17d87cf53f8d4cf0c8346ed2bb461" }, "files": [ - "./bin/console", - "./config/bootstrap.php" + "./bin/console" ] }, - "symfony/css-selector": { - "version": "v4.4.8" - }, "symfony/debug-bundle": { - "version": "4.1", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.1", - "ref": "f8863cbad2f2e58c4b65fa1eac892ab189971bea" + "branch": "main", + "version": "5.3", + "ref": "5aa8aa48234c8eb6dbdd7b3cd5d791485d2cec4b" }, "files": [ - "./config/packages/dev/debug.yaml" + "./config/packages/debug.yaml" ] }, - "symfony/dependency-injection": { - "version": "v4.4.8" - }, - "symfony/deprecation-contracts": { - "version": "v2.2.0" - }, - "symfony/doctrine-bridge": { - "version": "v4.4.8" - }, - "symfony/dom-crawler": { - "version": "v4.4.8" - }, - "symfony/dotenv": { - "version": "v4.4.8" - }, - "symfony/error-handler": { - "version": "v4.4.8" - }, - "symfony/event-dispatcher": { - "version": "v4.4.8" - }, - "symfony/event-dispatcher-contracts": { - "version": "v1.1.7" - }, - "symfony/expression-language": { - "version": "v4.4.8" - }, - "symfony/filesystem": { - "version": "v4.4.8" - }, - "symfony/finder": { - "version": "v4.4.8" - }, "symfony/flex": { - "version": "1.0", + "version": "2.10", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "1.0", - "ref": "c0eeb50665f0f77226616b6038a9b06c03752d8e" + "branch": "main", + "version": "2.4", + "ref": "52e9754527a15e2b79d9a610f98185a1fe46622a" }, "files": [ - "./.env" + "./.env", + "./.env.dev" ] }, "symfony/form": { - "version": "v4.4.8" + "version": "7.4", + "recipe": { + "repo": "github.com/symfony/recipes", + "branch": "main", + "version": "7.2", + "ref": "7d86a6723f4a623f59e2bf966b6aad2fc461d36b" + }, + "files": [ + "./config/packages/csrf.yaml" + ] }, "symfony/framework-bundle": { - "version": "4.4", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.4", - "ref": "36d3075b2b8e0c4de0e82356a86e4c4a4eb6681b" + "branch": "main", + "version": "7.4", + "ref": "09f6e081c763a206802674ce0cb34a022f0ffc6d" }, "files": [ - "./config/bootstrap.php", "./config/packages/cache.yaml", "./config/packages/framework.yaml", - "./config/packages/test/framework.yaml", - "./config/routes/dev/framework.yaml", + "./config/preload.php", + "./config/routes/framework.yaml", "./config/services.yaml", "./public/index.php", "./src/Controller/.gitignore", - "./src/Kernel.php" + "./src/Kernel.php", + "./.editorconfig" ] }, - "symfony/http-client": { - "version": "v4.4.8" - }, - "symfony/http-client-contracts": { - "version": "v2.0.1" - }, - "symfony/http-foundation": { - "version": "v4.4.8" - }, - "symfony/http-kernel": { - "version": "v4.4.8" - }, - "symfony/intl": { - "version": "v4.4.8" - }, "symfony/mailer": { - "version": "4.3", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", + "branch": "main", "version": "4.3", - "ref": "15658c2a0176cda2e7dba66276a2030b52bd81b2" + "ref": "09051cfde49476e3c12cd3a0e44289ace1c75a4f" }, "files": [ "./config/packages/mailer.yaml" ] }, "symfony/maker-bundle": { - "version": "1.0", + "version": "1.66", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", + "branch": "main", "version": "1.0", "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" } }, - "symfony/mime": { - "version": "v4.4.8" - }, - "symfony/monolog-bridge": { - "version": "v4.4.8" - }, "symfony/monolog-bundle": { - "version": "3.3", + "version": "4.0", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "3.3", - "ref": "d7249f7d560f6736115eee1851d02a65826f0a56" + "branch": "main", + "version": "3.7", + "ref": "1b9efb10c54cb51c713a9391c9300ff8bceda459" }, "files": [ - "./config/packages/dev/monolog.yaml", - "./config/packages/prod/deprecations.yaml", - "./config/packages/prod/monolog.yaml", - "./config/packages/test/monolog.yaml" + "./config/packages/monolog.yaml" ] }, - "symfony/options-resolver": { - "version": "v4.4.8" - }, - "symfony/password-hasher": { - "version": "v5.3.3" - }, "symfony/phpunit-bridge": { - "version": "5.1", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "5.1", - "ref": "cb82a2355ec62fef0e7028ac969fe86fa722feb8" - }, - "files": [ - "./.env.test", - "./bin/phpunit", - "./phpunit.xml.dist", - "./tests/bootstrap.php" - ] - }, - "symfony/polyfill-intl-grapheme": { - "version": "v1.22.0" - }, - "symfony/polyfill-intl-icu": { - "version": "v1.16.0" - }, - "symfony/polyfill-intl-idn": { - "version": "v1.16.0" - }, - "symfony/polyfill-intl-normalizer": { - "version": "v1.16.0" - }, - "symfony/polyfill-mbstring": { - "version": "v1.16.0" - }, - "symfony/polyfill-php72": { - "version": "v1.16.0" - }, - "symfony/polyfill-php73": { - "version": "v1.16.0" - }, - "symfony/polyfill-php80": { - "version": "v1.17.0" - }, - "symfony/polyfill-php81": { - "version": "v1.23.0" - }, - "symfony/process": { - "version": "v4.4.8" - }, - "symfony/property-access": { - "version": "v4.4.8" + "branch": "main", + "version": "7.3", + "ref": "dc13fec96bd527bd399c3c01f0aab915c67fd544" + } }, "symfony/property-info": { - "version": "v4.4.8" - }, - "symfony/proxy-manager-bridge": { - "version": "v4.4.18" - }, - "symfony/routing": { - "version": "4.2", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.2", - "ref": "683dcb08707ba8d41b7e34adb0344bfd68d248a7" + "branch": "main", + "version": "7.3", + "ref": "dae70df71978ae9226ae915ffd5fad817f5ca1f7" }, "files": [ - "./config/packages/prod/routing.yaml", - "./config/packages/routing.yaml", - "./config/routes.yaml" + "./config/packages/property_info.yaml" ] }, - "symfony/security-bundle": { - "version": "4.4", + "symfony/routing": { + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.4", - "ref": "7b4408dc203049666fe23fabed23cbadc6d8440f" + "branch": "main", + "version": "7.4", + "ref": "bc94c4fd86f393f3ab3947c18b830ea343e51ded" }, "files": [ - "./config/packages/security.yaml" + "./config/packages/routing.yaml", + "./config/routes.yaml" ] }, - "symfony/security-core": { - "version": "v4.4.8" - }, - "symfony/security-csrf": { - "version": "v4.4.8" - }, - "symfony/security-guard": { - "version": "v4.4.8" - }, - "symfony/security-http": { - "version": "v4.4.8" - }, - "symfony/serializer": { - "version": "v4.4.8" - }, - "symfony/service-contracts": { - "version": "v2.0.1" - }, - "symfony/stopwatch": { - "version": "v4.4.8" - }, - "symfony/string": { - "version": "v5.1.10" - }, - "symfony/swiftmailer-bundle": { - "version": "2.5", + "symfony/security-bundle": { + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "2.5", - "ref": "ae4d22af30bbd484506bc1817c5a3ef72c855b93" + "branch": "main", + "version": "7.4", + "ref": "c42fee7802181cdd50f61b8622715829f5d2335c" }, "files": [ - "./config/packages/dev/swiftmailer.yaml", - "./config/packages/swiftmailer.yaml", - "./config/packages/test/swiftmailer.yaml" + "./config/packages/security.yaml", + "./config/routes/security.yaml" ] }, - "symfony/templating": { - "version": "v4.4.8" - }, "symfony/translation": { - "version": "3.3", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "3.3", - "ref": "2ad9d2545bce8ca1a863e50e92141f0b9d87ffcd" + "branch": "main", + "version": "6.3", + "ref": "620a1b84865ceb2ba304c8f8bf2a185fbf32a843" }, "files": [ "./config/packages/translation.yaml", "./translations/.gitignore" ] }, - "symfony/translation-contracts": { - "version": "v2.0.1" - }, - "symfony/twig-bridge": { - "version": "v4.4.8" - }, "symfony/twig-bundle": { - "version": "4.4", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.4", - "ref": "15a41bbd66a1323d09824a189b485c126bbefa51" + "branch": "main", + "version": "6.4", + "ref": "cab5fd2a13a45c266d45a7d9337e28dee6272877" }, "files": [ - "./config/packages/test/twig.yaml", "./config/packages/twig.yaml", "./templates/base.html.twig" ] }, "symfony/validator": { - "version": "4.3", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "4.3", - "ref": "d902da3e4952f18d3bf05aab29512eb61cabd869" + "branch": "main", + "version": "7.0", + "ref": "8c1c4e28d26a124b0bb273f537ca8ce443472bfd" }, "files": [ - "./config/packages/test/validator.yaml", "./config/packages/validator.yaml" ] }, - "symfony/var-dumper": { - "version": "v4.4.8" - }, - "symfony/var-exporter": { - "version": "v4.4.8" - }, - "symfony/web-link": { - "version": "v4.4.8" - }, "symfony/web-profiler-bundle": { - "version": "3.3", + "version": "7.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "3.3", - "ref": "6bdfa1a95f6b2e677ab985cd1af2eae35d62e0f6" + "branch": "main", + "version": "7.3", + "ref": "a363460c1b0b4a4d0242f2ce1a843ca0f6ac9026" }, "files": [ - "./config/packages/dev/web_profiler.yaml", - "./config/packages/test/web_profiler.yaml", - "./config/routes/dev/web_profiler.yaml" + "./config/packages/web_profiler.yaml", + "./config/routes/web_profiler.yaml" ] }, - "symfony/web-server-bundle": { - "version": "3.3", - "recipe": { - "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "3.3", - "ref": "dae9b39fd6717970be7601101ce5aa960bf53d9a" - } - }, "symfony/webpack-encore-bundle": { - "version": "1.6", + "version": "2.4", "recipe": { "repo": "github.com/symfony/recipes", - "branch": "master", - "version": "1.6", - "ref": "69e1d805ad95964088bd510c05995e87dc391564" + "branch": "main", + "version": "2.0", + "ref": "719f6110345acb6495e496601fc1b4977d7102b3" }, "files": [ - "./assets/css/app.css", - "./assets/js/app.js", - "./config/packages/assets.yaml", - "./config/packages/prod/webpack_encore.yaml", - "./config/packages/test/webpack_encore.yaml", + "./assets/app.js", + "./assets/styles/app.css", "./config/packages/webpack_encore.yaml", "./package.json", "./webpack.config.js" ] }, - "symfony/yaml": { - "version": "v4.4.8" - }, - "theseer/tokenizer": { - "version": "1.2.0" - }, - "tijsverkoyen/css-to-inline-styles": { - "version": "2.2.2" - }, - "twig/cssinliner-extra": { - "version": "v3.0.3" - }, "twig/extra-bundle": { - "version": "v3.0.3" - }, - "twig/inky-extra": { - "version": "v3.0.3" - }, - "twig/intl-extra": { - "version": "v3.2.1" - }, - "twig/markdown-extra": { - "version": "v3.3.0" - }, - "twig/twig": { - "version": "v3.0.3" - }, - "webmozart/assert": { - "version": "1.8.0" - }, - "zendframework/zend-code": { - "version": "3.4.1" - }, - "zendframework/zend-escaper": { - "version": "2.6.1" - }, - "zendframework/zend-eventmanager": { - "version": "3.2.1" + "version": "v3.23.0" } } diff --git a/templates/base.html.twig b/templates/base.html.twig index b985ca6..baf3d42 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -54,6 +54,7 @@ {{ include('base/__script.html.twig') }} {% block javascripts %}{% endblock %} + {{ encore_entry_script_tags('app') }} From 6309770c85a24392f0a423111ba4c28a9fa88b2c Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 00:23:44 +0100 Subject: [PATCH 08/12] *makw update working --- docker-compose.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0c756dc..6014712 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,13 +18,7 @@ services: volumes: - .:/var/www/html:rw - composer_cache:/tmp/composer - command: > - sh -lc ' - if [ ! -f /var/www/html/vendor/autoload.php ]; then - composer install --working-dir=/var/www/html --no-interaction --prefer-dist || composer update --working-dir=/var/www/html --with-all-dependencies --no-interaction --prefer-dist; - fi; - apache2-foreground - ' + db: image: mysql:8.0 From fece4fb76ebe9330e25c3962908c5974807003f7 Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 00:25:34 +0100 Subject: [PATCH 09/12] *makw update working --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 6014712..f213896 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,9 @@ services: volumes: - .:/var/www/html:rw - composer_cache:/tmp/composer + command: > + + composer install --working-dir=/var/www/html --no-interaction --prefer-dist db: From 9eddf1b20bbf520257f24083e6eace3aa1bc58a1 Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 00:27:17 +0100 Subject: [PATCH 10/12] *makw update working --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index f213896..563c343 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,7 @@ services: environment: APACHE_DOCUMENT_ROOT: public/ PHP_EXTENSION_XDEBUG: 1 + PHP_EXTENSION_GD: 1 PHP_INI_MEMORY_LIMIT: 1G DATABASE_URL: mysql://app:app@db:3306/open_event_manager?serverVersion=8.0&charset=utf8mb4 APP_ENV: dev From e8818ccd0cf272d0f8b0f2ba613ae70c643fc06a Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 17:26:52 +0100 Subject: [PATCH 11/12] * refactor index --- composer.json | 4 +- composer.lock | 85 +- config/reference.php | 1687 +++++++++++++++++++++ public/index.php | 26 +- src/Controller/AdHocMeetingController.php | 5 +- src/Controller/CronController.php | 1 - src/Controller/DashboardController.php | 29 +- src/Entity/Rooms.php | 36 - src/Entity/UserBase.php | 6 +- src/Repository/RoomsRepository.php | 18 + 10 files changed, 1808 insertions(+), 89 deletions(-) create mode 100644 config/reference.php diff --git a/composer.json b/composer.json index ab7f5c7..bddcd1c 100644 --- a/composer.json +++ b/composer.json @@ -32,6 +32,7 @@ "symfony/process": "7.4.*", "symfony/property-access": "7.4.*", "symfony/property-info": "7.4.*", + "symfony/runtime": "7.4.*", "symfony/security-bundle": "7.4.*", "symfony/serializer": "7.4.*", "symfony/translation": "7.4.*", @@ -66,7 +67,8 @@ "sort-packages": true, "allow-plugins": { "endroid/installer": true, - "symfony/flex": true + "symfony/flex": true, + "symfony/runtime": true } }, "autoload": { diff --git a/composer.lock b/composer.lock index 649a8be..0ea9690 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": "7bc527e5b278a0f3926834ec3377502c", + "content-hash": "121d4db5efc02e8ba70d35b1c6b5b447", "packages": [ { "name": "bacon/bacon-qr-code", @@ -7265,6 +7265,89 @@ ], "time": "2026-01-12T12:19:02+00:00" }, + { + "name": "symfony/runtime", + "version": "v7.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/runtime.git", + "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/runtime/zipball/876f902a6cb6b26c003de244188c06b2ba1c172f", + "reference": "876f902a6cb6b26c003de244188c06b2ba1c172f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": ">=8.2" + }, + "conflict": { + "symfony/dotenv": "<6.4" + }, + "require-dev": { + "composer/composer": "^2.6", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dotenv": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Runtime\\": "", + "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Enables decoupling PHP applications from global state", + "homepage": "https://symfony.com", + "keywords": [ + "runtime" + ], + "support": { + "source": "https://github.com/symfony/runtime/tree/v7.4.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-05T14:04:53+00:00" + }, { "name": "symfony/security-bundle", "version": "v7.4.4", diff --git a/config/reference.php b/config/reference.php new file mode 100644 index 0000000..f24df8a --- /dev/null +++ b/config/reference.php @@ -0,0 +1,1687 @@ + [ + * 'App\\' => [ + * 'resource' => '../src/', + * ], + * ], + * ]); + * ``` + * + * @psalm-type ImportsConfig = list + * @psalm-type ParametersConfig = array|Param|null>|Param|null> + * @psalm-type ArgumentsType = list|array + * @psalm-type CallType = array|array{0:string, 1?:ArgumentsType, 2?:bool}|array{method:string, arguments?:ArgumentsType, returns_clone?:bool} + * @psalm-type TagsType = list>> // arrays inside the list must have only one element, with the tag name as the key + * @psalm-type CallbackType = string|array{0:string|ReferenceConfigurator,1:string}|\Closure|ReferenceConfigurator|ExpressionConfigurator + * @psalm-type DeprecationType = array{package: string, version: string, message?: string} + * @psalm-type DefaultsType = array{ + * public?: bool, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * } + * @psalm-type InstanceofType = array{ + * shared?: bool, + * lazy?: bool|string, + * public?: bool, + * properties?: array, + * configurator?: CallbackType, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * bind?: array, + * constructor?: string, + * } + * @psalm-type DefinitionType = array{ + * class?: string, + * file?: string, + * parent?: string, + * shared?: bool, + * synthetic?: bool, + * lazy?: bool|string, + * public?: bool, + * abstract?: bool, + * deprecated?: DeprecationType, + * factory?: CallbackType, + * configurator?: CallbackType, + * arguments?: ArgumentsType, + * properties?: array, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * decorates?: string, + * decoration_inner_name?: string, + * decoration_priority?: int, + * decoration_on_invalid?: 'exception'|'ignore'|null, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * constructor?: string, + * from_callable?: CallbackType, + * } + * @psalm-type AliasType = string|array{ + * alias: string, + * public?: bool, + * deprecated?: DeprecationType, + * } + * @psalm-type PrototypeType = array{ + * resource: string, + * namespace?: string, + * exclude?: string|list, + * parent?: string, + * shared?: bool, + * lazy?: bool|string, + * public?: bool, + * abstract?: bool, + * deprecated?: DeprecationType, + * factory?: CallbackType, + * arguments?: ArgumentsType, + * properties?: array, + * configurator?: CallbackType, + * calls?: list, + * tags?: TagsType, + * resource_tags?: TagsType, + * autowire?: bool, + * autoconfigure?: bool, + * bind?: array, + * constructor?: string, + * } + * @psalm-type StackType = array{ + * stack: list>, + * public?: bool, + * deprecated?: DeprecationType, + * } + * @psalm-type ServicesConfig = array{ + * _defaults?: DefaultsType, + * _instanceof?: InstanceofType, + * ... + * } + * @psalm-type ExtensionType = array + * @psalm-type FrameworkConfig = array{ + * secret?: scalar|Param|null, + * http_method_override?: bool|Param, // Set true to enable support for the '_method' request parameter to determine the intended HTTP method on POST requests. // Default: false + * allowed_http_method_override?: list|null, + * trust_x_sendfile_type_header?: scalar|Param|null, // Set true to enable support for xsendfile in binary file responses. // Default: "%env(bool:default::SYMFONY_TRUST_X_SENDFILE_TYPE_HEADER)%" + * ide?: scalar|Param|null, // Default: "%env(default::SYMFONY_IDE)%" + * test?: bool|Param, + * default_locale?: scalar|Param|null, // Default: "en" + * set_locale_from_accept_language?: bool|Param, // Whether to use the Accept-Language HTTP header to set the Request locale (only when the "_locale" request attribute is not passed). // Default: false + * set_content_language_from_locale?: bool|Param, // Whether to set the Content-Language HTTP header on the Response using the Request locale. // Default: false + * enabled_locales?: list, + * trusted_hosts?: list, + * trusted_proxies?: mixed, // Default: ["%env(default::SYMFONY_TRUSTED_PROXIES)%"] + * trusted_headers?: list, + * error_controller?: scalar|Param|null, // Default: "error_controller" + * handle_all_throwables?: bool|Param, // HttpKernel will handle all kinds of \Throwable. // Default: true + * csrf_protection?: bool|array{ + * enabled?: scalar|Param|null, // Default: null + * stateless_token_ids?: list, + * check_header?: scalar|Param|null, // Whether to check the CSRF token in a header in addition to a cookie when using stateless protection. // Default: false + * cookie_name?: scalar|Param|null, // The name of the cookie to use when using stateless protection. // Default: "csrf-token" + * }, + * form?: bool|array{ // Form configuration + * enabled?: bool|Param, // Default: true + * csrf_protection?: bool|array{ + * enabled?: scalar|Param|null, // Default: null + * token_id?: scalar|Param|null, // Default: null + * field_name?: scalar|Param|null, // Default: "_token" + * field_attr?: array, + * }, + * }, + * http_cache?: bool|array{ // HTTP cache configuration + * enabled?: bool|Param, // Default: false + * debug?: bool|Param, // Default: "%kernel.debug%" + * trace_level?: "none"|"short"|"full"|Param, + * trace_header?: scalar|Param|null, + * default_ttl?: int|Param, + * private_headers?: list, + * skip_response_headers?: list, + * allow_reload?: bool|Param, + * allow_revalidate?: bool|Param, + * stale_while_revalidate?: int|Param, + * stale_if_error?: int|Param, + * terminate_on_cache_hit?: bool|Param, + * }, + * esi?: bool|array{ // ESI configuration + * enabled?: bool|Param, // Default: false + * }, + * ssi?: bool|array{ // SSI configuration + * enabled?: bool|Param, // Default: false + * }, + * fragments?: bool|array{ // Fragments configuration + * enabled?: bool|Param, // Default: false + * hinclude_default_template?: scalar|Param|null, // Default: null + * path?: scalar|Param|null, // Default: "/_fragment" + * }, + * profiler?: bool|array{ // Profiler configuration + * enabled?: bool|Param, // Default: false + * collect?: bool|Param, // Default: true + * collect_parameter?: scalar|Param|null, // The name of the parameter to use to enable or disable collection on a per request basis. // Default: null + * only_exceptions?: bool|Param, // Default: false + * only_main_requests?: bool|Param, // Default: false + * dsn?: scalar|Param|null, // Default: "file:%kernel.cache_dir%/profiler" + * collect_serializer_data?: bool|Param, // Enables the serializer data collector and profiler panel. // Default: false + * }, + * workflows?: bool|array{ + * enabled?: bool|Param, // Default: false + * workflows?: array, + * definition_validators?: list, + * support_strategy?: scalar|Param|null, + * initial_marking?: list, + * events_to_dispatch?: list|null, + * places?: list, + * }>, + * transitions: list, + * to?: list, + * weight?: int|Param, // Default: 1 + * metadata?: list, + * }>, + * metadata?: list, + * }>, + * }, + * router?: bool|array{ // Router configuration + * enabled?: bool|Param, // Default: false + * resource: scalar|Param|null, + * type?: scalar|Param|null, + * cache_dir?: scalar|Param|null, // Deprecated: Setting the "framework.router.cache_dir.cache_dir" configuration option is deprecated. It will be removed in version 8.0. // Default: "%kernel.build_dir%" + * default_uri?: scalar|Param|null, // The default URI used to generate URLs in a non-HTTP context. // Default: null + * http_port?: scalar|Param|null, // Default: 80 + * https_port?: scalar|Param|null, // Default: 443 + * strict_requirements?: scalar|Param|null, // set to true to throw an exception when a parameter does not match the requirements set to false to disable exceptions when a parameter does not match the requirements (and return null instead) set to null to disable parameter checks against requirements 'true' is the preferred configuration in development mode, while 'false' or 'null' might be preferred in production // Default: true + * utf8?: bool|Param, // Default: true + * }, + * session?: bool|array{ // Session configuration + * enabled?: bool|Param, // Default: false + * storage_factory_id?: scalar|Param|null, // Default: "session.storage.factory.native" + * handler_id?: scalar|Param|null, // Defaults to using the native session handler, or to the native *file* session handler if "save_path" is not null. + * name?: scalar|Param|null, + * cookie_lifetime?: scalar|Param|null, + * cookie_path?: scalar|Param|null, + * cookie_domain?: scalar|Param|null, + * cookie_secure?: true|false|"auto"|Param, // Default: "auto" + * cookie_httponly?: bool|Param, // Default: true + * cookie_samesite?: null|"lax"|"strict"|"none"|Param, // Default: "lax" + * use_cookies?: bool|Param, + * gc_divisor?: scalar|Param|null, + * gc_probability?: scalar|Param|null, + * gc_maxlifetime?: scalar|Param|null, + * save_path?: scalar|Param|null, // Defaults to "%kernel.cache_dir%/sessions" if the "handler_id" option is not null. + * metadata_update_threshold?: int|Param, // Seconds to wait between 2 session metadata updates. // Default: 0 + * sid_length?: int|Param, // Deprecated: Setting the "framework.session.sid_length.sid_length" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. + * sid_bits_per_character?: int|Param, // Deprecated: Setting the "framework.session.sid_bits_per_character.sid_bits_per_character" configuration option is deprecated. It will be removed in version 8.0. No alternative is provided as PHP 8.4 has deprecated the related option. + * }, + * request?: bool|array{ // Request configuration + * enabled?: bool|Param, // Default: false + * formats?: array>, + * }, + * assets?: bool|array{ // Assets configuration + * enabled?: bool|Param, // Default: true + * strict_mode?: bool|Param, // Throw an exception if an entry is missing from the manifest.json. // Default: false + * version_strategy?: scalar|Param|null, // Default: null + * version?: scalar|Param|null, // Default: null + * version_format?: scalar|Param|null, // Default: "%%s?%%s" + * json_manifest_path?: scalar|Param|null, // Default: null + * base_path?: scalar|Param|null, // Default: "" + * base_urls?: list, + * packages?: array, + * }>, + * }, + * asset_mapper?: bool|array{ // Asset Mapper configuration + * enabled?: bool|Param, // Default: false + * paths?: array, + * excluded_patterns?: list, + * exclude_dotfiles?: bool|Param, // If true, any files starting with "." will be excluded from the asset mapper. // Default: true + * server?: bool|Param, // If true, a "dev server" will return the assets from the public directory (true in "debug" mode only by default). // Default: true + * public_prefix?: scalar|Param|null, // The public path where the assets will be written to (and served from when "server" is true). // Default: "/assets/" + * missing_import_mode?: "strict"|"warn"|"ignore"|Param, // Behavior if an asset cannot be found when imported from JavaScript or CSS files - e.g. "import './non-existent.js'". "strict" means an exception is thrown, "warn" means a warning is logged, "ignore" means the import is left as-is. // Default: "warn" + * extensions?: array, + * importmap_path?: scalar|Param|null, // The path of the importmap.php file. // Default: "%kernel.project_dir%/importmap.php" + * importmap_polyfill?: scalar|Param|null, // The importmap name that will be used to load the polyfill. Set to false to disable. // Default: "es-module-shims" + * importmap_script_attributes?: array, + * vendor_dir?: scalar|Param|null, // The directory to store JavaScript vendors. // Default: "%kernel.project_dir%/assets/vendor" + * precompress?: bool|array{ // Precompress assets with Brotli, Zstandard and gzip. + * enabled?: bool|Param, // Default: false + * formats?: list, + * extensions?: list, + * }, + * }, + * translator?: bool|array{ // Translator configuration + * enabled?: bool|Param, // Default: true + * fallbacks?: list, + * logging?: bool|Param, // Default: false + * formatter?: scalar|Param|null, // Default: "translator.formatter.default" + * cache_dir?: scalar|Param|null, // Default: "%kernel.cache_dir%/translations" + * default_path?: scalar|Param|null, // The default path used to load translations. // Default: "%kernel.project_dir%/translations" + * paths?: list, + * pseudo_localization?: bool|array{ + * enabled?: bool|Param, // Default: false + * accents?: bool|Param, // Default: true + * expansion_factor?: float|Param, // Default: 1.0 + * brackets?: bool|Param, // Default: true + * parse_html?: bool|Param, // Default: false + * localizable_html_attributes?: list, + * }, + * providers?: array, + * locales?: list, + * }>, + * globals?: array, + * domain?: string|Param, + * }>, + * }, + * validation?: bool|array{ // Validation configuration + * enabled?: bool|Param, // Default: true + * cache?: scalar|Param|null, // Deprecated: Setting the "framework.validation.cache.cache" configuration option is deprecated. It will be removed in version 8.0. + * enable_attributes?: bool|Param, // Default: true + * static_method?: list, + * translation_domain?: scalar|Param|null, // Default: "validators" + * email_validation_mode?: "html5"|"html5-allow-no-tld"|"strict"|"loose"|Param, // Default: "html5" + * mapping?: array{ + * paths?: list, + * }, + * not_compromised_password?: bool|array{ + * enabled?: bool|Param, // When disabled, compromised passwords will be accepted as valid. // Default: true + * endpoint?: scalar|Param|null, // API endpoint for the NotCompromisedPassword Validator. // Default: null + * }, + * disable_translation?: bool|Param, // Default: false + * auto_mapping?: array, + * }>, + * }, + * annotations?: bool|array{ + * enabled?: bool|Param, // Default: false + * }, + * serializer?: bool|array{ // Serializer configuration + * enabled?: bool|Param, // Default: true + * enable_attributes?: bool|Param, // Default: true + * name_converter?: scalar|Param|null, + * circular_reference_handler?: scalar|Param|null, + * max_depth_handler?: scalar|Param|null, + * mapping?: array{ + * paths?: list, + * }, + * default_context?: list, + * named_serializers?: array, + * include_built_in_normalizers?: bool|Param, // Whether to include the built-in normalizers // Default: true + * include_built_in_encoders?: bool|Param, // Whether to include the built-in encoders // Default: true + * }>, + * }, + * property_access?: bool|array{ // Property access configuration + * enabled?: bool|Param, // Default: true + * magic_call?: bool|Param, // Default: false + * magic_get?: bool|Param, // Default: true + * magic_set?: bool|Param, // Default: true + * throw_exception_on_invalid_index?: bool|Param, // Default: false + * throw_exception_on_invalid_property_path?: bool|Param, // Default: true + * }, + * type_info?: bool|array{ // Type info configuration + * enabled?: bool|Param, // Default: true + * aliases?: array, + * }, + * property_info?: bool|array{ // Property info configuration + * enabled?: bool|Param, // Default: true + * with_constructor_extractor?: bool|Param, // Registers the constructor extractor. + * }, + * cache?: array{ // Cache configuration + * prefix_seed?: scalar|Param|null, // Used to namespace cache keys when using several apps with the same shared backend. // Default: "_%kernel.project_dir%.%kernel.container_class%" + * app?: scalar|Param|null, // App related cache pools configuration. // Default: "cache.adapter.filesystem" + * system?: scalar|Param|null, // System related cache pools configuration. // Default: "cache.adapter.system" + * directory?: scalar|Param|null, // Default: "%kernel.share_dir%/pools/app" + * default_psr6_provider?: scalar|Param|null, + * default_redis_provider?: scalar|Param|null, // Default: "redis://localhost" + * default_valkey_provider?: scalar|Param|null, // Default: "valkey://localhost" + * default_memcached_provider?: scalar|Param|null, // Default: "memcached://localhost" + * default_doctrine_dbal_provider?: scalar|Param|null, // Default: "database_connection" + * default_pdo_provider?: scalar|Param|null, // Default: null + * pools?: array, + * tags?: scalar|Param|null, // Default: null + * public?: bool|Param, // Default: false + * default_lifetime?: scalar|Param|null, // Default lifetime of the pool. + * provider?: scalar|Param|null, // Overwrite the setting from the default provider for this adapter. + * early_expiration_message_bus?: scalar|Param|null, + * clearer?: scalar|Param|null, + * }>, + * }, + * php_errors?: array{ // PHP errors handling configuration + * log?: mixed, // Use the application logger instead of the PHP logger for logging PHP errors. // Default: true + * throw?: bool|Param, // Throw PHP errors as \ErrorException instances. // Default: true + * }, + * exceptions?: array, + * web_link?: bool|array{ // Web links configuration + * enabled?: bool|Param, // Default: true + * }, + * lock?: bool|string|array{ // Lock configuration + * enabled?: bool|Param, // Default: false + * resources?: array>, + * }, + * semaphore?: bool|string|array{ // Semaphore configuration + * enabled?: bool|Param, // Default: false + * resources?: array, + * }, + * messenger?: bool|array{ // Messenger configuration + * enabled?: bool|Param, // Default: false + * routing?: array, + * }>, + * serializer?: array{ + * default_serializer?: scalar|Param|null, // Service id to use as the default serializer for the transports. // Default: "messenger.transport.native_php_serializer" + * symfony_serializer?: array{ + * format?: scalar|Param|null, // Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default). // Default: "json" + * context?: array, + * }, + * }, + * transports?: array, + * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null + * retry_strategy?: string|array{ + * service?: scalar|Param|null, // Service id to override the retry strategy entirely. // Default: null + * max_retries?: int|Param, // Default: 3 + * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: this delay = (delay * (multiple ^ retries)). // Default: 2 + * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float|Param, // Randomness to apply to the delay (between 0 and 1). // Default: 0.1 + * }, + * rate_limiter?: scalar|Param|null, // Rate limiter name to use when processing messages. // Default: null + * }>, + * failure_transport?: scalar|Param|null, // Transport name to send failed messages to (after all retries have failed). // Default: null + * stop_worker_on_signals?: list, + * default_bus?: scalar|Param|null, // Default: null + * buses?: array, + * }>, + * }>, + * }, + * scheduler?: bool|array{ // Scheduler configuration + * enabled?: bool|Param, // Default: false + * }, + * disallow_search_engine_index?: bool|Param, // Enabled by default when debug is enabled. // Default: true + * http_client?: bool|array{ // HTTP Client configuration + * enabled?: bool|Param, // Default: true + * max_host_connections?: int|Param, // The maximum number of connections to a single host. + * default_options?: array{ + * headers?: array, + * vars?: array, + * max_redirects?: int|Param, // The maximum number of redirects to follow. + * http_version?: scalar|Param|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * resolve?: array, + * proxy?: scalar|Param|null, // The URL of the proxy to pass requests through or null for automatic detection. + * no_proxy?: scalar|Param|null, // A comma separated list of hosts that do not require a proxy to be reached. + * timeout?: float|Param, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * max_duration?: float|Param, // The maximum execution time for the request+response as a whole. + * bindto?: scalar|Param|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. + * verify_peer?: bool|Param, // Indicates if the peer should be verified in a TLS context. + * verify_host?: bool|Param, // Indicates if the host should exist as a certificate common name. + * cafile?: scalar|Param|null, // A certificate authority file. + * capath?: scalar|Param|null, // A directory that contains multiple certificate authority files. + * local_cert?: scalar|Param|null, // A PEM formatted certificate file. + * local_pk?: scalar|Param|null, // A private key file. + * passphrase?: scalar|Param|null, // The passphrase used to encrypt the "local_pk" file. + * ciphers?: scalar|Param|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...) + * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). + * sha1?: mixed, + * pin-sha256?: mixed, + * md5?: mixed, + * }, + * crypto_method?: scalar|Param|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. + * extra?: array, + * rate_limiter?: scalar|Param|null, // Rate limiter name to use for throttling requests. // Default: null + * caching?: bool|array{ // Caching configuration. + * enabled?: bool|Param, // Default: false + * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" + * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true + * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * }, + * retry_failed?: bool|array{ + * enabled?: bool|Param, // Default: false + * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null + * http_codes?: array, + * }>, + * max_retries?: int|Param, // Default: 3 + * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 + * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float|Param, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 + * }, + * }, + * mock_response_factory?: scalar|Param|null, // The id of the service that should generate mock responses. It should be either an invokable or an iterable. + * scoped_clients?: array, + * headers?: array, + * max_redirects?: int|Param, // The maximum number of redirects to follow. + * http_version?: scalar|Param|null, // The default HTTP version, typically 1.1 or 2.0, leave to null for the best version. + * resolve?: array, + * proxy?: scalar|Param|null, // The URL of the proxy to pass requests through or null for automatic detection. + * no_proxy?: scalar|Param|null, // A comma separated list of hosts that do not require a proxy to be reached. + * timeout?: float|Param, // The idle timeout, defaults to the "default_socket_timeout" ini parameter. + * max_duration?: float|Param, // The maximum execution time for the request+response as a whole. + * bindto?: scalar|Param|null, // A network interface name, IP address, a host name or a UNIX socket to bind to. + * verify_peer?: bool|Param, // Indicates if the peer should be verified in a TLS context. + * verify_host?: bool|Param, // Indicates if the host should exist as a certificate common name. + * cafile?: scalar|Param|null, // A certificate authority file. + * capath?: scalar|Param|null, // A directory that contains multiple certificate authority files. + * local_cert?: scalar|Param|null, // A PEM formatted certificate file. + * local_pk?: scalar|Param|null, // A private key file. + * passphrase?: scalar|Param|null, // The passphrase used to encrypt the "local_pk" file. + * ciphers?: scalar|Param|null, // A list of TLS ciphers separated by colons, commas or spaces (e.g. "RC3-SHA:TLS13-AES-128-GCM-SHA256"...). + * peer_fingerprint?: array{ // Associative array: hashing algorithm => hash(es). + * sha1?: mixed, + * pin-sha256?: mixed, + * md5?: mixed, + * }, + * crypto_method?: scalar|Param|null, // The minimum version of TLS to accept; must be one of STREAM_CRYPTO_METHOD_TLSv*_CLIENT constants. + * extra?: array, + * rate_limiter?: scalar|Param|null, // Rate limiter name to use for throttling requests. // Default: null + * caching?: bool|array{ // Caching configuration. + * enabled?: bool|Param, // Default: false + * cache_pool?: string|Param, // The taggable cache pool to use for storing the responses. // Default: "cache.http_client" + * shared?: bool|Param, // Indicates whether the cache is shared (public) or private. // Default: true + * max_ttl?: int|Param, // The maximum TTL (in seconds) allowed for cached responses. Null means no cap. // Default: null + * }, + * retry_failed?: bool|array{ + * enabled?: bool|Param, // Default: false + * retry_strategy?: scalar|Param|null, // service id to override the retry strategy. // Default: null + * http_codes?: array, + * }>, + * max_retries?: int|Param, // Default: 3 + * delay?: int|Param, // Time in ms to delay (or the initial value when multiplier is used). // Default: 1000 + * multiplier?: float|Param, // If greater than 1, delay will grow exponentially for each retry: delay * (multiple ^ retries). // Default: 2 + * max_delay?: int|Param, // Max time in ms that a retry should ever be delayed (0 = infinite). // Default: 0 + * jitter?: float|Param, // Randomness in percent (between 0 and 1) to apply to the delay. // Default: 0.1 + * }, + * }>, + * }, + * mailer?: bool|array{ // Mailer configuration + * enabled?: bool|Param, // Default: true + * message_bus?: scalar|Param|null, // The message bus to use. Defaults to the default bus if the Messenger component is installed. // Default: null + * dsn?: scalar|Param|null, // Default: null + * transports?: array, + * envelope?: array{ // Mailer Envelope configuration + * sender?: scalar|Param|null, + * recipients?: list, + * allowed_recipients?: list, + * }, + * headers?: array, + * dkim_signer?: bool|array{ // DKIM signer configuration + * enabled?: bool|Param, // Default: false + * key?: scalar|Param|null, // Key content, or path to key (in PEM format with the `file://` prefix) // Default: "" + * domain?: scalar|Param|null, // Default: "" + * select?: scalar|Param|null, // Default: "" + * passphrase?: scalar|Param|null, // The private key passphrase // Default: "" + * options?: array, + * }, + * smime_signer?: bool|array{ // S/MIME signer configuration + * enabled?: bool|Param, // Default: false + * key?: scalar|Param|null, // Path to key (in PEM format) // Default: "" + * certificate?: scalar|Param|null, // Path to certificate (in PEM format without the `file://` prefix) // Default: "" + * passphrase?: scalar|Param|null, // The private key passphrase // Default: null + * extra_certificates?: scalar|Param|null, // Default: null + * sign_options?: int|Param, // Default: null + * }, + * smime_encrypter?: bool|array{ // S/MIME encrypter configuration + * enabled?: bool|Param, // Default: false + * repository?: scalar|Param|null, // S/MIME certificate repository service. This service shall implement the `Symfony\Component\Mailer\EventListener\SmimeCertificateRepositoryInterface`. // Default: "" + * cipher?: int|Param, // A set of algorithms used to encrypt the message // Default: null + * }, + * }, + * secrets?: bool|array{ + * enabled?: bool|Param, // Default: true + * vault_directory?: scalar|Param|null, // Default: "%kernel.project_dir%/config/secrets/%kernel.runtime_environment%" + * local_dotenv_file?: scalar|Param|null, // Default: "%kernel.project_dir%/.env.%kernel.environment%.local" + * decryption_env_var?: scalar|Param|null, // Default: "base64:default::SYMFONY_DECRYPTION_SECRET" + * }, + * notifier?: bool|array{ // Notifier configuration + * enabled?: bool|Param, // Default: false + * message_bus?: scalar|Param|null, // The message bus to use. Defaults to the default bus if the Messenger component is installed. // Default: null + * chatter_transports?: array, + * texter_transports?: array, + * notification_on_failed_messages?: bool|Param, // Default: false + * channel_policy?: array>, + * admin_recipients?: list, + * }, + * rate_limiter?: bool|array{ // Rate limiter configuration + * enabled?: bool|Param, // Default: false + * limiters?: array, + * limit?: int|Param, // The maximum allowed hits in a fixed interval or burst. + * interval?: scalar|Param|null, // Configures the fixed interval if "policy" is set to "fixed_window" or "sliding_window". The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * rate?: array{ // Configures the fill rate if "policy" is set to "token_bucket". + * interval?: scalar|Param|null, // Configures the rate interval. The value must be a number followed by "second", "minute", "hour", "day", "week" or "month" (or their plural equivalent). + * amount?: int|Param, // Amount of tokens to add each interval. // Default: 1 + * }, + * }>, + * }, + * uid?: bool|array{ // Uid configuration + * enabled?: bool|Param, // Default: false + * default_uuid_version?: 7|6|4|1|Param, // Default: 7 + * name_based_uuid_version?: 5|3|Param, // Default: 5 + * name_based_uuid_namespace?: scalar|Param|null, + * time_based_uuid_version?: 7|6|1|Param, // Default: 7 + * time_based_uuid_node?: scalar|Param|null, + * }, + * html_sanitizer?: bool|array{ // HtmlSanitizer configuration + * enabled?: bool|Param, // Default: false + * sanitizers?: array, + * block_elements?: list, + * drop_elements?: list, + * allow_attributes?: array, + * drop_attributes?: array, + * force_attributes?: array>, + * force_https_urls?: bool|Param, // Transforms URLs using the HTTP scheme to use the HTTPS scheme instead. // Default: false + * allowed_link_schemes?: list, + * allowed_link_hosts?: list|null, + * allow_relative_links?: bool|Param, // Allows relative URLs to be used in links href attributes. // Default: false + * allowed_media_schemes?: list, + * allowed_media_hosts?: list|null, + * allow_relative_medias?: bool|Param, // Allows relative URLs to be used in media source attributes (img, audio, video, ...). // Default: false + * with_attribute_sanitizers?: list, + * without_attribute_sanitizers?: list, + * max_input_length?: int|Param, // The maximum length allowed for the sanitized input. // Default: 0 + * }>, + * }, + * webhook?: bool|array{ // Webhook configuration + * enabled?: bool|Param, // Default: false + * message_bus?: scalar|Param|null, // The message bus to use. // Default: "messenger.default_bus" + * routing?: array, + * }, + * remote-event?: bool|array{ // RemoteEvent configuration + * enabled?: bool|Param, // Default: false + * }, + * json_streamer?: bool|array{ // JSON streamer configuration + * enabled?: bool|Param, // Default: false + * }, + * } + * @psalm-type TwigConfig = array{ + * form_themes?: list, + * globals?: array, + * autoescape_service?: scalar|Param|null, // Default: null + * autoescape_service_method?: scalar|Param|null, // Default: null + * base_template_class?: scalar|Param|null, // Deprecated: The child node "base_template_class" at path "twig.base_template_class" is deprecated. + * cache?: scalar|Param|null, // Default: true + * charset?: scalar|Param|null, // Default: "%kernel.charset%" + * debug?: bool|Param, // Default: "%kernel.debug%" + * strict_variables?: bool|Param, // Default: "%kernel.debug%" + * auto_reload?: scalar|Param|null, + * optimizations?: int|Param, + * default_path?: scalar|Param|null, // The default path used to load templates. // Default: "%kernel.project_dir%/templates" + * file_name_pattern?: list, + * paths?: array, + * date?: array{ // The default format options used by the date filter. + * format?: scalar|Param|null, // Default: "F j, Y H:i" + * interval_format?: scalar|Param|null, // Default: "%d days" + * timezone?: scalar|Param|null, // The timezone used when formatting dates, when set to null, the timezone returned by date_default_timezone_get() is used. // Default: null + * }, + * number_format?: array{ // The default format options for the number_format filter. + * decimals?: int|Param, // Default: 0 + * decimal_point?: scalar|Param|null, // Default: "." + * thousands_separator?: scalar|Param|null, // Default: "," + * }, + * mailer?: array{ + * html_to_text_converter?: scalar|Param|null, // A service implementing the "Symfony\Component\Mime\HtmlToTextConverter\HtmlToTextConverterInterface". // Default: null + * }, + * } + * @psalm-type TwigExtraConfig = array{ + * cache?: bool|array{ + * enabled?: bool|Param, // Default: false + * }, + * html?: bool|array{ + * enabled?: bool|Param, // Default: false + * }, + * markdown?: bool|array{ + * enabled?: bool|Param, // Default: true + * }, + * intl?: bool|array{ + * enabled?: bool|Param, // Default: true + * }, + * cssinliner?: bool|array{ + * enabled?: bool|Param, // Default: true + * }, + * inky?: bool|array{ + * enabled?: bool|Param, // Default: true + * }, + * string?: bool|array{ + * enabled?: bool|Param, // Default: false + * }, + * commonmark?: array{ + * renderer?: array{ // Array of options for rendering HTML. + * block_separator?: scalar|Param|null, + * inner_separator?: scalar|Param|null, + * soft_break?: scalar|Param|null, + * }, + * html_input?: "strip"|"allow"|"escape"|Param, // How to handle HTML input. + * allow_unsafe_links?: bool|Param, // Remove risky link and image URLs by setting this to false. // Default: true + * max_nesting_level?: int|Param, // The maximum nesting level for blocks. // Default: 9223372036854775807 + * max_delimiters_per_line?: int|Param, // The maximum number of strong/emphasis delimiters per line. // Default: 9223372036854775807 + * slug_normalizer?: array{ // Array of options for configuring how URL-safe slugs are created. + * instance?: mixed, + * max_length?: int|Param, // Default: 255 + * unique?: mixed, + * }, + * commonmark?: array{ // Array of options for configuring the CommonMark core extension. + * enable_em?: bool|Param, // Default: true + * enable_strong?: bool|Param, // Default: true + * use_asterisk?: bool|Param, // Default: true + * use_underscore?: bool|Param, // Default: true + * unordered_list_markers?: list, + * }, + * ... + * }, + * } + * @psalm-type DoctrineConfig = array{ + * dbal?: array{ + * default_connection?: scalar|Param|null, + * types?: array, + * driver_schemes?: array, + * connections?: array, + * mapping_types?: array, + * default_table_options?: array, + * schema_manager_factory?: scalar|Param|null, // Default: "doctrine.dbal.default_schema_manager_factory" + * result_cache?: scalar|Param|null, + * slaves?: array, + * replicas?: array, + * }>, + * }, + * orm?: array{ + * default_entity_manager?: scalar|Param|null, + * auto_generate_proxy_classes?: scalar|Param|null, // Auto generate mode possible values are: "NEVER", "ALWAYS", "FILE_NOT_EXISTS", "EVAL", "FILE_NOT_EXISTS_OR_CHANGED", this option is ignored when the "enable_native_lazy_objects" option is true // Default: false + * enable_lazy_ghost_objects?: bool|Param, // Enables the new implementation of proxies based on lazy ghosts instead of using the legacy implementation // Default: true + * enable_native_lazy_objects?: bool|Param, // Enables the new native implementation of PHP lazy objects instead of generated proxies // Default: false + * proxy_dir?: scalar|Param|null, // Configures the path where generated proxy classes are saved when using non-native lazy objects, this option is ignored when the "enable_native_lazy_objects" option is true // Default: "%kernel.build_dir%/doctrine/orm/Proxies" + * proxy_namespace?: scalar|Param|null, // Defines the root namespace for generated proxy classes when using non-native lazy objects, this option is ignored when the "enable_native_lazy_objects" option is true // Default: "Proxies" + * controller_resolver?: bool|array{ + * enabled?: bool|Param, // Default: true + * auto_mapping?: bool|Param|null, // Set to false to disable using route placeholders as lookup criteria when the primary key doesn't match the argument name // Default: null + * evict_cache?: bool|Param, // Set to true to fetch the entity from the database instead of using the cache, if any // Default: false + * }, + * entity_managers?: array, + * }>, + * }>, + * }, + * connection?: scalar|Param|null, + * class_metadata_factory_name?: scalar|Param|null, // Default: "Doctrine\\ORM\\Mapping\\ClassMetadataFactory" + * default_repository_class?: scalar|Param|null, // Default: "Doctrine\\ORM\\EntityRepository" + * auto_mapping?: scalar|Param|null, // Default: false + * naming_strategy?: scalar|Param|null, // Default: "doctrine.orm.naming_strategy.default" + * quote_strategy?: scalar|Param|null, // Default: "doctrine.orm.quote_strategy.default" + * typed_field_mapper?: scalar|Param|null, // Default: "doctrine.orm.typed_field_mapper.default" + * entity_listener_resolver?: scalar|Param|null, // Default: null + * fetch_mode_subselect_batch_size?: scalar|Param|null, + * repository_factory?: scalar|Param|null, // Default: "doctrine.orm.container_repository_factory" + * schema_ignore_classes?: list, + * report_fields_where_declared?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.16 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/10455. // Default: true + * validate_xml_mapping?: bool|Param, // Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.14. See https://github.com/doctrine/orm/pull/6728. // Default: false + * second_level_cache?: array{ + * region_cache_driver?: string|array{ + * type?: scalar|Param|null, // Default: null + * id?: scalar|Param|null, + * pool?: scalar|Param|null, + * }, + * region_lock_lifetime?: scalar|Param|null, // Default: 60 + * log_enabled?: bool|Param, // Default: true + * region_lifetime?: scalar|Param|null, // Default: 3600 + * enabled?: bool|Param, // Default: true + * factory?: scalar|Param|null, + * regions?: array, + * loggers?: array, + * }, + * hydrators?: array, + * mappings?: array, + * dql?: array{ + * string_functions?: array, + * numeric_functions?: array, + * datetime_functions?: array, + * }, + * filters?: array, + * }>, + * identity_generation_preferences?: array, + * }>, + * resolve_target_entities?: array, + * }, + * } + * @psalm-type DoctrineMigrationsConfig = array{ + * enable_service_migrations?: bool|Param, // Whether to enable fetching migrations from the service container. // Default: false + * migrations_paths?: array, + * services?: array, + * factories?: array, + * storage?: array{ // Storage to use for migration status metadata. + * table_storage?: array{ // The default metadata storage, implemented as a table in the database. + * table_name?: scalar|Param|null, // Default: null + * version_column_name?: scalar|Param|null, // Default: null + * version_column_length?: scalar|Param|null, // Default: null + * executed_at_column_name?: scalar|Param|null, // Default: null + * execution_time_column_name?: scalar|Param|null, // Default: null + * }, + * }, + * migrations?: list, + * connection?: scalar|Param|null, // Connection name to use for the migrations database. // Default: null + * em?: scalar|Param|null, // Entity manager name to use for the migrations database (available when doctrine/orm is installed). // Default: null + * all_or_nothing?: scalar|Param|null, // Run all migrations in a transaction. // Default: false + * check_database_platform?: scalar|Param|null, // Adds an extra check in the generated migrations to allow execution only on the same platform as they were initially generated on. // Default: true + * custom_template?: scalar|Param|null, // Custom template path for generated migration classes. // Default: null + * organize_migrations?: scalar|Param|null, // Organize migrations mode. Possible values are: "BY_YEAR", "BY_YEAR_AND_MONTH", false // Default: false + * enable_profiler?: bool|Param, // Whether or not to enable the profiler collector to calculate and visualize migration status. This adds some queries overhead. // Default: false + * transactional?: bool|Param, // Whether or not to wrap migrations in a single transaction. // Default: true + * } + * @psalm-type SecurityConfig = array{ + * access_denied_url?: scalar|Param|null, // Default: null + * session_fixation_strategy?: "none"|"migrate"|"invalidate"|Param, // Default: "migrate" + * hide_user_not_found?: bool|Param, // Deprecated: The "hide_user_not_found" option is deprecated and will be removed in 8.0. Use the "expose_security_errors" option instead. + * expose_security_errors?: \Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::None|\Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::AccountStatus|\Symfony\Component\Security\Http\Authentication\ExposeSecurityLevel::All|Param, // Default: "none" + * erase_credentials?: bool|Param, // Default: true + * access_decision_manager?: array{ + * strategy?: "affirmative"|"consensus"|"unanimous"|"priority"|Param, + * service?: scalar|Param|null, + * strategy_service?: scalar|Param|null, + * allow_if_all_abstain?: bool|Param, // Default: false + * allow_if_equal_granted_denied?: bool|Param, // Default: true + * }, + * password_hashers?: array, + * hash_algorithm?: scalar|Param|null, // Name of hashing algorithm for PBKDF2 (i.e. sha256, sha512, etc..) See hash_algos() for a list of supported algorithms. // Default: "sha512" + * key_length?: scalar|Param|null, // Default: 40 + * ignore_case?: bool|Param, // Default: false + * encode_as_base64?: bool|Param, // Default: true + * iterations?: scalar|Param|null, // Default: 5000 + * cost?: int|Param, // Default: null + * memory_cost?: scalar|Param|null, // Default: null + * time_cost?: scalar|Param|null, // Default: null + * id?: scalar|Param|null, + * }>, + * providers?: array, + * }, + * entity?: array{ + * class: scalar|Param|null, // The full entity class name of your user class. + * property?: scalar|Param|null, // Default: null + * manager_name?: scalar|Param|null, // Default: null + * }, + * memory?: array{ + * users?: array, + * }>, + * }, + * ldap?: array{ + * service: scalar|Param|null, + * base_dn: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: null + * search_password?: scalar|Param|null, // Default: null + * extra_fields?: list, + * default_roles?: list, + * role_fetcher?: scalar|Param|null, // Default: null + * uid_key?: scalar|Param|null, // Default: "sAMAccountName" + * filter?: scalar|Param|null, // Default: "({uid_key}={user_identifier})" + * password_attribute?: scalar|Param|null, // Default: null + * }, + * }>, + * firewalls: array, + * security?: bool|Param, // Default: true + * user_checker?: scalar|Param|null, // The UserChecker to use when authenticating users in this firewall. // Default: "security.user_checker" + * request_matcher?: scalar|Param|null, + * access_denied_url?: scalar|Param|null, + * access_denied_handler?: scalar|Param|null, + * entry_point?: scalar|Param|null, // An enabled authenticator name or a service id that implements "Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface". + * provider?: scalar|Param|null, + * stateless?: bool|Param, // Default: false + * lazy?: bool|Param, // Default: false + * context?: scalar|Param|null, + * logout?: array{ + * enable_csrf?: bool|Param|null, // Default: null + * csrf_token_id?: scalar|Param|null, // Default: "logout" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_manager?: scalar|Param|null, + * path?: scalar|Param|null, // Default: "/logout" + * target?: scalar|Param|null, // Default: "/" + * invalidate_session?: bool|Param, // Default: true + * clear_site_data?: list<"*"|"cache"|"cookies"|"storage"|"executionContexts"|Param>, + * delete_cookies?: array, + * }, + * switch_user?: array{ + * provider?: scalar|Param|null, + * parameter?: scalar|Param|null, // Default: "_switch_user" + * role?: scalar|Param|null, // Default: "ROLE_ALLOWED_TO_SWITCH" + * target_route?: scalar|Param|null, // Default: null + * }, + * required_badges?: list, + * custom_authenticators?: list, + * login_throttling?: array{ + * limiter?: scalar|Param|null, // A service id implementing "Symfony\Component\HttpFoundation\RateLimiter\RequestRateLimiterInterface". + * max_attempts?: int|Param, // Default: 5 + * interval?: scalar|Param|null, // Default: "1 minute" + * lock_factory?: scalar|Param|null, // The service ID of the lock factory used by the login rate limiter (or null to disable locking). // Default: null + * cache_pool?: string|Param, // The cache pool to use for storing the limiter state // Default: "cache.rate_limiter" + * storage_service?: string|Param, // The service ID of a custom storage implementation, this precedes any configured "cache_pool" // Default: null + * }, + * x509?: array{ + * provider?: scalar|Param|null, + * user?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN_Email" + * credentials?: scalar|Param|null, // Default: "SSL_CLIENT_S_DN" + * user_identifier?: scalar|Param|null, // Default: "emailAddress" + * }, + * remote_user?: array{ + * provider?: scalar|Param|null, + * user?: scalar|Param|null, // Default: "REMOTE_USER" + * }, + * login_link?: array{ + * check_route: scalar|Param|null, // Route that will validate the login link - e.g. "app_login_link_verify". + * check_post_only?: scalar|Param|null, // If true, only HTTP POST requests to "check_route" will be handled by the authenticator. // Default: false + * signature_properties: list, + * lifetime?: int|Param, // The lifetime of the login link in seconds. // Default: 600 + * max_uses?: int|Param, // Max number of times a login link can be used - null means unlimited within lifetime. // Default: null + * used_link_cache?: scalar|Param|null, // Cache service id used to expired links of max_uses is set. + * success_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface. + * failure_handler?: scalar|Param|null, // A service id that implements Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface. + * provider?: scalar|Param|null, // The user provider to load users from. + * secret?: scalar|Param|null, // Default: "%kernel.secret%" + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * login_path?: scalar|Param|null, // Default: "/login" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * }, + * form_login?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_parameter?: scalar|Param|null, // Default: "_username" + * password_parameter?: scalar|Param|null, // Default: "_password" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|Param|null, // Default: "authenticate" + * enable_csrf?: bool|Param, // Default: false + * post_only?: bool|Param, // Default: true + * form_only?: bool|Param, // Default: false + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * }, + * form_login_ldap?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_parameter?: scalar|Param|null, // Default: "_username" + * password_parameter?: scalar|Param|null, // Default: "_password" + * csrf_parameter?: scalar|Param|null, // Default: "_csrf_token" + * csrf_token_id?: scalar|Param|null, // Default: "authenticate" + * enable_csrf?: bool|Param, // Default: false + * post_only?: bool|Param, // Default: true + * form_only?: bool|Param, // Default: false + * always_use_default_target_path?: bool|Param, // Default: false + * default_target_path?: scalar|Param|null, // Default: "/" + * target_path_parameter?: scalar|Param|null, // Default: "_target_path" + * use_referer?: bool|Param, // Default: false + * failure_path?: scalar|Param|null, // Default: null + * failure_forward?: bool|Param, // Default: false + * failure_path_parameter?: scalar|Param|null, // Default: "_failure_path" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * json_login?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_path?: scalar|Param|null, // Default: "username" + * password_path?: scalar|Param|null, // Default: "password" + * }, + * json_login_ldap?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * check_path?: scalar|Param|null, // Default: "/login_check" + * use_forward?: bool|Param, // Default: false + * login_path?: scalar|Param|null, // Default: "/login" + * username_path?: scalar|Param|null, // Default: "username" + * password_path?: scalar|Param|null, // Default: "password" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * access_token?: array{ + * provider?: scalar|Param|null, + * remember_me?: bool|Param, // Default: true + * success_handler?: scalar|Param|null, + * failure_handler?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: null + * token_extractors?: list, + * token_handler: string|array{ + * id?: scalar|Param|null, + * oidc_user_info?: string|array{ + * base_uri: scalar|Param|null, // Base URI of the userinfo endpoint on the OIDC server, or the OIDC server URI to use the discovery (require "discovery" to be configured). + * discovery?: array{ // Enable the OIDC discovery. + * cache?: array{ + * id: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g. sub, email, etc.). // Default: "sub" + * client?: scalar|Param|null, // HttpClient service id to use to call the OIDC server. + * }, + * oidc?: array{ + * discovery?: array{ // Enable the OIDC discovery. + * base_uri: list, + * cache?: array{ + * id: scalar|Param|null, // Cache service id to use to cache the OIDC discovery configuration. + * }, + * }, + * claim?: scalar|Param|null, // Claim which contains the user identifier (e.g.: sub, email..). // Default: "sub" + * audience: scalar|Param|null, // Audience set in the token, for validation purpose. + * issuers: list, + * algorithm?: array, + * algorithms: list, + * key?: scalar|Param|null, // Deprecated: The "key" option is deprecated and will be removed in 8.0. Use the "keyset" option instead. // JSON-encoded JWK used to sign the token (must contain a "kty" key). + * keyset?: scalar|Param|null, // JSON-encoded JWKSet used to sign the token (must contain a list of valid public keys). + * encryption?: bool|array{ + * enabled?: bool|Param, // Default: false + * enforce?: bool|Param, // When enabled, the token shall be encrypted. // Default: false + * algorithms: list, + * keyset: scalar|Param|null, // JSON-encoded JWKSet used to decrypt the token (must contain a list of valid private keys). + * }, + * }, + * cas?: array{ + * validation_url: scalar|Param|null, // CAS server validation URL + * prefix?: scalar|Param|null, // CAS prefix // Default: "cas" + * http_client?: scalar|Param|null, // HTTP Client service // Default: null + * }, + * oauth2?: scalar|Param|null, + * }, + * }, + * http_basic?: array{ + * provider?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: "Secured Area" + * }, + * http_basic_ldap?: array{ + * provider?: scalar|Param|null, + * realm?: scalar|Param|null, // Default: "Secured Area" + * service?: scalar|Param|null, // Default: "ldap" + * dn_string?: scalar|Param|null, // Default: "{user_identifier}" + * query_string?: scalar|Param|null, + * search_dn?: scalar|Param|null, // Default: "" + * search_password?: scalar|Param|null, // Default: "" + * }, + * remember_me?: array{ + * secret?: scalar|Param|null, // Default: "%kernel.secret%" + * service?: scalar|Param|null, + * user_providers?: list, + * catch_exceptions?: bool|Param, // Default: true + * signature_properties?: list, + * token_provider?: string|array{ + * service?: scalar|Param|null, // The service ID of a custom remember-me token provider. + * doctrine?: bool|array{ + * enabled?: bool|Param, // Default: false + * connection?: scalar|Param|null, // Default: null + * }, + * }, + * token_verifier?: scalar|Param|null, // The service ID of a custom rememberme token verifier. + * name?: scalar|Param|null, // Default: "REMEMBERME" + * lifetime?: int|Param, // Default: 31536000 + * path?: scalar|Param|null, // Default: "/" + * domain?: scalar|Param|null, // Default: null + * secure?: true|false|"auto"|Param, // Default: null + * httponly?: bool|Param, // Default: true + * samesite?: null|"lax"|"strict"|"none"|Param, // Default: "lax" + * always_remember_me?: bool|Param, // Default: false + * remember_me_parameter?: scalar|Param|null, // Default: "_remember_me" + * }, + * }>, + * access_control?: list, + * attributes?: array, + * route?: scalar|Param|null, // Default: null + * methods?: list, + * allow_if?: scalar|Param|null, // Default: null + * roles?: list, + * }>, + * role_hierarchy?: array>, + * } + * @psalm-type WebProfilerConfig = array{ + * toolbar?: bool|array{ // Profiler toolbar configuration + * enabled?: bool|Param, // Default: false + * ajax_replace?: bool|Param, // Replace toolbar on AJAX requests // Default: false + * }, + * intercept_redirects?: bool|Param, // Default: false + * excluded_ajax_paths?: scalar|Param|null, // Default: "^/((index|app(_[\\w]+)?)\\.php/)?_wdt" + * } + * @psalm-type MonologConfig = array{ + * use_microseconds?: scalar|Param|null, // Default: true + * channels?: list, + * handlers?: array, + * }>, + * accepted_levels?: list, + * min_level?: scalar|Param|null, // Default: "DEBUG" + * max_level?: scalar|Param|null, // Default: "EMERGENCY" + * buffer_size?: scalar|Param|null, // Default: 0 + * flush_on_overflow?: bool|Param, // Default: false + * handler?: scalar|Param|null, + * url?: scalar|Param|null, + * exchange?: scalar|Param|null, + * exchange_name?: scalar|Param|null, // Default: "log" + * channel?: scalar|Param|null, // Default: null + * bot_name?: scalar|Param|null, // Default: "Monolog" + * use_attachment?: scalar|Param|null, // Default: true + * use_short_attachment?: scalar|Param|null, // Default: false + * include_extra?: scalar|Param|null, // Default: false + * icon_emoji?: scalar|Param|null, // Default: null + * webhook_url?: scalar|Param|null, + * exclude_fields?: list, + * token?: scalar|Param|null, + * region?: scalar|Param|null, + * source?: scalar|Param|null, + * use_ssl?: bool|Param, // Default: true + * user?: mixed, + * title?: scalar|Param|null, // Default: null + * host?: scalar|Param|null, // Default: null + * port?: scalar|Param|null, // Default: 514 + * config?: list, + * members?: list, + * connection_string?: scalar|Param|null, + * timeout?: scalar|Param|null, + * time?: scalar|Param|null, // Default: 60 + * deduplication_level?: scalar|Param|null, // Default: 400 + * store?: scalar|Param|null, // Default: null + * connection_timeout?: scalar|Param|null, + * persistent?: bool|Param, + * message_type?: scalar|Param|null, // Default: 0 + * parse_mode?: scalar|Param|null, // Default: null + * disable_webpage_preview?: bool|Param|null, // Default: null + * disable_notification?: bool|Param|null, // Default: null + * split_long_messages?: bool|Param, // Default: false + * delay_between_messages?: bool|Param, // Default: false + * topic?: int|Param, // Default: null + * factor?: int|Param, // Default: 1 + * tags?: list, + * console_formatter_options?: mixed, // Default: [] + * formatter?: scalar|Param|null, + * nested?: bool|Param, // Default: false + * publisher?: string|array{ + * id?: scalar|Param|null, + * hostname?: scalar|Param|null, + * port?: scalar|Param|null, // Default: 12201 + * chunk_size?: scalar|Param|null, // Default: 1420 + * encoder?: "json"|"compressed_json"|Param, + * }, + * mongodb?: string|array{ + * id?: scalar|Param|null, // ID of a MongoDB\Client service + * uri?: scalar|Param|null, + * username?: scalar|Param|null, + * password?: scalar|Param|null, + * database?: scalar|Param|null, // Default: "monolog" + * collection?: scalar|Param|null, // Default: "logs" + * }, + * elasticsearch?: string|array{ + * id?: scalar|Param|null, + * hosts?: list, + * host?: scalar|Param|null, + * port?: scalar|Param|null, // Default: 9200 + * transport?: scalar|Param|null, // Default: "Http" + * user?: scalar|Param|null, // Default: null + * password?: scalar|Param|null, // Default: null + * }, + * index?: scalar|Param|null, // Default: "monolog" + * document_type?: scalar|Param|null, // Default: "logs" + * ignore_error?: scalar|Param|null, // Default: false + * redis?: string|array{ + * id?: scalar|Param|null, + * host?: scalar|Param|null, + * password?: scalar|Param|null, // Default: null + * port?: scalar|Param|null, // Default: 6379 + * database?: scalar|Param|null, // Default: 0 + * key_name?: scalar|Param|null, // Default: "monolog_redis" + * }, + * predis?: string|array{ + * id?: scalar|Param|null, + * host?: scalar|Param|null, + * }, + * from_email?: scalar|Param|null, + * to_email?: list, + * subject?: scalar|Param|null, + * content_type?: scalar|Param|null, // Default: null + * headers?: list, + * mailer?: scalar|Param|null, // Default: null + * email_prototype?: string|array{ + * id: scalar|Param|null, + * method?: scalar|Param|null, // Default: null + * }, + * verbosity_levels?: array{ + * VERBOSITY_QUIET?: scalar|Param|null, // Default: "ERROR" + * VERBOSITY_NORMAL?: scalar|Param|null, // Default: "WARNING" + * VERBOSITY_VERBOSE?: scalar|Param|null, // Default: "NOTICE" + * VERBOSITY_VERY_VERBOSE?: scalar|Param|null, // Default: "INFO" + * VERBOSITY_DEBUG?: scalar|Param|null, // Default: "DEBUG" + * }, + * channels?: string|array{ + * type?: scalar|Param|null, + * elements?: list, + * }, + * }>, + * } + * @psalm-type DebugConfig = array{ + * max_items?: int|Param, // Max number of displayed items past the first level, -1 means no limit. // Default: 2500 + * min_depth?: int|Param, // Minimum tree depth to clone all the items, 1 is default. // Default: 1 + * max_string_length?: int|Param, // Max length of displayed strings, -1 means no limit. // Default: -1 + * dump_destination?: scalar|Param|null, // A stream URL where dumps should be written to. // Default: null + * theme?: "dark"|"light"|Param, // Changes the color of the dump() output when rendered directly on the templating. "dark" (default) or "light". // Default: "dark" + * } + * @psalm-type MakerConfig = array{ + * root_namespace?: scalar|Param|null, // Default: "App" + * generate_final_classes?: bool|Param, // Default: true + * generate_final_entities?: bool|Param, // Default: false + * } + * @psalm-type WebpackEncoreConfig = array{ + * output_path: scalar|Param|null, // The path where Encore is building the assets - i.e. Encore.setOutputPath() + * crossorigin?: false|"anonymous"|"use-credentials"|Param, // crossorigin value when Encore.enableIntegrityHashes() is used, can be false (default), anonymous or use-credentials // Default: false + * preload?: bool|Param, // preload all rendered script and link tags automatically via the http2 Link header. // Default: false + * cache?: bool|Param, // Enable caching of the entry point file(s) // Default: false + * strict_mode?: bool|Param, // Throw an exception if the entrypoints.json file is missing or an entry is missing from the data // Default: true + * builds?: array, + * script_attributes?: array, + * link_attributes?: array, + * } + * @psalm-type KnpuOauth2ClientConfig = array{ + * http_client?: scalar|Param|null, // Service id of HTTP client to use (must implement GuzzleHttp\ClientInterface) // Default: null + * http_client_options?: array{ + * timeout?: int|Param, + * proxy?: scalar|Param|null, + * verify?: bool|Param, // Use only with proxy option set + * }, + * clients?: array>, + * } + * @psalm-type DamaDoctrineTestConfig = array{ + * enable_static_connection?: mixed, // Default: true + * enable_static_meta_data_cache?: bool|Param, // Default: true + * enable_static_query_cache?: bool|Param, // Default: true + * connection_keys?: list, + * } + * @psalm-type EndroidQrCodeConfig = array + * @psalm-type ConfigType = array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * twig?: TwigConfig, + * twig_extra?: TwigExtraConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * security?: SecurityConfig, + * monolog?: MonologConfig, + * webpack_encore?: WebpackEncoreConfig, + * knpu_oauth2_client?: KnpuOauth2ClientConfig, + * endroid_qr_code?: EndroidQrCodeConfig, + * "when@dev"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * twig?: TwigConfig, + * twig_extra?: TwigExtraConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * monolog?: MonologConfig, + * debug?: DebugConfig, + * maker?: MakerConfig, + * webpack_encore?: WebpackEncoreConfig, + * knpu_oauth2_client?: KnpuOauth2ClientConfig, + * endroid_qr_code?: EndroidQrCodeConfig, + * }, + * "when@prod"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * twig?: TwigConfig, + * twig_extra?: TwigExtraConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * security?: SecurityConfig, + * monolog?: MonologConfig, + * webpack_encore?: WebpackEncoreConfig, + * knpu_oauth2_client?: KnpuOauth2ClientConfig, + * endroid_qr_code?: EndroidQrCodeConfig, + * }, + * "when@test"?: array{ + * imports?: ImportsConfig, + * parameters?: ParametersConfig, + * services?: ServicesConfig, + * framework?: FrameworkConfig, + * twig?: TwigConfig, + * twig_extra?: TwigExtraConfig, + * doctrine?: DoctrineConfig, + * doctrine_migrations?: DoctrineMigrationsConfig, + * security?: SecurityConfig, + * web_profiler?: WebProfilerConfig, + * monolog?: MonologConfig, + * debug?: DebugConfig, + * webpack_encore?: WebpackEncoreConfig, + * knpu_oauth2_client?: KnpuOauth2ClientConfig, + * dama_doctrine_test?: DamaDoctrineTestConfig, + * endroid_qr_code?: EndroidQrCodeConfig, + * }, + * ..., + * }> + * } + */ +final class App +{ + /** + * @param ConfigType $config + * + * @psalm-return ConfigType + */ + public static function config(array $config): array + { + return AppReference::config($config); + } +} + +namespace Symfony\Component\Routing\Loader\Configurator; + +/** + * This class provides array-shapes for configuring the routes of an application. + * + * Example: + * + * ```php + * // config/routes.php + * namespace Symfony\Component\Routing\Loader\Configurator; + * + * return Routes::config([ + * 'controllers' => [ + * 'resource' => 'routing.controllers', + * ], + * ]); + * ``` + * + * @psalm-type RouteConfig = array{ + * path: string|array, + * controller?: string, + * methods?: string|list, + * requirements?: array, + * defaults?: array, + * options?: array, + * host?: string|array, + * schemes?: string|list, + * condition?: string, + * locale?: string, + * format?: string, + * utf8?: bool, + * stateless?: bool, + * } + * @psalm-type ImportConfig = array{ + * resource: string, + * type?: string, + * exclude?: string|list, + * prefix?: string|array, + * name_prefix?: string, + * trailing_slash_on_root?: bool, + * controller?: string, + * methods?: string|list, + * requirements?: array, + * defaults?: array, + * options?: array, + * host?: string|array, + * schemes?: string|list, + * condition?: string, + * locale?: string, + * format?: string, + * utf8?: bool, + * stateless?: bool, + * } + * @psalm-type AliasConfig = array{ + * alias: string, + * deprecated?: array{package:string, version:string, message?:string}, + * } + * @psalm-type RoutesConfig = array{ + * "when@dev"?: array, + * "when@prod"?: array, + * "when@test"?: array, + * ... + * } + */ +final class Routes +{ + /** + * @param RoutesConfig $config + * + * @psalm-return RoutesConfig + */ + public static function config(array $config): array + { + return $config; + } +} diff --git a/public/index.php b/public/index.php index 0e30370..7fbc8cf 100644 --- a/public/index.php +++ b/public/index.php @@ -1,27 +1,9 @@ handle($request); -$response->send(); -$kernel->terminate($request, $response); +return function (array $context) { + return new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']); +}; diff --git a/src/Controller/AdHocMeetingController.php b/src/Controller/AdHocMeetingController.php index 1b53afb..3a8b00d 100644 --- a/src/Controller/AdHocMeetingController.php +++ b/src/Controller/AdHocMeetingController.php @@ -8,6 +8,7 @@ use App\Service\RoomService; use App\Service\ServerUserManagment; use App\Service\UserService; +use Doctrine\ORM\EntityManagerInterface; use phpDocumentor\Reflection\Types\This; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; @@ -21,7 +22,7 @@ class AdHocMeetingController extends AbstractController #[MapEntity(expr: "repository.findOneBy({'id': userId})")] #[MapEntity(expr: "repository.findOneBy({'id': serverId})")] -public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response +public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, EntityManagerInterface $entityManager): Response { if(!in_array($user,$this->getUser()->getAddressbook()->toArray())){ @@ -43,7 +44,7 @@ public function index(User $user, Standort $standort, UserService $userService, $room->setStandort($standort); $room->setName($translator->trans('Event mit {n}',array('{n}'=>$user->getEmail()))); $room->setOnlyRegisteredUsers(false); - $em = $this->getDoctrine()->getManager(); + $em = $entityManager; $em->persist($room); $em->flush(); $user->addRoom($room); diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index 8143107..c338870 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -15,7 +15,6 @@ class CronController extends AbstractController { #[Route("/cron/remember", name: "cron_remember")] - public function updateCronAkademie(Request $request, LoggerInterface $logger, UserService $userService, ReminderService $reminderService) { if ($request->get('token') !== $this->getParameter('cronToken')) { diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index f6ac60a..148f799 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -12,6 +12,7 @@ use App\Entity\Standort; use App\Entity\User; use App\Form\Type\JoinViewType; +use App\Repository\RoomsRepository; use App\Service\RoomSpaceService; use App\Service\ServerUserManagment; use Firebase\JWT\JWT; @@ -28,23 +29,12 @@ class DashboardController extends AbstractController { - /** + #[Route("/", name: "index")] - * @param Request $request - * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response - */ - public function index(Request $request, RoomSpaceService $roomSpaceService) + public function index(Request $request, RoomSpaceService $roomSpaceService, RoomsRepository $roomsRepository): \Symfony\Component\HttpFoundation\Response { - $qb = $this->getDoctrine()->getRepository(Rooms::class)->createQueryBuilder('rooms'); - $now = new \DateTime(); - $qb->andWhere('rooms.showRoomOnCalendar = true') - ->andWhere($qb->expr()->isNotNull('rooms.moderator')) - ->andWhere($qb->expr()->orX( - $qb->expr()->isNull('rooms.showAfterDate'), - $qb->expr()->lte('rooms.showAfterDate',':now') - )) - ->setParameter('now',$now); - $tmp = $qb->getQuery()->getResult(); + + $tmp = $roomsRepository->findRoomsByDashboard(); $events = array(); foreach ($tmp as $data) { if ($roomSpaceService->isRoomSpace($data) || $data->getShowInCalendarWhenNoSpace() == null) { @@ -55,18 +45,15 @@ public function index(Request $request, RoomSpaceService $roomSpaceService) } - /** + #[Route("/room/dashboard", name: "dashboard")] - * @param Request $request - * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response - */ - public function dashboard(Request $request, ServerUserManagment $serverUserManagment) + public function dashboard(Request $request, ServerUserManagment $serverUserManagment, RoomsRepository $roomsRepository): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response { if ($request->get('join_room') && $request->get('type')) { return $this->redirectToRoute('room_join', ['room' => $request->get('join_room'), 't' => $request->get('type')]); } - $roomsFuture = $this->getDoctrine()->getRepository(Rooms::class)->findRoomsInFuture($this->getUser()); + $roomsFuture = $roomsRepository->findRoomsInFuture($this->getUser()); $r = array(); $future = array(); foreach ($roomsFuture as $data) { diff --git a/src/Entity/Rooms.php b/src/Entity/Rooms.php index 1a080d6..ff6e5c1 100644 --- a/src/Entity/Rooms.php +++ b/src/Entity/Rooms.php @@ -9,34 +9,27 @@ #[ORM\Entity(repositoryClass: RoomsRepository::class)] #[ORM\HasLifecycleCallbacks] - class Rooms { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: "integer")] - private $id; #[ORM\Column(type: "text")] - private $name; #[ORM\Column(type: "datetime", nullable: true)] - private $start; #[ORM\Column(type: "datetime", nullable: true)] - private $enddate; #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "rooms")] - private $user; #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: "rooms")] #[ORM\JoinColumn(nullable: false)] - private $standort; #[ORM\Column(type: "text")] @@ -45,90 +38,69 @@ class Rooms #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "roomModerator")] #[ORM\JoinColumn(nullable: true)] - private $moderator; #[ORM\Column(type: "float")] - private $duration; #[ORM\Column(type: "integer")] - private $sequence; #[ORM\Column(type: "text",nullable: true)] - private $uidReal; #[ORM\Column(type: "boolean")] - private $onlyRegisteredUsers= false; #[ORM\Column(type: "text", nullable: true)] - private $agenda; #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: "room")] - private $userAttributes; #[ORM\Column(type: "boolean", nullable: true)] - private $dissallowScreenshareGlobal; #[ORM\Column(type: "boolean", nullable: true)] - private $dissallowPrivateMessage; #[ORM\Column(type: "boolean", nullable: true)] - private $public = true; #[ORM\Column(type: "boolean", nullable: true)] - private $showRoomOnJoinpage; #[ORM\Column(type: "text", nullable: true)] - private $uidParticipant; #[ORM\Column(type: "text", nullable: true)] - private $uidModerator; #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: "room")] - private $subscribers; #[ORM\Column(type: "integer", nullable: true)] - private $maxParticipants; #[ORM\OneToMany(targetEntity: Scheduling::class, mappedBy: "room")] - private $schedulings; #[ORM\Column(type: "boolean", nullable: true)] - private $scheduleMeeting; #[ORM\Column(type: "boolean", nullable: true)] private $waitinglist; - #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: "room")] private $waitinglists; - #[ORM\Column(type: "integer", nullable: true)] private $maxWaitingList; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "roomsStorno")] #[ORM\JoinTable(name: "rooms_storno")] private $storno; - #[ORM\OneToMany(targetEntity: Group::class, mappedBy: "rooms")] private $groups; @@ -136,35 +108,27 @@ class Rooms #[ORM\Column(type: "boolean", nullable: true)] private $allowGroups; - #[ORM\Column(type: "integer", nullable: true)] private $maxGroupSize; - #[ORM\Column(type: "boolean", nullable: true)] private $showRoomOnCalendar; - #[ORM\Column(type: "datetime", nullable: true)] private $entryDateTime; - #[ORM\Column(type: "text", nullable: true)] private $promoter; - #[ORM\Column(type: "text", nullable: true)] private $additionalInfo; - #[ORM\Column(type: "boolean", nullable: true)] private $showInCalendarWhenNoSpace; - #[ORM\Column(type: "text", nullable: true)] private $textWhenNoSpace; - #[ORM\Column(type: "text", nullable: true)] private $textWhenRoomWarteliste; diff --git a/src/Entity/UserBase.php b/src/Entity/UserBase.php index 62fc6e4..4445d96 100644 --- a/src/Entity/UserBase.php +++ b/src/Entity/UserBase.php @@ -11,17 +11,13 @@ class UserBase implements UserInterface { #[ORM\Column(type: "string", length: 180, unique: true)] - private $uuid; #[ORM\Column(type: "json")] - private $roles = []; - /** - * @var string The hashed password + #[ORM\Column(type: "string")] - */ private $password; public function getId(): ?int diff --git a/src/Repository/RoomsRepository.php b/src/Repository/RoomsRepository.php index 9ae91cf..be80a39 100644 --- a/src/Repository/RoomsRepository.php +++ b/src/Repository/RoomsRepository.php @@ -157,4 +157,22 @@ public function findRoomsFutureAndPast(User $user,$timeBack) ->getQuery() ->getResult(); } + /** + * @return Rooms[] Returns an array of Rooms objects + */ + public function findRoomsByDashboard() + { + $qb = $this->createQueryBuilder('rooms'); + $now = new \DateTime(); + $qb->andWhere('rooms.showRoomOnCalendar = true') + ->andWhere($qb->expr()->isNotNull('rooms.moderator')) + ->andWhere($qb->expr()->orX( + $qb->expr()->isNull('rooms.showAfterDate'), + $qb->expr()->lte('rooms.showAfterDate',':now') + )) + ->setParameter('now',$now); + return $qb->getQuery()->getResult(); + + + } } From a8f4b5fc34676bb5fbdc13d7a27be5b2c1dccdfe Mon Sep 17 00:00:00 2001 From: Entwicklung Date: Fri, 20 Feb 2026 18:37:40 +0100 Subject: [PATCH 12/12] * fix all attributes and fix migrations --- .gitignore | 4 + composer.json | 1 + composer.lock | 115 +++++++++++++++++- config/packages/doctrine.yaml | 1 + rector.php | 41 +++++++ src/Command/AddSlugToServerCommand.php | 9 +- src/Command/ConnectServerAndGroupsCommand.php | 7 +- src/Command/CronSendReminderCommand.php | 7 +- src/Command/MigrateToAdressbookCommand.php | 3 +- .../RemoveGroupWithNoLeaderCommand.php | 7 +- src/Command/RemoveServerAndGroupsCommand.php | 7 +- src/Controller/AdHocMeetingController.php | 18 +-- src/Controller/AdminController.php | 12 +- src/Controller/AdressbookController.php | 5 +- src/Controller/AtendeelistController.php | 5 +- .../ChangePermissionsController.php | 11 +- src/Controller/ConfirmController.php | 9 +- src/Controller/CreateEventsController.php | 5 +- src/Controller/CronController.php | 4 +- src/Controller/DashboardController.php | 22 ++-- src/Controller/DayListController.php | 8 +- src/Controller/HealthCheckController.php | 5 +- src/Controller/IcalController.php | 13 +- src/Controller/InvitationController.php | 13 +- src/Controller/JoinController.php | 13 +- src/Controller/LoginController.php | 11 +- src/Controller/LoginControllerKeycloak.php | 12 +- src/Controller/ParticipantController.php | 5 +- src/Controller/ReminderLizenseController.php | 5 +- src/Controller/RepeatSendController.php | 7 +- src/Controller/RoomController.php | 27 ++-- src/Controller/ScheduleController.php | 47 ++++--- src/Controller/ShareLinkController.php | 41 ++++--- src/Controller/StandortController.php | 15 ++- src/Controller/StornoController.php | 8 +- .../TransferOwnershipController.php | 17 +-- src/Controller/api/APILicenseController.php | 5 +- src/Controller/api/APIRoomController.php | 11 +- src/Controller/api/APIUserController.php | 12 +- src/DataFixtures/User.php | 2 +- src/Entity/ApiKeys.php | 17 +-- src/Entity/FreeField.php | 20 ++- src/Entity/FreeFieldsUserAnswer.php | 20 ++- src/Entity/Group.php | 19 ++- src/Entity/KeycloakGroupsToStandorts.php | 14 +-- src/Entity/License.php | 20 ++- src/Entity/Rooms.php | 102 +++++++--------- src/Entity/RoomsUser.php | 25 ++-- src/Entity/Scheduling.php | 20 ++- src/Entity/SchedulingTime.php | 17 +-- src/Entity/SchedulingTimeUser.php | 17 +-- src/Entity/Standort.php | 89 +++++--------- src/Entity/Subscriber.php | 17 +-- src/Entity/User.php | 101 ++++++--------- src/Entity/UserBase.php | 10 +- src/Entity/UserEventCreated.php | 17 +-- src/Entity/Waitinglist.php | 17 +-- src/Migrations/Version20260220171158.php | 72 +++++++++++ src/Repository/RoomsRepository.php | 41 ++++--- src/Security/KeycloakAuthenticator.php | 27 +--- src/Security/UserProvider.php | 5 +- src/Service/AdminService.php | 5 +- src/Service/CloneService.php | 7 +- src/Service/CronService.php | 8 +- src/Service/IcalService.php | 8 +- src/Service/InviteService.php | 15 +-- src/Service/LicenseService.php | 9 +- src/Service/LoggerService.php | 7 +- src/Service/MailerService.php | 21 +--- src/Service/NotificationService.php | 10 +- src/Service/PermissionChangeService.php | 4 +- src/Service/PexelService.php | 6 +- src/Service/ReminderService.php | 8 +- src/Service/RoomService.php | 10 +- src/Service/RoomSpaceService.php | 5 +- src/Service/SchedulingService.php | 7 +- src/Service/ServerUserManagment.php | 7 +- src/Service/StandortService.php | 13 +- src/Service/SubcriptionService.php | 17 +-- src/Service/TeilnehmerExcelService.php | 10 +- src/Service/TransferOwnerShipService.php | 6 +- src/Service/UserCreatorService.php | 6 +- src/Service/UserEventCreateService.php | 6 +- src/Service/UserService.php | 18 +-- src/Service/api/KeycloakService.php | 4 +- src/Service/api/RoomService.php | 10 +- src/Twig/CheckRoomPermissions.php | 7 +- src/Twig/GroupUtils.php | 7 +- src/Twig/ImagePexels.php | 6 +- src/Twig/License.php | 6 +- src/Twig/RoomhasSPace.php | 6 +- src/Twig/RoomsInFuture.php | 9 +- src/Twig/Schedule.php | 5 +- symfony.lock | 12 ++ 94 files changed, 698 insertions(+), 844 deletions(-) create mode 100644 rector.php create mode 100644 src/Migrations/Version20260220171158.php diff --git a/.gitignore b/.gitignore index 1943050..33942cb 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,7 @@ yarn-error.log /phpunit.xml .phpunit.result.cache ###< phpunit/phpunit ### + +###> phpstan/phpstan ### +phpstan.neon +###< phpstan/phpstan ### diff --git a/composer.json b/composer.json index bddcd1c..a715b39 100644 --- a/composer.json +++ b/composer.json @@ -52,6 +52,7 @@ "dama/doctrine-test-bundle": "^v8.0", "doctrine/doctrine-fixtures-bundle": "^3.4", "phpunit/phpunit": "^11.0", + "rector/rector": "^2.3", "symfony/browser-kit": "7.4.*", "symfony/css-selector": "7.4.*", "symfony/debug-bundle": "7.4.*", diff --git a/composer.lock b/composer.lock index 0ea9690..9ced200 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": "121d4db5efc02e8ba70d35b1c6b5b447", + "content-hash": "d47325e40cc7b317999a6173faa55463", "packages": [ { "name": "bacon/bacon-qr-code", @@ -10134,6 +10134,59 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "phpstan/phpstan", + "version": "2.1.39", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", + "reference": "c6f73a2af4cbcd99c931d0fb8f08548cc0fa8224", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2026-02-11T14:48:56+00:00" + }, { "name": "phpunit/php-code-coverage", "version": "11.0.12", @@ -10591,6 +10644,66 @@ ], "time": "2026-02-18T12:37:06+00:00" }, + { + "name": "rector/rector", + "version": "2.3.7", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "9c46ad17f57963932c9788fd1b0f1d07ff450370" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/9c46ad17f57963932c9788fd1b0f1d07ff450370", + "reference": "9c46ad17f57963932c9788fd1b0f1d07ff450370", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "phpstan/phpstan": "^2.1.38" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "suggest": { + "ext-dom": "To manipulate phpunit.xml via the custom-rule command" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "homepage": "https://getrector.com/", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/2.3.7" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2026-02-19T14:44:16+00:00" + }, { "name": "sebastian/cli-parser", "version": "3.0.2", diff --git a/config/packages/doctrine.yaml b/config/packages/doctrine.yaml index 1d94961..893350e 100644 --- a/config/packages/doctrine.yaml +++ b/config/packages/doctrine.yaml @@ -12,6 +12,7 @@ doctrine: mappings: App: is_bundle: false + type: attribute dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..8e4d800 --- /dev/null +++ b/rector.php @@ -0,0 +1,41 @@ +withPaths([ + __DIR__ . '/src', + __DIR__ . '/tests', + ]) + // Optional: parallele Verarbeitung + ->withParallel() + + // Sets: Symfony + Doctrine Modernisierung + Annotation->Attribute + ->withSets([ + // generelle PHP/Symfony Modernisierung (optional, aber hilfreich) + SetList::PHP_82, + SymfonySetList::SYMFONY_64, // oder SYMFONY_70, falls vorhanden in deiner Rector-Version + DoctrineSetList::DOCTRINE_ORM_214, // je nach Doctrine-Version anpassen + + // DAS ist der Kern: Annotationen -> Attributes + DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES, + SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES, + ]) + + // Sinnvoll für Controller/Services: Constructor Injection modernisieren (optional) + ->withRules([ + ClassPropertyAssignToConstructorPromotionRector::class, + // MoveRepositoryFromParentToConstructorRector::class, // optional, wenn du viele Repository-Parents hast + ]) + + // Falls du (noch) Doctrine Annotations via doctrine/annotations benutzt und loswerden willst, + // kann Rector/Upgrade-Flow das später vereinfachen. Erstmal migrieren, dann aufräumen. + ; diff --git a/src/Command/AddSlugToServerCommand.php b/src/Command/AddSlugToServerCommand.php index ba01050..598b361 100644 --- a/src/Command/AddSlugToServerCommand.php +++ b/src/Command/AddSlugToServerCommand.php @@ -5,7 +5,6 @@ use App\Entity\Standort; use App\Service\StandortService; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -13,16 +12,12 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:addSlugToServer', description: 'Adds a slug to all servers, which does not have a slug')] class AddSlugToServerCommand extends Command { - private $em; - private $serverService; - public function __construct(EntityManagerInterface $entityManager, StandortService $serverService,string $name = null) + protected static $defaultName = 'app:addSlugToServer'; + public function __construct(private EntityManagerInterface $em, private StandortService $serverService,string $name = null) { parent::__construct($name); - $this->em = $entityManager; - $this->serverService = $serverService; } protected function configure() diff --git a/src/Command/ConnectServerAndGroupsCommand.php b/src/Command/ConnectServerAndGroupsCommand.php index 1bb628b..9704be0 100644 --- a/src/Command/ConnectServerAndGroupsCommand.php +++ b/src/Command/ConnectServerAndGroupsCommand.php @@ -5,7 +5,6 @@ use App\Entity\KeycloakGroupsToStandorts; use App\Entity\Standort; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -13,14 +12,12 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:connectServerAndGroups', description: 'This connects a kecloak Group or a emaildomain with a server. Please add the server-Id, which can be found in the database and the keycloakgroup (on windows machines you need two leading /all --> //all) or the domain of an email (info@example.com --> example.com)')] class ConnectServerAndGroupsCommand extends Command { - private $em; - public function __construct( EntityManagerInterface $entityManager, string $name = null) + protected static $defaultName = 'app:connectServerAndGroups'; + public function __construct( private EntityManagerInterface $em, string $name = null) { parent::__construct($name); - $this->em = $entityManager; } diff --git a/src/Command/CronSendReminderCommand.php b/src/Command/CronSendReminderCommand.php index 84bc21c..af546e8 100644 --- a/src/Command/CronSendReminderCommand.php +++ b/src/Command/CronSendReminderCommand.php @@ -3,7 +3,6 @@ namespace App\Command; use App\Service\ReminderService; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -11,14 +10,12 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:cron:sendReminder', description: 'Send a reminder to all users which are in a room in the next 10 min')] class CronSendReminderCommand extends Command { - private $reminderService; - public function __construct( ReminderService $reminderService, string $name = null) + protected static $defaultName = 'app:cron:sendReminder'; + public function __construct( private ReminderService $reminderService, string $name = null) { parent::__construct($name); - $this->reminderService = $reminderService; } protected function configure() diff --git a/src/Command/MigrateToAdressbookCommand.php b/src/Command/MigrateToAdressbookCommand.php index a97659f..1efb72f 100644 --- a/src/Command/MigrateToAdressbookCommand.php +++ b/src/Command/MigrateToAdressbookCommand.php @@ -4,7 +4,6 @@ use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -12,9 +11,9 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:migrateToAdressbook', description: 'Add a short description for your command')] class MigrateToAdressbookCommand extends Command { + protected static $defaultName = 'app:migrateToAdressbook'; protected $em; public function __construct(EntityManagerInterface $entityManager, string $name = null) { diff --git a/src/Command/RemoveGroupWithNoLeaderCommand.php b/src/Command/RemoveGroupWithNoLeaderCommand.php index 73bcffd..b99466a 100644 --- a/src/Command/RemoveGroupWithNoLeaderCommand.php +++ b/src/Command/RemoveGroupWithNoLeaderCommand.php @@ -4,7 +4,6 @@ use App\Entity\Rooms; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -12,15 +11,13 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:removeGroupWithNoLeader')] class RemoveGroupWithNoLeaderCommand extends Command { + protected static $defaultName = 'app:removeGroupWithNoLeader'; protected static $defaultDescription = 'Removes all Users which are members of a group thats leader is not user of the room anymore'; - private $em; - public function __construct(EntityManagerInterface $entityManager, string $name = null ) + public function __construct(private EntityManagerInterface $em, string $name = null ) { parent::__construct($name); - $this->em = $entityManager; } protected function configure() diff --git a/src/Command/RemoveServerAndGroupsCommand.php b/src/Command/RemoveServerAndGroupsCommand.php index b434ac6..333b3d9 100644 --- a/src/Command/RemoveServerAndGroupsCommand.php +++ b/src/Command/RemoveServerAndGroupsCommand.php @@ -5,7 +5,6 @@ use App\Entity\KeycloakGroupsToStandorts; use App\Entity\Standort; use Doctrine\ORM\EntityManagerInterface; -use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -13,14 +12,12 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'app:removeServerAndGroups', description: 'This removes a yecloak Group or a emaildomain connection from a server. Please add the server-Id, which can be found in the database and the keycloakgroup (on windows machines you need two leading /all --> //all) or the emaildomain')] class RemoveServerAndGroupsCommand extends Command { - private $em; - public function __construct( EntityManagerInterface $entityManager, string $name = null) + protected static $defaultName = 'app:removeServerAndGroups'; + public function __construct( private EntityManagerInterface $em, string $name = null) { parent::__construct($name); - $this->em = $entityManager; } diff --git a/src/Controller/AdHocMeetingController.php b/src/Controller/AdHocMeetingController.php index 3a8b00d..d490966 100644 --- a/src/Controller/AdHocMeetingController.php +++ b/src/Controller/AdHocMeetingController.php @@ -8,21 +8,21 @@ use App\Service\RoomService; use App\Service\ServerUserManagment; use App\Service\UserService; -use Doctrine\ORM\EntityManagerInterface; use phpDocumentor\Reflection\Types\This; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class AdHocMeetingController extends AbstractController { - #[Route("/room/adhoc/meeting/{userId}/{serverId}", name: "add_hoc_meeting")] - #[MapEntity(expr: "repository.findOneBy({'id': userId})")] - #[MapEntity(expr: "repository.findOneBy({'id': serverId})")] - -public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, EntityManagerInterface $entityManager): Response + /** + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "id"}}) + * @ParamConverter("standort", class="App\Entity\Standort",options={"mapping": {"serverId": "id"}}) + */ + #[Route(path: '/room/adhoc/meeting/{userId}/{serverId}', name: 'add_hoc_meeting')] + public function index(User $user, Standort $standort, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment): Response { if(!in_array($user,$this->getUser()->getAddressbook()->toArray())){ @@ -44,7 +44,7 @@ public function index(User $user, Standort $standort, UserService $userService, $room->setStandort($standort); $room->setName($translator->trans('Event mit {n}',array('{n}'=>$user->getEmail()))); $room->setOnlyRegisteredUsers(false); - $em = $entityManager; + $em = $this->getDoctrine()->getManager(); $em->persist($room); $em->flush(); $user->addRoom($room); diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index e06ad90..5655a48 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -6,20 +6,22 @@ use App\Entity\Standort; use App\Service\AdminService; use Doctrine\DBAL\Types\DateType; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Serializer\SerializerInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; class AdminController extends AbstractController { - #[Route("/admin/server/{server}", name: "admin_server")] - #[MapEntity(expr: "repository.findOneBy({'id': server})")] -public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) + /** + * @ParamConverter("server", class="App\Entity\Server",options={"mapping": {"server": "id"}}) + */ + #[Route(path: '/admin/server/{server}', name: 'admin_server')] + public function server(Standort $server, AdminService $adminService, HttpClientInterface $httpClient, TranslatorInterface $translator) { $countPart = 0; foreach ($server->getRooms() as $room) { diff --git a/src/Controller/AdressbookController.php b/src/Controller/AdressbookController.php index db1d079..db0e39d 100644 --- a/src/Controller/AdressbookController.php +++ b/src/Controller/AdressbookController.php @@ -6,12 +6,11 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class AdressbookController extends AbstractController { - #[Route("/room/adressbook/remove", name: "adressbook_remove_user")] - + #[Route(path: '/room/adressbook/remove', name: 'adressbook_remove_user')] public function index(Request $request): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('id')); diff --git a/src/Controller/AtendeelistController.php b/src/Controller/AtendeelistController.php index b7f149a..c115488 100644 --- a/src/Controller/AtendeelistController.php +++ b/src/Controller/AtendeelistController.php @@ -8,12 +8,11 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class AtendeelistController extends AbstractController { - #[Route("/room/atendeelist/download/excel/{uid}", name: "atendeelist_download_excel")] - + #[Route(path: '/room/atendeelist/download/excel/{uid}', name: 'atendeelist_download_excel')] public function index($uid, TeilnehmerExcelService $teilnehmerExcelService): Response { diff --git a/src/Controller/ChangePermissionsController.php b/src/Controller/ChangePermissionsController.php index 7d075e9..3599899 100644 --- a/src/Controller/ChangePermissionsController.php +++ b/src/Controller/ChangePermissionsController.php @@ -9,13 +9,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class ChangePermissionsController extends AbstractController { - #[Route("/room/change/permissions/shareScreen", name: "change_permissions_screenShare")] - + #[Route(path: '/room/change/permissions/shareScreen', name: 'change_permissions_screenShare')] public function shareScreen(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -32,8 +31,7 @@ public function shareScreen(Request $request, TranslatorInterface $translator, P } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - #[Route("/room/change/permissions/privateMessage", name: "change_permissions_privateMessage")] - + #[Route(path: '/room/change/permissions/privateMessage', name: 'change_permissions_privateMessage')] public function privateMesage(Request $request, TranslatorInterface $translator, PermissionChangeService $permissionChangeService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); @@ -50,8 +48,7 @@ public function privateMesage(Request $request, TranslatorInterface $translator, } return $this->redirectToRoute('dashboard', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.')]); } - #[Route("/room/addModerator", name: "room_add_moderator")] - + #[Route(path: '/room/addModerator', name: 'room_add_moderator')] public function roomTransferModerator(Request $request, PermissionChangeService $permissionChangeService, TranslatorInterface $translator) { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('room')); diff --git a/src/Controller/ConfirmController.php b/src/Controller/ConfirmController.php index 9439546..b64b95b 100644 --- a/src/Controller/ConfirmController.php +++ b/src/Controller/ConfirmController.php @@ -9,18 +9,15 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class ConfirmController extends AbstractController { - private $logger; - - public function __construct(LoggerService $logger) + public function __construct(private LoggerService $logger) { - $this->logger = $logger; } - #[Route("/room/confirm/manuell", name: "confirm_manuell")] + #[Route(path: '/room/confirm/manuell', name: 'confirm_manuell')] public function index(Request $request, SubcriptionService $subcriptionService): Response { $subscriber = $this->getDoctrine()->getRepository(Subscriber::class)->find($request->get('id')); diff --git a/src/Controller/CreateEventsController.php b/src/Controller/CreateEventsController.php index 8bb4251..cae0059 100644 --- a/src/Controller/CreateEventsController.php +++ b/src/Controller/CreateEventsController.php @@ -9,13 +9,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class CreateEventsController extends AbstractController { - #[Route("/room/create/events", name: "create_events")] - + #[Route(path: '/room/create/events', name: 'create_events')] public function index(Request $request, TranslatorInterface $translator, CloneService $cloneService): Response { $roomOld = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('roomId')); diff --git a/src/Controller/CronController.php b/src/Controller/CronController.php index c338870..6b45152 100644 --- a/src/Controller/CronController.php +++ b/src/Controller/CronController.php @@ -10,11 +10,11 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class CronController extends AbstractController { - #[Route("/cron/remember", name: "cron_remember")] + #[Route(path: '/cron/remember', name: 'cron_remember')] public function updateCronAkademie(Request $request, LoggerInterface $logger, UserService $userService, ReminderService $reminderService) { if ($request->get('token') !== $this->getParameter('cronToken')) { diff --git a/src/Controller/DashboardController.php b/src/Controller/DashboardController.php index 148f799..1e555ef 100644 --- a/src/Controller/DashboardController.php +++ b/src/Controller/DashboardController.php @@ -18,7 +18,7 @@ use Firebase\JWT\JWT; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; @@ -29,12 +29,15 @@ class DashboardController extends AbstractController { - - #[Route("/", name: "index")] - public function index(Request $request, RoomSpaceService $roomSpaceService, RoomsRepository $roomsRepository): \Symfony\Component\HttpFoundation\Response + /** + * @param Request $request + * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + */ + #[Route(path: '/', name: 'index')] + public function index(Request $request, RoomSpaceService $roomSpaceService, RoomsRepository $roomsRepository) { - $tmp = $roomsRepository->findRoomsByDashboard(); + $tmp = $roomsRepository->findRoomsOnIndex(); $events = array(); foreach ($tmp as $data) { if ($roomSpaceService->isRoomSpace($data) || $data->getShowInCalendarWhenNoSpace() == null) { @@ -45,9 +48,12 @@ public function index(Request $request, RoomSpaceService $roomSpaceService, Room } - - #[Route("/room/dashboard", name: "dashboard")] - public function dashboard(Request $request, ServerUserManagment $serverUserManagment, RoomsRepository $roomsRepository): \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + /** + * @param Request $request + * @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response + */ + #[Route(path: '/room/dashboard', name: 'dashboard')] + public function dashboard(Request $request, ServerUserManagment $serverUserManagment, RoomsRepository $roomsRepository) { if ($request->get('join_room') && $request->get('type')) { return $this->redirectToRoute('room_join', ['room' => $request->get('join_room'), 't' => $request->get('type')]); diff --git a/src/Controller/DayListController.php b/src/Controller/DayListController.php index 83527f7..71445dc 100644 --- a/src/Controller/DayListController.php +++ b/src/Controller/DayListController.php @@ -9,14 +9,13 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\ResponseHeaderBag; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class DayListController extends AbstractController { - #[Route("/room/day/list", name: "day_list")] - + #[Route(path: '/room/day/list', name: 'day_list')] public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelService): Response { $from = $request->get('from') ? new \DateTime($request->get('from')) : new \DateTime(); @@ -35,8 +34,7 @@ public function index(Request $request, TeilnehmerExcelService $teilnehmerExcelS ->getResult(); return $this->file($teilnehmerExcelService->generateTeilnehmerDayList($rooms,md5(uniqid()) ), $from->format('d.m.Y').' - '.$to->format('d.m.Y') . '.xlsx', ResponseHeaderBag::DISPOSITION_INLINE); } - #[Route("/room/day/list/modal", name: "day_list_modal")] - + #[Route(path: '/room/day/list/modal', name: 'day_list_modal')] public function modal(Request $request, TeilnehmerExcelService $teilnehmerExcelService,TranslatorInterface $translator): Response { diff --git a/src/Controller/HealthCheckController.php b/src/Controller/HealthCheckController.php index d13d5b0..d107ebb 100644 --- a/src/Controller/HealthCheckController.php +++ b/src/Controller/HealthCheckController.php @@ -7,12 +7,11 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class HealthCheckController extends AbstractController { - #[Route("/health/check", name: "health_check",methods: ["GET"])] - + #[Route(path: '/health/check', name: 'health_check', methods: ['GET'])] public function index(): Response { try { diff --git a/src/Controller/IcalController.php b/src/Controller/IcalController.php index a28e87e..0108157 100644 --- a/src/Controller/IcalController.php +++ b/src/Controller/IcalController.php @@ -10,19 +10,20 @@ use Eluceo\iCal\Component\Calendar; use Eluceo\iCal\Component\Event; use Eluceo\iCal\Property\Event\Organizer; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Cache\Adapter\FilesystemAdapter; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Cache\ItemInterface; class IcalController extends AbstractController { - #[Route("/ical/{id}", name: "ical")] - #[MapEntity(expr: "repository.findOneBy({'uid': id})")] - -public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response + /** + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "uid"}}) + */ + #[Route(path: '/ical/{id}', name: 'ical')] + public function index(User $user, UserService $userService,LicenseService $licenseService, IcalService $icalService): Response { $response = new Response(); diff --git a/src/Controller/InvitationController.php b/src/Controller/InvitationController.php index 8a2670f..574061a 100644 --- a/src/Controller/InvitationController.php +++ b/src/Controller/InvitationController.php @@ -4,18 +4,19 @@ use App\Entity\User; use App\Service\InviteService; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; class InvitationController extends AbstractController { - #[Route("/login/invitationAccept/{id}", name: "invitation_accept")] - #[MapEntity(expr: "repository.findOneBy({'registerId': id})")] - -public function index(InviteService $inviteService, User $user, Request $request): Response + /** + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"id": "registerId"}}) + */ + #[Route(path: '/login/invitationAccept/{id}', name: 'invitation_accept')] + public function index(InviteService $inviteService, User $user, Request $request): Response { $inviteService->connectUserWithEmail($user,$this->getUser()); diff --git a/src/Controller/JoinController.php b/src/Controller/JoinController.php index 26bbd45..10360c6 100644 --- a/src/Controller/JoinController.php +++ b/src/Controller/JoinController.php @@ -13,23 +13,20 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Cache\ItemInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; use Symfony\Contracts\Translation\TranslatorInterface; class JoinController extends AbstractController { - private $parameterBag; - - public function __construct(ParameterBagInterface $parameterBag) + public function __construct(private ParameterBagInterface $parameterBag) { - $this->parameterBag = $parameterBag; } - #[Route("/join/{slug}", name: "join_index")] - #[Route("/join", name: "join_index_no_slug")] - public function index(PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, $slug = null ) + #[Route(path: '/join/{slug}', name: 'join_index')] + #[Route(path: '/join', name: 'join_index_no_slug')] + public function index($slug = null, PexelService $pexelService, Request $request, TranslatorInterface $translator, RoomService $roomService, HttpClientInterface $httpClient) { $data = array(); $standort = $this->getDoctrine()->getRepository(Standort::class)->findOneBy(['slug' => $slug]); diff --git a/src/Controller/LoginController.php b/src/Controller/LoginController.php index 87ec880..f2ee93b 100644 --- a/src/Controller/LoginController.php +++ b/src/Controller/LoginController.php @@ -10,20 +10,18 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginController extends AbstractController { - #[Route("/login/auth0_login", name: "login_auth0")] - + #[Route(path: '/login/auth0_login', name: 'login_auth0')] public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('auth0_main')->redirect(['user']); } - #[Route("/login/auth0_login/check", name: "connect_auth0_check")] - + #[Route(path: '/login/auth0_login/check', name: 'connect_auth0_check')] public function check(ClientRegistry $clientRegistry, Request $request) { // ** if you want to *authenticate* the user, then @@ -47,8 +45,9 @@ public function check(ClientRegistry $clientRegistry, Request $request) die; } } - #[Route("/room/logout_keycloak", name: "logout_keycloak")] + + #[Route(path: '/room/logout_keycloak', name: 'logout_keycloak')] public function logout( ClientRegistry $clientRegistry, Request $request diff --git a/src/Controller/LoginControllerKeycloak.php b/src/Controller/LoginControllerKeycloak.php index 580794b..2c848bf 100644 --- a/src/Controller/LoginControllerKeycloak.php +++ b/src/Controller/LoginControllerKeycloak.php @@ -6,19 +6,18 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; class LoginControllerKeycloak extends AbstractController { - #[Route("/login", name: "login_keycloak")] - + #[Route(path: '/login', name: 'login_keycloak')] public function index(ClientRegistry $clientRegistry): Response { return $clientRegistry->getClient('keycloak_main')->redirect(['email','openid','profile']); } - #[Route("/register", name: "register_keycloak")] + #[Route(path: '/register', name: 'register_keycloak')] public function register(ClientRegistry $clientRegistry): Response { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/protocol/openid-connect/registrations?client_id='. @@ -32,15 +31,14 @@ public function check(ClientRegistry $clientRegistry, Request $request) { } - #[Route("/login/keycloak_edit", name: "connect_keycloak_edit")] + #[Route(path: '/login/keycloak_edit', name: 'connect_keycloak_edit')] public function edit(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account'; return $this->redirect($url); } - #[Route("/login/keycloak_password", name: "connect_keycloak_password")] - + #[Route(path: '/login/keycloak_password', name: 'connect_keycloak_password')] public function password(ClientRegistry $clientRegistry, Request $request) { $url = $this->getParameter('KEYCLOAK_URL').'/realms/'.$this->getParameter('KEYCLOAK_REALM').'/account/password'; diff --git a/src/Controller/ParticipantController.php b/src/Controller/ParticipantController.php index 872c705..6485a4f 100644 --- a/src/Controller/ParticipantController.php +++ b/src/Controller/ParticipantController.php @@ -7,14 +7,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function GuzzleHttp\Psr7\str; class ParticipantController extends AbstractController { - #[Route("/room/participant", name: "search_participant")] - + #[Route(path: '/room/participant', name: 'search_participant')] public function index(Request $request, TranslatorInterface $translator): Response { $string = $request->get('search'); diff --git a/src/Controller/ReminderLizenseController.php b/src/Controller/ReminderLizenseController.php index fe13784..c363ef7 100644 --- a/src/Controller/ReminderLizenseController.php +++ b/src/Controller/ReminderLizenseController.php @@ -11,14 +11,13 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; use function Doctrine\ORM\QueryBuilder; class ReminderLizenseController extends AbstractController { - #[Route("/reminder/lizense", name: "reminder_lizense")] - + #[Route(path: '/reminder/lizense', name: 'reminder_lizense')] public function index(LoggerInterface $logger, Request $request, MailerService $mailerService, TranslatorInterface $translator,ParameterBagInterface $parameterBag): Response { if ($request->get('token') !== $parameterBag->get('cronToken')) { diff --git a/src/Controller/RepeatSendController.php b/src/Controller/RepeatSendController.php index 316983a..80967d8 100644 --- a/src/Controller/RepeatSendController.php +++ b/src/Controller/RepeatSendController.php @@ -10,13 +10,12 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class RepeatSendController extends AbstractController { - #[Route("/rooms/repeat/sendAll", name: "room_repeat_send")] - + #[Route(path: '/rooms/repeat/sendAll', name: 'room_repeat_send')] public function index(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); @@ -29,8 +28,8 @@ public function index(Request $request, UserService $userService, TranslatorInte return $this->redirectToRoute('dashboard', array('snack' => $translator->trans('Teilnehmer wurden eingeladen'))); } - #[Route("/rooms/repeat/sendUser", name: "room_repeat_user")] + #[Route(path: '/rooms/repeat/sendUser', name: 'room_repeat_user')] public function toOneUser(Request $request, UserService $userService, TranslatorInterface $translator): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->find($request->get('id')); diff --git a/src/Controller/RoomController.php b/src/Controller/RoomController.php index cccd214..3b9c72e 100644 --- a/src/Controller/RoomController.php +++ b/src/Controller/RoomController.php @@ -19,25 +19,20 @@ use App\Service\RoomService; use phpDocumentor\Reflection\Types\This; use Psr\Log\LoggerInterface; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class RoomController extends AbstractController { - private $translator; - private $logger; - - public function __construct(TranslatorInterface $translator, LoggerService $logger) + public function __construct(private TranslatorInterface $translator, private LoggerService $logger) { - $this->translator = $translator; - $this->logger = $logger; } - #[Route("/room/new", name: "room_new")] + #[Route(path: '/room/new', name: 'room_new')] public function newRoom(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserEventCreateService $userEventCreateService) { $roomOld = null; @@ -142,8 +137,8 @@ public function newRoom(Request $request, UserService $userService, TranslatorIn } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - #[Route("/room/add-user", name: "room_add_user")] + #[Route(path: '/room/add-user', name: 'room_add_user')] public function roomAddUser(Request $request, InviteService $inviteService, UserService $userService) { $newMember = array(); @@ -186,9 +181,11 @@ public function roomAddUser(Request $request, InviteService $inviteService, User return $this->render('room/attendeeModal.twig', array('form' => $form->createView(), 'title' => $title, 'room' => $room)); } - #[Route("/room/join/{t}/{room}", name: "room_join")] - #[MapEntity(mapping: ['room' => 'id'])] + /** + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ + #[Route(path: '/room/join/{t}/{room}', name: 'room_join')] public function joinRoom(RoomService $roomService, Rooms $room, $t) { @@ -200,8 +197,8 @@ function joinRoom(RoomService $roomService, Rooms $room, $t) return $this->redirectToRoute('dashboard', ['join_room' => $room->getId(), 'type' => $t]); } - #[Route("/room/user/remove", name: "room_user_remove")] + #[Route(path: '/room/user/remove', name: 'room_user_remove')] public function roomUserRemove(Request $request, UserService $userService) { @@ -248,8 +245,8 @@ function roomUserRemove(Request $request, UserService $userService) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - #[Route("/room/remove", name: "room_remove")] + #[Route(path: '/room/remove', name: 'room_remove')] public function roomRemove(Request $request, UserService $userService) { @@ -273,8 +270,8 @@ function roomRemove(Request $request, UserService $userService) } return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - #[Route("/room/clone", name: "room_clone")] + #[Route(path: '/room/clone', name: 'room_clone')] public function roomClone(Request $request, UserService $userService, TranslatorInterface $translator, ServerUserManagment $serverUserManagment) { diff --git a/src/Controller/ScheduleController.php b/src/Controller/ScheduleController.php index 3ab56e1..3e96400 100644 --- a/src/Controller/ScheduleController.php +++ b/src/Controller/ScheduleController.php @@ -13,19 +13,18 @@ use App\Service\ServerUserManagment; use App\Service\UserEventCreateService; use App\Service\UserService; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class ScheduleController extends AbstractController { - #[Route("room/schedule/new", name: "schedule_admin_new")] - + #[Route(path: 'room/schedule/new', name: 'schedule_admin_new')] public function new( Request $request, TranslatorInterface $translator, ServerUserManagment $serverUserManagment, UserService $userService, UserEventCreateService $userEventCreateService): Response { if ($request->get('id')) { @@ -107,9 +106,11 @@ public function new( Request $request, TranslatorInterface $translator, ServerUs } return $this->render('base/__newRoomModal.html.twig', array('form' => $form->createView(), 'title' => $title)); } - #[Route("room/schedule/admin/{id}", name: "schedule_admin",methods: ["GET"])] - #[MapEntity(mapping: ['room' => 'id'])] + /** + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ + #[Route(path: 'room/schedule/admin/{id}', name: 'schedule_admin', methods: ['GET'])] public function index(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -121,9 +122,11 @@ public function index(Rooms $rooms, Request $request): Response 'room' => $rooms, ]); } - #[Route("room/schedule/admin/add/{id}", name: "schedule_admin_add",methods: ["POST"])] - #[MapEntity(mapping: ['room' => 'id'])] + /** + * @ParamConverter("room", options={"mapping"={"room"="id"}}) + */ + #[Route(path: 'room/schedule/admin/add/{id}', name: 'schedule_admin_add', methods: ['POST'])] public function add(Rooms $rooms, Request $request): Response { if ($rooms->getModerator() !== $this->getUser()) { @@ -152,10 +155,12 @@ public function add(Rooms $rooms, Request $request): Response return new JsonResponse(array('error' => false)); } - #[Route("room/schedule/admin/remove/{id}", name: "schedule_admin_remove",methods: ["DELETE"])] - #[MapEntity] -public function remove(SchedulingTime $schedulingTime, Request $request): Response + /** + * @ParamConverter("schedulingTime") + */ + #[Route(path: 'room/schedule/admin/remove/{id}', name: 'schedule_admin_remove', methods: ['DELETE'])] + public function remove(SchedulingTime $schedulingTime, Request $request): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { throw new NotFoundHttpException('Room not found'); @@ -175,10 +180,12 @@ public function remove(SchedulingTime $schedulingTime, Request $request): Respon return new JsonResponse(array('error' => false)); } - #[Route("room/schedule/admin/choose/{id}", name: "schedule_admin_choose",methods: ["GET"])] - #[MapEntity] -public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response + /** + * @ParamConverter("schedulingTime") + */ + #[Route(path: 'room/schedule/admin/choose/{id}', name: 'schedule_admin_choose', methods: ['GET'])] + public function choose(SchedulingTime $schedulingTime, Request $request, SchedulingService $schedulingService, TranslatorInterface $translator): Response { if ($schedulingTime->getScheduling()->getRoom()->getModerator() !== $this->getUser()) { throw new NotFoundHttpException('Room not found'); @@ -189,11 +196,13 @@ public function choose(SchedulingTime $schedulingTime, Request $request, Schedul }; return $this->redirectToRoute('dashboard', array('snack' => $text)); } - #[Route("schedule/{scheduleId}/{userId}", name: "schedule_public_main", methods: ["GET"])] - #[MapEntity(expr: "repository.findOneBy({'uid': userId})")] - #[MapEntity(expr: "repository.findOneBy({'uid': scheduleId})")] -public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response + /** + * @ParamConverter("user", class="App\Entity\User",options={"mapping": {"userId": "uid"}}) + * @ParamConverter("scheduling", class="App\Entity\Scheduling",options={"mapping": {"scheduleId": "uid"}}) + */ + #[Route(path: 'schedule/{scheduleId}/{userId}', name: 'schedule_public_main', methods: ['GET'])] + public function public(Scheduling $scheduling, User $user, Request $request, PexelService $pexelService, TranslatorInterface $translator): Response { if (!in_array($user, $scheduling->getRoom()->getUser()->toArray())) { return $this->redirectToRoute('join_index_no_slug', ['snack' => $translator->trans('Fehler, Bitte kontrollieren Sie ihre Daten.'), 'color' => 'danger']); @@ -209,8 +218,8 @@ public function public(Scheduling $scheduling, User $user, Request $request, Pex return $this->render('schedule/schedulePublic.html.twig', array('user' => $user, 'scheduling' => $scheduling, 'room' => $scheduling->getRoom(), 'standort' => $standort)); } - #[Route("schedule/vote", name: "schedule_public_vote", methods: ["POST"])] + #[Route(path: 'schedule/vote', name: 'schedule_public_vote', methods: ['POST'])] public function vote(Request $request, TranslatorInterface $translator): Response { $user = $this->getDoctrine()->getRepository(User::class)->find($request->get('user')); diff --git a/src/Controller/ShareLinkController.php b/src/Controller/ShareLinkController.php index 1fc3daa..cc4c00c 100644 --- a/src/Controller/ShareLinkController.php +++ b/src/Controller/ShareLinkController.php @@ -15,6 +15,7 @@ use App\Service\UserService; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; use Symfony\Component\HttpFoundation\Cookie; @@ -22,27 +23,22 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; -use Symfony\Bridge\Doctrine\Attribute\MapEntity; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Constraints\Json; use Symfony\Contracts\Translation\TranslatorInterface; use function Symfony\Component\String\s; class ShareLinkController extends AbstractController { - private $em; - private $logger; - - public function __construct(EntityManagerInterface $entityManager, LoggerService $logger) + public function __construct(private EntityManagerInterface $em, private LoggerService $logger) { - $this->em = $entityManager; - $this->logger = $logger; - } - #[Route("/room/share/link/{id}", name: "share_link")] - #[MapEntity] -public function index(Rooms $rooms): Response + /** + * @ParamConverter("rooms") + */ + #[Route(path: '/room/share/link/{id}', name: 'share_link')] + public function index(Rooms $rooms): Response { if (!$rooms || !$rooms->getModerator() == $this->getUser() || $rooms->getPublic() != true) { throw new NotFoundHttpException('Not found'); @@ -50,10 +46,12 @@ public function index(Rooms $rooms): Response return $this->render('share_link/__shareLinkModal.html.twig', array('room' => $rooms)); } - #[Route("/room/share/link/accetwaitinglist/{id}", name: "accept_waitingList")] - #[MapEntity] -public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response + /** + * @ParamConverter("waitinglist") + */ + #[Route(path: '/room/share/link/accetwaitinglist/{id}', name: 'accept_waitingList')] + public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $subcriptionService): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { $subcriptionService->createUserRoom($waitinglist->getUser(), $waitinglist->getRoom()); @@ -63,10 +61,12 @@ public function waitinglistAccept(Waitinglist $waitinglist, SubcriptionService $ } return new JsonResponse(array('error' => true)); } - #[Route("/room/share/link/deniewaitinglist/{id}", name: "denie_waitingList")] - #[MapEntity] -public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response + /** + * @ParamConverter("waitinglist") + */ + #[Route(path: '/room/share/link/deniewaitinglist/{id}', name: 'denie_waitingList')] + public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $subcriptionService, UserService $userService, TranslatorInterface $translator): Response { if ($waitinglist->getRoom()->getModerator() == $this->getUser()) { @@ -109,8 +109,8 @@ public function waitinglistDenie(Waitinglist $waitinglist, SubcriptionService $s return new JsonResponse(array('error' => true)); } - #[Route("/subscribe/self/{uid}", name: "public_subscribe_participant")] + #[Route(path: '/subscribe/self/{uid}', name: 'public_subscribe_participant')] public function participants($uid, Request $request, SubcriptionService $subcriptionService, TranslatorInterface $translator, PexelService $pexelService): Response { $rooms = new Rooms(); @@ -222,8 +222,9 @@ public function participants($uid, Request $request, SubcriptionService $subcrip 'color' => $color, ]); } - #[Route("/subscribe/optIn/{uid}", name: "public_subscribe_doupleOptIn")] + + #[Route(path: '/subscribe/optIn/{uid}', name: 'public_subscribe_doupleOptIn')] public function doupleoptin($uid, SubcriptionService $subcriptionService, TranslatorInterface $translator, UserService $userService, PexelService $pexelService): Response { $subscriber = $this->em->getRepository(Subscriber::class)->findOneBy(array('uid' => $uid)); diff --git a/src/Controller/StandortController.php b/src/Controller/StandortController.php index e3c7099..a1d4457 100644 --- a/src/Controller/StandortController.php +++ b/src/Controller/StandortController.php @@ -21,14 +21,13 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; class StandortController extends AbstractController { - #[Route("/server/add", name: "servers_add")] - + #[Route(path: '/server/add', name: 'servers_add')] public function serverAdd(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator) { if ($request->get('id')) { @@ -66,8 +65,8 @@ public function serverAdd(Request $request, ValidatorInterface $validator, Stand return $this->render('servers/__addServerModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'standort' => $standort)); } - #[Route("/server/enterprise", name: "servers_enterprise")] + #[Route(path: '/server/enterprise', name: 'servers_enterprise')] public function serverEnterprise(Request $request, ValidatorInterface $validator, StandortService $serverService, TranslatorInterface $translator, LicenseService $licenseService) { @@ -96,8 +95,8 @@ public function serverEnterprise(Request $request, ValidatorInterface $validator return $this->render('servers/__serverEnterpriseModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'server' => $server)); } - #[Route("/server/add-user", name: "server_add_user")] + #[Route(path: '/server/add-user', name: 'server_add_user')] public function roomAddUser(Request $request, InviteService $inviteService, StandortService $serverService, TranslatorInterface $translator) { $newMember = array(); @@ -133,8 +132,8 @@ public function roomAddUser(Request $request, InviteService $inviteService, Stan return $this->render('servers/permissionModal.html.twig', array('form' => $form->createView(), 'title' => $title, 'users' => $server->getUser(), 'server' => $server)); } - #[Route("/server/user/remove", name: "server_user_remove")] + #[Route(path: '/server/user/remove', name: 'server_user_remove')] public function serverUserRemove(Request $request, TranslatorInterface $translator) { @@ -152,8 +151,8 @@ function serverUserRemove(Request $request, TranslatorInterface $translator) return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - #[Route("/server/delete", name: "server_delete")] + #[Route(path: '/server/delete', name: 'server_delete')] public function serverDelete(Request $request, TranslatorInterface $translator, StandortService $serverService) { @@ -177,8 +176,8 @@ function serverDelete(Request $request, TranslatorInterface $translator, Standor return $this->redirectToRoute('dashboard', ['snack' => $snack]); } - #[Route("/server/check/email", name: "server_check_email")] + #[Route(path: '/server/check/email', name: 'server_check_email')] public function servercheckEmail(Request $request, TranslatorInterface $translator, MailerService $mailerService) { diff --git a/src/Controller/StornoController.php b/src/Controller/StornoController.php index 0c957a3..c95574b 100644 --- a/src/Controller/StornoController.php +++ b/src/Controller/StornoController.php @@ -10,13 +10,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Contracts\Translation\TranslatorInterface; class StornoController extends AbstractController { - #[Route("/public/storno/start/{uidRoom}/{uidUser}", name: "storno_index")] - + #[Route(path: '/public/storno/start/{uidRoom}/{uidUser}', name: 'storno_index')] public function index($uidRoom, $uidUser): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); @@ -34,8 +33,7 @@ public function index($uidRoom, $uidUser): Response 'room'=>$rooms, ]); } - #[Route("/public/storno/accept/{uidRoom}/{uidUser}", name: "storno_accept")] - + #[Route(path: '/public/storno/accept/{uidRoom}/{uidUser}', name: 'storno_accept')] public function accept($uidRoom, $uidUser, UserService $userService,TranslatorInterface $translator, NotificationService $notificationService): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uid'=>$uidRoom)); diff --git a/src/Controller/TransferOwnershipController.php b/src/Controller/TransferOwnershipController.php index f0beaf9..709f6d5 100644 --- a/src/Controller/TransferOwnershipController.php +++ b/src/Controller/TransferOwnershipController.php @@ -12,26 +12,15 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class TransferOwnershipController extends AbstractController { - private $userRepository; - private $roomsRepository; - private $transferOwnerShipService; - - public function __construct( - UserRepository $userRepo, - RoomsRepository $roomsRepository, - TransferOwnerShipService $transferOwnerShipService - ) + public function __construct(private UserRepository $userRepository, private RoomsRepository $roomsRepository, private TransferOwnerShipService $transferOwnerShipService) { - $this->userRepository = $userRepo; - $this->roomsRepository = $roomsRepository; - $this->transferOwnerShipService = $transferOwnerShipService; } - #[Route("/transfer/ownership", name: "transfer_ownership")] + #[Route(path: '/transfer/ownership', name: 'transfer_ownership')] public function index(Request $request): Response { $newOwner = $this->userRepository->find($request->get('new_user')); diff --git a/src/Controller/api/APILicenseController.php b/src/Controller/api/APILicenseController.php index dbe8c5a..c32d850 100644 --- a/src/Controller/api/APILicenseController.php +++ b/src/Controller/api/APILicenseController.php @@ -8,12 +8,11 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; class APILicenseController extends AbstractController { - #[Route("/api/v1/generateLicense", name: "api_generate_license",methods: ["POST"])] - + #[Route(path: '/api/v1/generateLicense', name: 'api_generate_license', methods: ['POST'])] public function index(Request $request, LicenseService $licenseService): Response { return new JsonResponse($licenseService->generateNewLicense( diff --git a/src/Controller/api/APIRoomController.php b/src/Controller/api/APIRoomController.php index d53a258..c8966d8 100644 --- a/src/Controller/api/APIRoomController.php +++ b/src/Controller/api/APIRoomController.php @@ -16,13 +16,12 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use function GuzzleHttp\default_user_agent; class APIRoomController extends AbstractController { - #[Route("/api/v1/room", name: "api_room_create",methods: ["POST"])] - + #[Route(path: '/api/v1/room', name: 'api_room_create', methods: ['POST'])] public function index(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { @@ -58,8 +57,8 @@ public function index(LicenseService $licenseService, Request $request, Paramete $room = $roomService->createRoom($user, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich angelegt')); } - #[Route("/api/v1/room", name: "apiV1_roomDelete", methods: ["DELETE"])] + #[Route(path: '/api/v1/room', name: 'apiV1_roomDelete', methods: ['DELETE'])] public function removeRoom(Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -77,8 +76,8 @@ public function removeRoom(Request $request, ParameterBagInterface $parameterBag $roomService->deleteRoom($room); return new JsonResponse(array('error' => false, 'text' => 'Erfolgreich gelöscht')); } - #[Route("/api/v1/room", name: "api_room_edit",methods: ["PUT"])] + #[Route(path: '/api/v1/room', name: 'api_room_edit', methods: ['PUT'])] public function editRoom(LicenseService $licenseService, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService): Response { @@ -106,8 +105,8 @@ public function editRoom(LicenseService $licenseService, Request $request, Para $room = $roomService->editRoom($room, $server, $start, $duration, $name); return new JsonResponse(array('error' => false, 'uid' => $room->getUidReal(), 'text' => 'Meeting erfolgreich geändert')); } - #[Route("/api/v1/serverInfo", name: "api_user_get_server",methods: ["GET"])] + #[Route(path: '/api/v1/serverInfo', name: 'api_user_get_server', methods: ['GET'])] public function getServers(ServerUserManagment $serverUserManagment, Request $request, ParameterBagInterface $parameterBag, RoomService $roomService, KeycloakService $keycloakService): Response { diff --git a/src/Controller/api/APIUserController.php b/src/Controller/api/APIUserController.php index fa90b64..3412403 100644 --- a/src/Controller/api/APIUserController.php +++ b/src/Controller/api/APIUserController.php @@ -11,17 +11,17 @@ use App\Service\LicenseService; use App\Service\UserService; use PHPUnit\Util\Json; +use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Generator\UrlGenerator; class APIUserController extends AbstractController { - #[Route("/api/v1/getAllEntries", name: "apiV1_getAllEntries")] - + #[Route(path: '/api/v1/getAllEntries', name: 'apiV1_getAllEntries')] public function index(): Response { $rooms = $this->getDoctrine()->getRepository(Rooms::class)->findRoomsForUser($this->getUser()); @@ -39,8 +39,8 @@ public function index(): Response $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - #[Route("/api/v1/info/{uidReal}", name: "apiV1_roomGetUser",methods: ["GET"])] + #[Route(path: '/api/v1/info/{uidReal}', name: 'apiV1_roomGetUser', methods: ['GET'])] public function getRoomInformations(Request $request, $uidReal, RoomService $roomService): Response { $room = $this->getDoctrine()->getRepository(Rooms::class)->findOneBy(array('uidReal' => $uidReal)); @@ -48,8 +48,8 @@ public function getRoomInformations(Request $request, $uidReal, RoomService $roo $response->headers->set('Access-Control-Allow-Origin', '*'); return $response; } - #[Route("/api/v1/user", name: "apiV1_roomAddUser", methods: ["POST"])] + #[Route(path: '/api/v1/user', name: 'apiV1_roomAddUser', methods: ['POST'])] public function addUserToRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, UserService $userService, RoomService $roomService): Response { @@ -63,8 +63,8 @@ public function addUserToRoom(LicenseService $licenseService, Request $request, $email = $request->get('email'); return new JsonResponse($roomService->addUserToRoom($room, $email)); } - #[Route("/api/v1/user", name: "apiV1_roomDeleteUser", methods: ["DELETE"])] + #[Route(path: '/api/v1/user', name: 'apiV1_roomDeleteUser', methods: ['DELETE'])] public function removeUserFromRoom(LicenseService $licenseService, Request $request, InviteService $inviteService, RoomService $roomService): Response { diff --git a/src/DataFixtures/User.php b/src/DataFixtures/User.php index 2d7ca44..33d07af 100644 --- a/src/DataFixtures/User.php +++ b/src/DataFixtures/User.php @@ -7,7 +7,7 @@ class User extends Fixture { - public function load(ObjectManager $manager): void + public function load(ObjectManager $manager):void { // $product = new Product(); // $manager->persist($product); diff --git a/src/Entity/ApiKeys.php b/src/Entity/ApiKeys.php index adc0f6a..eb1275c 100644 --- a/src/Entity/ApiKeys.php +++ b/src/Entity/ApiKeys.php @@ -5,26 +5,21 @@ use App\Repository\ApiKeysRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: ApiKeysRepository::class)] - +#[ORM\Entity(repositoryClass: ApiKeysRepository::class)] class ApiKeys { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $clientId; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $clientSecret; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $createdAt; public function getId(): ?int diff --git a/src/Entity/FreeField.php b/src/Entity/FreeField.php index a94c04d..9539258 100644 --- a/src/Entity/FreeField.php +++ b/src/Entity/FreeField.php @@ -7,31 +7,25 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: FreeFieldRepository::class)] - +#[ORM\Entity(repositoryClass: FreeFieldRepository::class)] class FreeField { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $label; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $required; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "freeFields",cascade: ["persist"])] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'freeFields', cascade: ['persist'])] private $Room; - #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: "freeField")] - + #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: 'freeField')] private $yes; public function __construct() diff --git a/src/Entity/FreeFieldsUserAnswer.php b/src/Entity/FreeFieldsUserAnswer.php index 9b2662e..5fb7d3e 100644 --- a/src/Entity/FreeFieldsUserAnswer.php +++ b/src/Entity/FreeFieldsUserAnswer.php @@ -5,32 +5,26 @@ use App\Repository\FreeFieldsUserAnswerRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: FreeFieldsUserAnswerRepository::class)] - +#[ORM\Entity(repositoryClass: FreeFieldsUserAnswerRepository::class)] class FreeFieldsUserAnswer { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $answer; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "freeFieldsUserAnswers")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'freeFieldsUserAnswers')] private $user; - #[ORM\ManyToOne(targetEntity: FreeField::class, inversedBy: "yes")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: FreeField::class, inversedBy: 'yes')] private $freeField; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $createdAt; public function getId(): ?int diff --git a/src/Entity/Group.php b/src/Entity/Group.php index 94092dd..2baaccd 100644 --- a/src/Entity/Group.php +++ b/src/Entity/Group.php @@ -7,29 +7,24 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: GroupRepository::class)] - #[ORM\Table(name: "`group`")] - +#[ORM\Table(name: '`group`')] +#[ORM\Entity(repositoryClass: GroupRepository::class)] class Group { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "eventGroups")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'eventGroups')] private $leader; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "groups")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'groups')] private $rooms; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "eventGroupsMemebers")] - + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'eventGroupsMemebers')] private $members; public function __construct() diff --git a/src/Entity/KeycloakGroupsToStandorts.php b/src/Entity/KeycloakGroupsToStandorts.php index 30c4089..287a89e 100644 --- a/src/Entity/KeycloakGroupsToStandorts.php +++ b/src/Entity/KeycloakGroupsToStandorts.php @@ -5,23 +5,19 @@ use App\Repository\KeycloakGroupsToStandortsRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: KeycloakGroupsToStandortsRepository::class)] - +#[ORM\Entity(repositoryClass: KeycloakGroupsToStandortsRepository::class)] class KeycloakGroupsToStandorts { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: "keycloakGroups")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: 'keycloakGroups')] private $standort; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $keycloakGroup; public function getId(): ?int diff --git a/src/Entity/License.php b/src/Entity/License.php index c091d71..5d233da 100644 --- a/src/Entity/License.php +++ b/src/Entity/License.php @@ -8,31 +8,25 @@ use Doctrine\ORM\Mapping as ORM; use phpDocumentor\Reflection\Types\This; - #[ORM\Entity(repositoryClass: LicenseRepository::class)] - +#[ORM\Entity(repositoryClass: LicenseRepository::class)] class License { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $licenseKey; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $license; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $validUntil; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $url; diff --git a/src/Entity/Rooms.php b/src/Entity/Rooms.php index ff6e5c1..840e15e 100644 --- a/src/Entity/Rooms.php +++ b/src/Entity/Rooms.php @@ -7,150 +7,142 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: RoomsRepository::class)] - #[ORM\HasLifecycleCallbacks] +#[ORM\Entity(repositoryClass: RoomsRepository::class)] +#[ORM\HasLifecycleCallbacks] class Rooms { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] + #[ORM\Column(type: 'text')] private $name; - #[ORM\Column(type: "datetime", nullable: true)] + #[ORM\Column(type: 'datetime', nullable: true)] private $start; - #[ORM\Column(type: "datetime", nullable: true)] + #[ORM\Column(type: 'datetime', nullable: true)] private $enddate; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "rooms")] + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'rooms')] private $user; - #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: "rooms")] #[ORM\JoinColumn(nullable: false)] + #[ORM\ManyToOne(targetEntity: Standort::class, inversedBy: 'rooms')] private $standort; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $uid; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "roomModerator")] #[ORM\JoinColumn(nullable: true)] + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'roomModerator')] private $moderator; - #[ORM\Column(type: "float")] + #[ORM\Column(type: 'float')] private $duration; - #[ORM\Column(type: "integer")] + #[ORM\Column(type: 'integer')] private $sequence; - #[ORM\Column(type: "text",nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $uidReal; - #[ORM\Column(type: "boolean")] + #[ORM\Column(type: 'boolean')] private $onlyRegisteredUsers= false; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $agenda; - #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: "room")] + #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: 'room')] private $userAttributes; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $dissallowScreenshareGlobal; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $dissallowPrivateMessage; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $public = true; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $showRoomOnJoinpage; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $uidParticipant; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $uidModerator; - #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: "room")] + #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: 'room')] private $subscribers; - #[ORM\Column(type: "integer", nullable: true)] + #[ORM\Column(type: 'integer', nullable: true)] private $maxParticipants; - #[ORM\OneToMany(targetEntity: Scheduling::class, mappedBy: "room")] + #[ORM\OneToMany(targetEntity: Scheduling::class, mappedBy: 'room')] private $schedulings; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $scheduleMeeting; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $waitinglist; - #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: "room")] + #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: 'room')] private $waitinglists; - #[ORM\Column(type: "integer", nullable: true)] + #[ORM\Column(type: 'integer', nullable: true)] private $maxWaitingList; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "roomsStorno")] - #[ORM\JoinTable(name: "rooms_storno")] + #[ORM\JoinTable(name: 'rooms_storno')] + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'roomsStorno')] private $storno; - #[ORM\OneToMany(targetEntity: Group::class, mappedBy: "rooms")] + #[ORM\OneToMany(targetEntity: Group::class, mappedBy: 'rooms')] private $groups; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $allowGroups; - #[ORM\Column(type: "integer", nullable: true)] + #[ORM\Column(type: 'integer', nullable: true)] private $maxGroupSize; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $showRoomOnCalendar; - #[ORM\Column(type: "datetime", nullable: true)] + #[ORM\Column(type: 'datetime', nullable: true)] private $entryDateTime; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $promoter; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $additionalInfo; - #[ORM\Column(type: "boolean", nullable: true)] + #[ORM\Column(type: 'boolean', nullable: true)] private $showInCalendarWhenNoSpace; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $textWhenNoSpace; - #[ORM\Column(type: "text", nullable: true)] + #[ORM\Column(type: 'text', nullable: true)] private $textWhenRoomWarteliste; - #[ORM\OneToMany(targetEntity: FreeField::class, mappedBy: "Room",cascade: ["persist"])] - + #[ORM\OneToMany(targetEntity: FreeField::class, mappedBy: 'Room', cascade: ['persist'])] private $freeFields; - #[ORM\Column(type: "datetime", nullable: true)] - + #[ORM\Column(type: 'datetime', nullable: true)] private $showAfterDate; - #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: "event", orphanRemoval: true)] - + #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: 'event', orphanRemoval: true)] private $userEventCreateds; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $sendEmailOnRegister; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $allowQuickRegistration; public function __construct() diff --git a/src/Entity/RoomsUser.php b/src/Entity/RoomsUser.php index 5c44c51..6ec8aa4 100644 --- a/src/Entity/RoomsUser.php +++ b/src/Entity/RoomsUser.php @@ -5,37 +5,30 @@ use App\Repository\RoomsUserRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: RoomsUserRepository::class )] - #[ORM\Table(name: "userRoomsAttributes")] - +#[ORM\Table(name: 'userRoomsAttributes')] +#[ORM\Entity(repositoryClass: RoomsUserRepository::class)] class RoomsUser { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "roomsNew")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'roomsNew')] private $user; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "userAttributes")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'userAttributes')] private $room; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $shareDisplay; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $moderator; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $privateMessage; diff --git a/src/Entity/Scheduling.php b/src/Entity/Scheduling.php index e5c0896..91990d0 100644 --- a/src/Entity/Scheduling.php +++ b/src/Entity/Scheduling.php @@ -7,31 +7,25 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: SchedulingRepository::class)] - +#[ORM\Entity(repositoryClass: SchedulingRepository::class)] class Scheduling { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $uid; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $description; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "schedulings")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'schedulings')] private $room; - #[ORM\OneToMany(targetEntity: SchedulingTime::class, mappedBy: "scheduling")] - + #[ORM\OneToMany(targetEntity: SchedulingTime::class, mappedBy: 'scheduling')] private $schedulingTimes; public function __construct() diff --git a/src/Entity/SchedulingTime.php b/src/Entity/SchedulingTime.php index 8168f3f..bba5e48 100644 --- a/src/Entity/SchedulingTime.php +++ b/src/Entity/SchedulingTime.php @@ -7,27 +7,22 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: SchedulingTimeRepository::class)] - +#[ORM\Entity(repositoryClass: SchedulingTimeRepository::class)] class SchedulingTime { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $time; - #[ORM\ManyToOne(targetEntity: Scheduling::class, inversedBy: "schedulingTimes")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Scheduling::class, inversedBy: 'schedulingTimes')] private $scheduling; - #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: "scheduleTime")] - + #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: 'scheduleTime')] private $schedulingTimeUsers; public function __construct() diff --git a/src/Entity/SchedulingTimeUser.php b/src/Entity/SchedulingTimeUser.php index a310eea..3a252dd 100644 --- a/src/Entity/SchedulingTimeUser.php +++ b/src/Entity/SchedulingTimeUser.php @@ -5,28 +5,23 @@ use App\Repository\SchedulingTimeUserRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: SchedulingTimeUserRepository::class)] - +#[ORM\Entity(repositoryClass: SchedulingTimeUserRepository::class)] class SchedulingTimeUser { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "schedulingTimeUsers")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'schedulingTimeUsers')] private $user; - #[ORM\ManyToOne(targetEntity: SchedulingTime::class, inversedBy: "schedulingTimeUsers")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: SchedulingTime::class, inversedBy: 'schedulingTimeUsers')] private $scheduleTime; - #[ORM\Column(type: "integer", nullable: true)] - + #[ORM\Column(type: 'integer', nullable: true)] private $accept; public function getId(): ?int diff --git a/src/Entity/Standort.php b/src/Entity/Standort.php index 8fede09..e742989 100644 --- a/src/Entity/Standort.php +++ b/src/Entity/Standort.php @@ -7,127 +7,98 @@ use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: StandortRepository::class)] - +#[ORM\Entity(repositoryClass: StandortRepository::class)] class Standort { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "servers")] - + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'servers')] private $user; - #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: "server")] - + #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: 'server')] private $rooms; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "serverAdmins")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'serverAdmins')] private $administrator; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $logoUrl; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpHost; - #[ORM\Column(type: "integer", nullable: true)] - + #[ORM\Column(type: 'integer', nullable: true)] private $smtpPort; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpPassword; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpUsername; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpEncryption; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpEmail; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $smtpSenderName; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $slug; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $privacyPolicy; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $licenseKey; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $apiKey; - #[ORM\Column(type: "string", length: 7, nullable: true)] - + #[ORM\Column(type: 'string', length: 7, nullable: true)] private $staticBackgroundColor; - #[ORM\Column(type: "boolean", nullable: true)] - + #[ORM\Column(type: 'boolean', nullable: true)] private $showStaticBackgroundColor; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $serverEmailHeader; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $serverEmailBody; - #[ORM\OneToMany(targetEntity: KeycloakGroupsToStandorts::class, mappedBy: "server")] - + #[ORM\OneToMany(targetEntity: KeycloakGroupsToStandorts::class, mappedBy: 'server')] private $keycloakGroups; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $name; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $street; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $number; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $roomnumber; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $plz; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $city; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $directions; diff --git a/src/Entity/Subscriber.php b/src/Entity/Subscriber.php index ca59429..78192f3 100644 --- a/src/Entity/Subscriber.php +++ b/src/Entity/Subscriber.php @@ -5,28 +5,23 @@ use App\Repository\SubscriberRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: SubscriberRepository::class)] - +#[ORM\Entity(repositoryClass: SubscriberRepository::class)] class Subscriber { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "subscribers")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'subscribers')] private $user; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "subscribers")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'subscribers')] private $room; - #[ORM\Column(type: "text")] - + #[ORM\Column(type: 'text')] private $uid; public function getId(): ?int diff --git a/src/Entity/User.php b/src/Entity/User.php index bf98507..3ee20c7 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -5,133 +5,104 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use App\Entity\UserBase as BaseUser; use Symfony\Component\Validator\Constraints as Assert; use App\Repository\UserRepository; - #[ORM\Table(name: "fos_user")] - #[ORM\Entity(repositoryClass: UserRepository::class)] - +#[ORM\Table(name: 'fos_user')] +#[ORM\Entity(repositoryClass: UserRepository::class)] class User extends BaseUser { - #[ORM\Id] - #[ORM\Column(type: "integer")] - #[ORM\GeneratedValue(strategy: "AUTO")] - + #[ORM\Id] + #[ORM\Column(type: 'integer')] + #[ORM\GeneratedValue(strategy: 'AUTO')] protected $id; - #[Assert\NotBlank(message: "fos_user.password.blank", groups: ["Registration", "ResetPassword", "ChangePassword"])] - #[Assert\Length(min: 8, minMessage: "fos_user.password.short", groups: ["Registration", "Profile", "ResetPassword", "ChangePassword"])] - + #[Assert\NotBlank(message: 'fos_user.password.blank', groups: ['Registration', 'ResetPassword', 'ChangePassword'])] + #[Assert\Length(min: 8, minMessage: 'fos_user.password.short', groups: ['Registration', 'Profile', 'ResetPassword', 'ChangePassword'])] protected $plainPassword; - #[ORM\Column(type: "text",nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $email; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $keycloakId; - #[ORM\Column(type: "datetime",nullable: true)] - + #[ORM\Column(type: 'datetime', nullable: true)] private $createdAt; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $username; - #[ORM\Column(type: "datetime", nullable: true)] - + #[ORM\Column(type: 'datetime', nullable: true)] private $lastLogin; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $firstName; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $lastName; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $registerId; - #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: "user")] - + #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: 'user')] private $rooms; - #[ORM\ManyToMany(targetEntity: Standort::class, mappedBy: "user")] - + #[ORM\ManyToMany(targetEntity: Standort::class, mappedBy: 'user')] private $standort; - #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: "moderator")] - + #[ORM\OneToMany(targetEntity: Rooms::class, mappedBy: 'moderator')] private $roomModerator; - #[ORM\OneToMany(targetEntity: Standort::class, mappedBy: "administrator")] - + #[ORM\OneToMany(targetEntity: Standort::class, mappedBy: 'administrator')] private $standortAdmins; - #[ORM\ManyToMany(targetEntity: User::class, inversedBy: "addressbookInverse")] - + #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'addressbookInverse')] private $addressbook; - #[ORM\ManyToMany(targetEntity: User::class, mappedBy: "addressbook")] - + #[ORM\ManyToMany(targetEntity: User::class, mappedBy: 'addressbook')] private $addressbookInverse; - #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: "user")] - + #[ORM\OneToMany(targetEntity: RoomsUser::class, mappedBy: 'user')] private $roomsAttributes; - #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: "user")] - + #[ORM\OneToMany(targetEntity: Subscriber::class, mappedBy: 'user')] private $subscribers; - #[ORM\Column(type: "array", nullable: true,name: "keycloakGroup")] - - private $groups = []; - - #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: "user")] + #[ORM\Column(type: Types::JSON, nullable: true, name: 'keycloakGroup')] + private ?array $groups = []; + #[ORM\OneToMany(targetEntity: SchedulingTimeUser::class, mappedBy: 'user')] private $schedulingTimeUsers; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $uid; - #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: "user")] - + #[ORM\OneToMany(targetEntity: Waitinglist::class, mappedBy: 'user')] private $waitinglists; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $phone; - #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: "storno")] - + #[ORM\ManyToMany(targetEntity: Rooms::class, mappedBy: 'storno')] private $roomsStorno; - #[ORM\OneToMany(targetEntity: Group::class, mappedBy: "leader")] - + #[ORM\OneToMany(targetEntity: Group::class, mappedBy: 'leader')] private $eventGroups; - #[ORM\ManyToMany(targetEntity: Group::class, mappedBy: "members")] - + #[ORM\ManyToMany(targetEntity: Group::class, mappedBy: 'members')] private $eventGroupsMemebers; - #[ORM\Column(type: "text", nullable: true)] - + #[ORM\Column(type: 'text', nullable: true)] private $address; - #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: "user")] - + #[ORM\OneToMany(targetEntity: FreeFieldsUserAnswer::class, mappedBy: 'user')] private $freeFieldsUserAnswers; - #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: "user", orphanRemoval: true)] - + #[ORM\OneToMany(targetEntity: UserEventCreated::class, mappedBy: 'user', orphanRemoval: true)] private $userEventCreateds; diff --git a/src/Entity/UserBase.php b/src/Entity/UserBase.php index 4445d96..4fe0780 100644 --- a/src/Entity/UserBase.php +++ b/src/Entity/UserBase.php @@ -10,14 +10,16 @@ class UserBase implements UserInterface { - #[ORM\Column(type: "string", length: 180, unique: true)] + #[ORM\Column(type: 'string', length: 180, unique: true)] private $uuid; - #[ORM\Column(type: "json")] + #[ORM\Column(type: 'json')] private $roles = []; - - #[ORM\Column(type: "string")] + /** + * @var string The hashed password + */ + #[ORM\Column(type: 'string')] private $password; public function getId(): ?int diff --git a/src/Entity/UserEventCreated.php b/src/Entity/UserEventCreated.php index 7111fe4..679fec2 100644 --- a/src/Entity/UserEventCreated.php +++ b/src/Entity/UserEventCreated.php @@ -5,28 +5,23 @@ use App\Repository\UserEventCreatedRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: UserEventCreatedRepository::class)] - +#[ORM\Entity(repositoryClass: UserEventCreatedRepository::class)] class UserEventCreated { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "userEventCreateds")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'userEventCreateds')] private $user; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "userEventCreateds")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'userEventCreateds')] private $event; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $created_at; public function getId(): ?int diff --git a/src/Entity/Waitinglist.php b/src/Entity/Waitinglist.php index 73a8aaf..34789a2 100644 --- a/src/Entity/Waitinglist.php +++ b/src/Entity/Waitinglist.php @@ -5,28 +5,23 @@ use App\Repository\WaitinglistRepository; use Doctrine\ORM\Mapping as ORM; - #[ORM\Entity(repositoryClass: WaitinglistRepository::class)] - +#[ORM\Entity(repositoryClass: WaitinglistRepository::class)] class Waitinglist { - #[ORM\Id] + #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(type: "integer")] - + #[ORM\Column(type: 'integer')] private $id; - #[ORM\ManyToOne(targetEntity: User::class, inversedBy: "waitinglists")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'waitinglists')] private $user; - #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: "waitinglists")] #[ORM\JoinColumn(nullable: false)] - + #[ORM\ManyToOne(targetEntity: Rooms::class, inversedBy: 'waitinglists')] private $room; - #[ORM\Column(type: "datetime")] - + #[ORM\Column(type: 'datetime')] private $createdAt; public function getId(): ?int diff --git a/src/Migrations/Version20260220171158.php b/src/Migrations/Version20260220171158.php new file mode 100644 index 0000000..e20f328 --- /dev/null +++ b/src/Migrations/Version20260220171158.php @@ -0,0 +1,72 @@ +connection->fetchAllAssociative( + 'SELECT id, keycloakGroup FROM fos_user WHERE keycloakGroup IS NOT NULL' + ); + + foreach ($rows as $row) { + $id = $row['id']; + $val = $row['keycloakGroup']; + + // Schon gültiges JSON? Dann nichts tun. + $isValid = (int) $this->connection->fetchOne('SELECT JSON_VALID(?)', [$val]); + if ($isValid === 1) { + continue; + } + + $decoded = null; + + // Versuch 1: PHP serialized (typisch bei DC2Type:array) + $tmp = @unserialize((string) $val); + if ($tmp !== false || $val === 'b:0;') { + if ($tmp === null) { + $decoded = null; + } elseif (is_array($tmp)) { + $decoded = $tmp; + } else { + $decoded = [$tmp]; + } + } else { + // Versuch 2: Komma-separiert (Fallback) + $parts = array_values(array_filter( + array_map('trim', explode(',', (string) $val)), + static fn ($x) => $x !== '' + )); + $decoded = $parts ?: null; + } + + $json = $decoded === null ? null : json_encode($decoded, JSON_THROW_ON_ERROR); + + $this->addSql( + 'UPDATE fos_user SET keycloakGroup = ? WHERE id = ?', + [$json, $id] + ); + } + + // 2) Jetzt erst Column auf JSON umstellen + $this->addSql('ALTER TABLE fos_user CHANGE keycloakGroup keycloakGroup JSON DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // Zurück auf LONGTEXT (wie vorher) + $this->addSql("ALTER TABLE fos_user CHANGE keycloakGroup keycloakGroup LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)'"); + } +} diff --git a/src/Repository/RoomsRepository.php b/src/Repository/RoomsRepository.php index be80a39..9e10f4e 100644 --- a/src/Repository/RoomsRepository.php +++ b/src/Repository/RoomsRepository.php @@ -49,6 +49,29 @@ public function findOneBySomeField($value): ?Rooms ; } */ + + /** + * @return Rooms[] Returns an array of Rooms objects + */ + + public function findRoomsOnIndex() + { + $qb = $this->createQueryBuilder('rooms'); + $now = new \DateTime(); + $qb->andWhere('rooms.showRoomOnCalendar = true') + ->andWhere($qb->expr()->isNotNull('rooms.moderator')) + ->andWhere($qb->expr()->orX( + $qb->expr()->isNull('rooms.showAfterDate'), + $qb->expr()->lte('rooms.showAfterDate',':now') + )) + ->setParameter('now',$now); + return $qb->getQuery()->getResult(); + + + } + + + public function findRoomsInFuture(User $user) { $now = new \DateTime(); @@ -157,22 +180,4 @@ public function findRoomsFutureAndPast(User $user,$timeBack) ->getQuery() ->getResult(); } - /** - * @return Rooms[] Returns an array of Rooms objects - */ - public function findRoomsByDashboard() - { - $qb = $this->createQueryBuilder('rooms'); - $now = new \DateTime(); - $qb->andWhere('rooms.showRoomOnCalendar = true') - ->andWhere($qb->expr()->isNotNull('rooms.moderator')) - ->andWhere($qb->expr()->orX( - $qb->expr()->isNull('rooms.showAfterDate'), - $qb->expr()->lte('rooms.showAfterDate',':now') - )) - ->setParameter('now',$now); - return $qb->getQuery()->getResult(); - - - } } diff --git a/src/Security/KeycloakAuthenticator.php b/src/Security/KeycloakAuthenticator.php index e5ca296..d0adcc3 100644 --- a/src/Security/KeycloakAuthenticator.php +++ b/src/Security/KeycloakAuthenticator.php @@ -30,34 +30,11 @@ class KeycloakAuthenticator extends OAuth2Authenticator implements AuthenticationEntryPointInterface { use TargetPathTrait; - - private $clientRegistry; - private $em; - private $router; - private $tokenStorage; private $userManager; - private $paramterBag; - private $userCreatorService; private $indexer; - private $logger; - - public function __construct( - LoggerInterface $logger, - ParameterBagInterface $parameterBag, - TokenStorageInterface $tokenStorage, - ClientRegistry $clientRegistry, - EntityManagerInterface $em, - RouterInterface $router, - UserCreatorService $userCreatorService - ) + + public function __construct(private LoggerInterface $logger, private ParameterBagInterface $paramterBag, private TokenStorageInterface $tokenStorage, private ClientRegistry $clientRegistry, private EntityManagerInterface $em, private RouterInterface $router, private UserCreatorService $userCreatorService) { - $this->clientRegistry = $clientRegistry; - $this->em = $em; - $this->router = $router; - $this->tokenStorage = $tokenStorage; - $this->paramterBag = $parameterBag; - $this->logger = $logger; - $this->userCreatorService = $userCreatorService; } public function supports(Request $request): bool diff --git a/src/Security/UserProvider.php b/src/Security/UserProvider.php index 52a4c8f..231f9bc 100644 --- a/src/Security/UserProvider.php +++ b/src/Security/UserProvider.php @@ -12,8 +12,6 @@ class UserProvider implements UserProviderInterface { - private $entityManager; - /** * UserProvider constructor. * @param EntityManagerInterface $entityManager @@ -24,9 +22,8 @@ class UserProvider implements UserProviderInterface * @internal param Session $session * @internal param UserOptionService $userOptionsService */ - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $entityManager) { - $this->entityManager = $entityManager; } /** diff --git a/src/Service/AdminService.php b/src/Service/AdminService.php index 6a4ad7b..b999288 100644 --- a/src/Service/AdminService.php +++ b/src/Service/AdminService.php @@ -20,11 +20,8 @@ class AdminService { - private $em; - - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $em) { - $this->em = $entityManager; } public function createChart(Standort $server) diff --git a/src/Service/CloneService.php b/src/Service/CloneService.php index 314cfbc..efeabf3 100644 --- a/src/Service/CloneService.php +++ b/src/Service/CloneService.php @@ -7,13 +7,8 @@ class CloneService { - private $userService; - private $em; - - public function __construct(UserService $userService, EntityManagerInterface $entityManager) + public function __construct(private UserService $userService, private EntityManagerInterface $em) { - $this->userService = $userService; - $this->em = $entityManager; } public function cloneEvent(Rooms $rooms, $distance, $unit, $addUser) diff --git a/src/Service/CronService.php b/src/Service/CronService.php index 74cd043..4ed6b4e 100644 --- a/src/Service/CronService.php +++ b/src/Service/CronService.php @@ -16,14 +16,8 @@ class CronService { - private $em; - private $logger; - - public function __construct(EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder, LoggerInterface $logger) + public function __construct(private EntityManagerInterface $em, FormFactoryInterface $formBuilder, private LoggerInterface $logger) { - $this->em = $entityManager; - $this->logger = $logger; - } function check($request) diff --git a/src/Service/IcalService.php b/src/Service/IcalService.php index 4839091..2751965 100644 --- a/src/Service/IcalService.php +++ b/src/Service/IcalService.php @@ -15,15 +15,9 @@ class IcalService { - private $licenseService; - private $em; - private $userService; private $user; - public function __construct(LicenseService $licenseService, EntityManagerInterface $entityManager,UserService $userService) + public function __construct(private LicenseService $licenseService, private EntityManagerInterface $em, private UserService $userService) { - $this->licenseService = $licenseService; - $this->em = $entityManager; - $this->userService = $userService; } public function getIcal(User $user) diff --git a/src/Service/InviteService.php b/src/Service/InviteService.php index 4171b68..eb1a103 100644 --- a/src/Service/InviteService.php +++ b/src/Service/InviteService.php @@ -20,21 +20,8 @@ class InviteService { - private $em; - private $translator; - private $router; - private $mailer; - private $parameterBag; - private $twig; - - public function __construct(Environment $environment, ParameterBagInterface $parameterBag, MailerService $mailerService, EntityManagerInterface $entityManager, TranslatorInterface $translator, UrlGeneratorInterface $urlGenerator) + public function __construct(private Environment $twig, private ParameterBagInterface $parameterBag, private MailerService $mailer, private EntityManagerInterface $em, private TranslatorInterface $translator, private UrlGeneratorInterface $router) { - $this->translator = $translator; - $this->em = $entityManager; - $this->router = $urlGenerator; - $this->mailer = $mailerService; - $this->parameterBag = $parameterBag; - $this->twig = $environment; } public function newUser($email) diff --git a/src/Service/LicenseService.php b/src/Service/LicenseService.php index 2842f41..bd19598 100644 --- a/src/Service/LicenseService.php +++ b/src/Service/LicenseService.php @@ -21,15 +21,8 @@ class LicenseService { - private $em; - private $translator; - private $parameterBag; - - public function __construct(ParameterBagInterface $parameterBag, EntityManagerInterface $entityManager, TranslatorInterface $translator) + public function __construct(private ParameterBagInterface $parameterBag, private EntityManagerInterface $em, private TranslatorInterface $translator) { - $this->translator = $translator; - $this->em = $entityManager; - $this->parameterBag = $parameterBag; } function verify(Standort $server): bool diff --git a/src/Service/LoggerService.php b/src/Service/LoggerService.php index a492b6e..9e52385 100644 --- a/src/Service/LoggerService.php +++ b/src/Service/LoggerService.php @@ -9,13 +9,8 @@ class LoggerService { - private $logger; - private $parameterBag; - - public function __construct(LoggerInterface $logger, ParameterBagInterface $parameterBag) + public function __construct(private LoggerInterface $logger, private ParameterBagInterface $parameterBag) { - $this->logger = $logger; - $this->parameterBag = $parameterBag; } public function log($message,$value){ $this->logger->info($message,$value); diff --git a/src/Service/MailerService.php b/src/Service/MailerService.php index 878c30b..84a1f6b 100644 --- a/src/Service/MailerService.php +++ b/src/Service/MailerService.php @@ -15,26 +15,11 @@ class MailerService { - private MailerInterface $mailer; - private ParameterBagInterface $parameter; - private KernelInterface $kernel; - private LoggerInterface $logger; private ?MailerInterface $customMailer = null; private ?string $userName = null; - private LicenseService $licenseService; - - public function __construct( - LicenseService $licenseService, - LoggerInterface $logger, - ParameterBagInterface $parameterBag, - MailerInterface $mailer, - KernelInterface $kernel - ) { - $this->mailer = $mailer; - $this->parameter = $parameterBag; - $this->kernel = $kernel; - $this->logger = $logger; - $this->licenseService = $licenseService; + + public function __construct(private LicenseService $licenseService, private LoggerInterface $logger, private ParameterBagInterface $parameter, private MailerInterface $mailer, private KernelInterface $kernel) + { } public function buildTransport(Standort $server): void diff --git a/src/Service/NotificationService.php b/src/Service/NotificationService.php index e6769ea..8567de0 100644 --- a/src/Service/NotificationService.php +++ b/src/Service/NotificationService.php @@ -18,18 +18,10 @@ class NotificationService { - private $mailer; - private $parameterBag; private $ics; - private $twig; - private $translator; - public function __construct(MailerService $mailerService, ParameterBagInterface $parameterBag, IcsService $icsService, Environment $environment, TranslatorInterface $translator) + public function __construct(private MailerService $mailer, private ParameterBagInterface $parameterBag, IcsService $icsService, private Environment $twig, private TranslatorInterface $translator) { - $this->mailer = $mailerService; - $this->parameterBag = $parameterBag; - $this->twig = $environment; - $this->translator = $translator; } function createIcs(Rooms $rooms, User $user, $method = 'REQUEST') diff --git a/src/Service/PermissionChangeService.php b/src/Service/PermissionChangeService.php index d15e685..f2bfe28 100644 --- a/src/Service/PermissionChangeService.php +++ b/src/Service/PermissionChangeService.php @@ -15,10 +15,8 @@ */ class PermissionChangeService { - private $em; - public function __construct(EntityManagerInterface $em) + public function __construct(private EntityManagerInterface $em) { - $this->em = $em; } /** diff --git a/src/Service/PexelService.php b/src/Service/PexelService.php index 1417253..9a5c79b 100644 --- a/src/Service/PexelService.php +++ b/src/Service/PexelService.php @@ -11,12 +11,8 @@ class PexelService { - private $client; - private $parameterBag; - public function __construct(HttpClientInterface $httpClient, ParameterBagInterface $parameterBag) + public function __construct(private HttpClientInterface $client, private ParameterBagInterface $parameterBag) { - $this->client = $httpClient; - $this->parameterBag = $parameterBag; } public function getImageFromPexels() diff --git a/src/Service/ReminderService.php b/src/Service/ReminderService.php index ba93385..b4ac05c 100644 --- a/src/Service/ReminderService.php +++ b/src/Service/ReminderService.php @@ -12,14 +12,8 @@ class ReminderService { - private $em; - private $parameterBag; - private $userService; - public function __construct(EntityManagerInterface $entityManager, ParameterBagInterface $parameterBag,UserService $userService) + public function __construct(private EntityManagerInterface $em, private ParameterBagInterface $parameterBag, private UserService $userService) { - $this->em = $entityManager; - $this->parameterBag = $parameterBag; - $this->userService = $userService; } public function sendReminder(){ diff --git a/src/Service/RoomService.php b/src/Service/RoomService.php index e9d11a9..9cd6d50 100644 --- a/src/Service/RoomService.php +++ b/src/Service/RoomService.php @@ -26,16 +26,8 @@ */ class RoomService { - private $em; - private $logger; - private $translator; - - public function __construct(TranslatorInterface $translator, EntityManagerInterface $entityManager, FormFactoryInterface $formBuilder, LoggerInterface $logger) + public function __construct(private TranslatorInterface $translator, private EntityManagerInterface $em, FormFactoryInterface $formBuilder, private LoggerInterface $logger) { - $this->em = $entityManager; - $this->logger = $logger; - $this->translator = $translator; - } /** diff --git a/src/Service/RoomSpaceService.php b/src/Service/RoomSpaceService.php index c7fe3c1..8589db8 100644 --- a/src/Service/RoomSpaceService.php +++ b/src/Service/RoomSpaceService.php @@ -11,11 +11,8 @@ class RoomSpaceService { - private $em; - - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $em) { - $this->em = $entityManager; } public function isRoomSpace(Rooms $rooms) diff --git a/src/Service/SchedulingService.php b/src/Service/SchedulingService.php index ea5cee5..2065cf2 100644 --- a/src/Service/SchedulingService.php +++ b/src/Service/SchedulingService.php @@ -9,13 +9,8 @@ class SchedulingService { - private $em; - private $userService; - - public function __construct(EntityManagerInterface $entityManager,UserService $userService) + public function __construct(private EntityManagerInterface $em, private UserService $userService) { - $this->em = $entityManager; - $this->userService = $userService; } public function chooseTimeSlot(SchedulingTime $schedulingTime):?bool{ $room = $schedulingTime->getScheduling()->getRoom(); diff --git a/src/Service/ServerUserManagment.php b/src/Service/ServerUserManagment.php index c795c71..941513f 100644 --- a/src/Service/ServerUserManagment.php +++ b/src/Service/ServerUserManagment.php @@ -14,13 +14,8 @@ class ServerUserManagment { - private $em; - private $parameter; - - public function __construct(ParameterBagInterface $parameterBag, EntityManagerInterface $entityManager) + public function __construct(private ParameterBagInterface $parameter, private EntityManagerInterface $em) { - $this->parameter = $parameterBag; - $this->em = $entityManager; } /** diff --git a/src/Service/StandortService.php b/src/Service/StandortService.php index 0937a89..0b39e88 100644 --- a/src/Service/StandortService.php +++ b/src/Service/StandortService.php @@ -22,19 +22,8 @@ class StandortService { - private $em; - private $logger; - private $notification; - private $twig; - private $translator; - - public function __construct(TranslatorInterface $translator, EntityManagerInterface $entityManager, Environment $environment, LoggerInterface $logger, NotificationService $notificationService) + public function __construct(private TranslatorInterface $translator, private EntityManagerInterface $em, private Environment $twig, private LoggerInterface $logger, private NotificationService $notification) { - $this->em = $entityManager; - $this->logger = $logger; - $this->notification = $notificationService; - $this->twig = $environment; - $this->translator = $translator; } function addPermission(Standort $standort, User $user) diff --git a/src/Service/SubcriptionService.php b/src/Service/SubcriptionService.php index 4d7e433..9f583e7 100644 --- a/src/Service/SubcriptionService.php +++ b/src/Service/SubcriptionService.php @@ -21,23 +21,8 @@ class SubcriptionService { - private $em; - private $twig; - private $translator; - private $notifier; - private $userService; - private $logger; - - - public function __construct(LoggerService $logger, UserService $userService, NotificationService $notificationService, EntityManagerInterface $entityManager, Environment $environment, TranslatorInterface $translator) + public function __construct(private LoggerService $logger, private UserService $userService, private NotificationService $notifier, private EntityManagerInterface $em, private Environment $twig, private TranslatorInterface $translator) { - $this->em = $entityManager; - $this->twig = $environment; - $this->translator = $translator; - $this->notifier = $notificationService; - $this->userService = $userService; - $this->logger = $logger; - } /** diff --git a/src/Service/TeilnehmerExcelService.php b/src/Service/TeilnehmerExcelService.php index 1cf45d2..12025d3 100644 --- a/src/Service/TeilnehmerExcelService.php +++ b/src/Service/TeilnehmerExcelService.php @@ -17,22 +17,14 @@ class TeilnehmerExcelService { private $spreadsheet; private $writer; - private $translator; - private $tokenStorage; - private $em; private $sheet; private $alphas; private $lineCounter; private $mapping; - private $userEventCreateService; - public function __construct(TranslatorInterface $translator, TokenStorageInterface $tokenStorage, EntityManagerInterface $entityManager, UserEventCreateService $userEventCreateService) + public function __construct(private TranslatorInterface $translator, private TokenStorageInterface $tokenStorage, private EntityManagerInterface $em, private UserEventCreateService $userEventCreateService) { $this->spreadsheet = new Spreadsheet(); $this->writer = new Xlsx($this->spreadsheet); - $this->translator = $translator; - $this->tokenStorage = $tokenStorage; - $this->em = $entityManager; - $this->userEventCreateService = $userEventCreateService; } function generateSpreadsheet() diff --git a/src/Service/TransferOwnerShipService.php b/src/Service/TransferOwnerShipService.php index ca152d3..102e6fc 100644 --- a/src/Service/TransferOwnerShipService.php +++ b/src/Service/TransferOwnerShipService.php @@ -10,12 +10,8 @@ class TransferOwnerShipService { - private $entityManager; - public function __construct( - EntityManagerInterface $entityManager - ) + public function __construct(private EntityManagerInterface $entityManager) { - $this->entityManager = $entityManager; } public function transferOwnerShip(Rooms $room, User $newOwner) diff --git a/src/Service/UserCreatorService.php b/src/Service/UserCreatorService.php index 9a5056c..1a84651 100644 --- a/src/Service/UserCreatorService.php +++ b/src/Service/UserCreatorService.php @@ -7,12 +7,8 @@ class UserCreatorService { - private $em; - - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $em) { - $this->em = $entityManager; - } public function createUser($email, $userName, $firstName = null, $lastName = null, $dryrun = false): User diff --git a/src/Service/UserEventCreateService.php b/src/Service/UserEventCreateService.php index b4bfff1..c9998bd 100644 --- a/src/Service/UserEventCreateService.php +++ b/src/Service/UserEventCreateService.php @@ -9,10 +9,8 @@ class UserEventCreateService { - private $em; - public function __construct(EntityManagerInterface $entityManager) - {$this->em = $entityManager; - + public function __construct(private EntityManagerInterface $em) + { } public function createEvent(User $user,Rooms $event){ $createdAt = $this->em->getRepository(UserEventCreated::class)->findOneBy(array('user'=>$user,'event'=>$event)); diff --git a/src/Service/UserService.php b/src/Service/UserService.php index 30078f5..241ac51 100644 --- a/src/Service/UserService.php +++ b/src/Service/UserService.php @@ -20,24 +20,8 @@ class UserService { - private $mailer; - private $parameterBag; - private $twig; - private $notificationService; - private $url; - private $translator; - private $em; - private $userCreateService; - public function __construct(EntityManagerInterface $entityManager, TranslatorInterface $translator, MailerService $mailerService, ParameterBagInterface $parameterBag, Environment $environment, NotificationService $notificationService, UrlGeneratorInterface $urlGenerator, UserEventCreateService $userEventCreateService) + public function __construct(private EntityManagerInterface $em, private TranslatorInterface $translator, private MailerService $mailer, private ParameterBagInterface $parameterBag, private Environment $twig, private NotificationService $notificationService, private UrlGeneratorInterface $url, private UserEventCreateService $userCreateService) { - $this->mailer = $mailerService; - $this->parameterBag = $parameterBag; - $this->twig = $environment; - $this->notificationService = $notificationService; - $this->url = $urlGenerator; - $this->translator = $translator; - $this->em = $entityManager; - $this->userCreateService = $userEventCreateService; } function generateUrl(Rooms $room, User $user) diff --git a/src/Service/api/KeycloakService.php b/src/Service/api/KeycloakService.php index 3bc61d3..c8ae0e8 100644 --- a/src/Service/api/KeycloakService.php +++ b/src/Service/api/KeycloakService.php @@ -9,10 +9,8 @@ class KeycloakService { - private $em; - public function __construct(EntityManagerInterface $entityManager) + public function __construct(private EntityManagerInterface $em) { - $this->em = $entityManager; } public function getUSer($email,$keycloakId = null) :?User{ diff --git a/src/Service/api/RoomService.php b/src/Service/api/RoomService.php index cb81eea..fe3c320 100644 --- a/src/Service/api/RoomService.php +++ b/src/Service/api/RoomService.php @@ -16,16 +16,8 @@ class RoomService { - private $em; - private $userService; - private $inviteService; - private $urlGenerator; - public function __construct(UrlGeneratorInterface $urlGenerator, EntityManagerInterface $entityManager, UserService $userService, InviteService $inviteService) + public function __construct(private UrlGeneratorInterface $urlGenerator, private EntityManagerInterface $em, private UserService $userService, private InviteService $inviteService) { - $this->em = $entityManager; - $this->userService = $userService; - $this->inviteService = $inviteService; - $this->urlGenerator = $urlGenerator; } public function createRoom(User $user, Standort $server, \DateTime $start, $duration, $name) diff --git a/src/Twig/CheckRoomPermissions.php b/src/Twig/CheckRoomPermissions.php index 8095159..d590130 100644 --- a/src/Twig/CheckRoomPermissions.php +++ b/src/Twig/CheckRoomPermissions.php @@ -23,11 +23,8 @@ class CheckRoomPermissions extends AbstractExtension - private $em; - public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private EntityManagerInterface $em, TokenStorageInterface $tokenStorage) { - $this->em = $entityManager; - } public function getFunctions(): array @@ -45,4 +42,4 @@ public function roomPermissions(User $user, Rooms $rooms):?RoomsUser return $permissions; } -} \ No newline at end of file +} diff --git a/src/Twig/GroupUtils.php b/src/Twig/GroupUtils.php index e7ca65e..cd7b8bf 100644 --- a/src/Twig/GroupUtils.php +++ b/src/Twig/GroupUtils.php @@ -23,13 +23,8 @@ class GroupUtils extends AbstractExtension { - private $licenseService; - private $em; - - public function __construct(EntityManagerInterface $entityManager, LicenseService $licenseService, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private EntityManagerInterface $em, private LicenseService $licenseService, TokenStorageInterface $tokenStorage) { - $this->licenseService = $licenseService; - $this->em = $entityManager; } public function getFilters() diff --git a/src/Twig/ImagePexels.php b/src/Twig/ImagePexels.php index c812e37..9c1e942 100644 --- a/src/Twig/ImagePexels.php +++ b/src/Twig/ImagePexels.php @@ -26,12 +26,8 @@ class ImagePexels extends AbstractExtension - private $em; - private $pexelsService; - public function __construct(PexelService $pexelService, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private PexelService $pexelsService, private EntityManagerInterface $em, TokenStorageInterface $tokenStorage) { - $this->em = $entityManager; - $this->pexelsService = $pexelService; } public function getFunctions(): array diff --git a/src/Twig/License.php b/src/Twig/License.php index a00de4c..0890d78 100644 --- a/src/Twig/License.php +++ b/src/Twig/License.php @@ -19,12 +19,8 @@ class License extends AbstractExtension { - private $licenseService; - - public function __construct(LicenseService $licenseService, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private LicenseService $licenseService, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) { - $this->licenseService = $licenseService; - } public function getFilters() diff --git a/src/Twig/RoomhasSPace.php b/src/Twig/RoomhasSPace.php index f8499bf..1d7cb08 100644 --- a/src/Twig/RoomhasSPace.php +++ b/src/Twig/RoomhasSPace.php @@ -21,12 +21,10 @@ class RoomhasSPace extends AbstractExtension { - private $roomSpaceService; - private $em; + private $em; - public function __construct(RoomSpaceService $roomSpaceService) + public function __construct(private RoomSpaceService $roomSpaceService) { - $this->roomSpaceService = $roomSpaceService; } public function getFilters() diff --git a/src/Twig/RoomsInFuture.php b/src/Twig/RoomsInFuture.php index dccf590..678a5e4 100644 --- a/src/Twig/RoomsInFuture.php +++ b/src/Twig/RoomsInFuture.php @@ -20,13 +20,8 @@ class RoomsInFuture extends AbstractExtension { - private $licenseService; - private $em; - - public function __construct(EntityManagerInterface $entityManager, LicenseService $licenseService, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private EntityManagerInterface $em, private LicenseService $licenseService, TokenStorageInterface $tokenStorage) { - $this->licenseService = $licenseService; - $this->em = $entityManager; } public function getFilters() @@ -59,4 +54,4 @@ public function roomsinFuture(Standort $standort) } -} \ No newline at end of file +} diff --git a/src/Twig/Schedule.php b/src/Twig/Schedule.php index c9dbbb6..8286313 100644 --- a/src/Twig/Schedule.php +++ b/src/Twig/Schedule.php @@ -25,11 +25,8 @@ class Schedule extends AbstractExtension - private $em; - public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, EntityManagerInterface $em) + public function __construct(private EntityManagerInterface $em, TokenStorageInterface $tokenStorage) { - $this->em = $entityManager; - } public function getFunctions(): array diff --git a/symfony.lock b/symfony.lock index af1f600..b647d45 100644 --- a/symfony.lock +++ b/symfony.lock @@ -74,6 +74,18 @@ "ref": "1ff300d8c030f55c99219cc55050b97a695af3f6" } }, + "phpstan/phpstan": { + "version": "2.1", + "recipe": { + "repo": "github.com/symfony/recipes-contrib", + "branch": "main", + "version": "1.0", + "ref": "5e490cc197fb6bb1ae22e5abbc531ddc633b6767" + }, + "files": [ + "./phpstan.dist.neon" + ] + }, "phpunit/phpunit": { "version": "11.5", "recipe": {