diff --git a/.env b/.env index 3523d0ba..1994475b 100644 --- a/.env +++ b/.env @@ -51,13 +51,6 @@ HOSTNAME_SOLR=`solr.roadiz-core-app.test`,`solr.roadiz-core-app.local` HOSTNAME_MAILER=`mail.roadiz-core-app.test`,`mail.roadiz-core-app.local` DEFAULT_GATEWAY=172.58.0.1 - -###> symfony/lock ### -# Choose one of the stores below -# postgresql+advisory://db_user:db_password@localhost/db_name -LOCK_DSN=flock -###< symfony/lock ### - ###> rezozero/intervention-request-bundle ### IR_DEFAULT_QUALITY=90 IR_MAX_PIXEL_SIZE=2500 @@ -120,3 +113,9 @@ SCALEWAY_STORAGE_ID= SCALEWAY_STORAGE_SECRET= SCALEWAY_STORAGE_BUCKET= SCALEWAY_STORAGE_REGION= + +###> symfony/lock ### +# Choose one of the stores below +# postgresql+advisory://db_user:db_password@localhost/db_name +LOCK_DSN=flock +###< symfony/lock ### diff --git a/Makefile b/Makefile index 810cc9c9..65dec463 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ test: vendor/bin/monorepo-builder validate vendor/bin/atoum -d ./lib/Documents/tests vendor/bin/atoum -f ./lib/EntityGenerator/tests/units/* - vendor/bin/phpunit -v lib/Models/tests + vendor/bin/phpunit -v php -d "memory_limit=-1" vendor/bin/phpcs -p make phpstan php -d "memory_limit=-1" bin/console lint:twig ./lib/Rozier/src/Resources/views diff --git a/composer.json b/composer.json index 6ca17ed6..6ed0a5e0 100644 --- a/composer.json +++ b/composer.json @@ -42,8 +42,8 @@ "doctrine/doctrine-bundle": "^2.8.1", "doctrine/doctrine-migrations-bundle": "^3.1", "doctrine/migrations": "^3.1.1", - "endroid/qr-code": "^4.0", "doctrine/orm": "~2.17.0", + "endroid/qr-code": "^4.0", "enshrined/svg-sanitize": "^0.15", "gedmo/doctrine-extensions": "^3.10.0", "guzzlehttp/guzzle": "^7.2.0", @@ -82,52 +82,53 @@ "sensio/framework-extra-bundle": "^6.1", "sentry/sentry-symfony": "^4.2", "solarium/solarium": "^6.0.4", - "symfony-cmf/routing": "^2.3.3", - "symfony-cmf/routing-bundle": "^2.5", - "symfony/asset": "5.4.*", - "symfony/cache": "5.4.*", - "symfony/console": "5.4.*", - "symfony/dotenv": "5.4.*", - "symfony/event-dispatcher": "5.4.*", + "symfony-cmf/routing-bundle": "^3.0.2", + "symfony/asset": "6.4.*", + "symfony/cache": "6.4.*", + "symfony/console": "6.4.*", + "symfony/doctrine-messenger": "6.4.*", + "symfony/dotenv": "6.4.*", + "symfony/event-dispatcher": "6.4.*", "symfony/event-dispatcher-contracts": "^2.4.0", - "symfony/expression-language": "5.4.*", - "symfony/filesystem": "5.4.*", - "symfony/finder": "5.4.*", + "symfony/expression-language": "6.4.*", + "symfony/filesystem": "6.4.*", + "symfony/finder": "6.4.*", "symfony/flex": "^2.2.3", - "symfony/form": "5.4.*", - "symfony/framework-bundle": "5.4.*", - "symfony/http-client": "5.4.*", - "symfony/http-foundation": "5.4.*", - "symfony/http-kernel": "5.4.*", - "symfony/intl": "5.4.*", - "symfony/mailer": "5.4.*", - "symfony/messenger": "5.4.*", - "symfony/mime": "5.4.*", + "symfony/form": "6.4.*", + "symfony/framework-bundle": "6.4.*", + "symfony/http-client": "6.4.*", + "symfony/http-foundation": "6.4.*", + "symfony/http-kernel": "6.4.*", + "symfony/intl": "6.4.*", + "symfony/lock": "6.4.*", + "symfony/mailer": "6.4.*", + "symfony/messenger": "6.4.*", + "symfony/mime": "6.4.*", "symfony/monolog-bundle": "^3.1", - "symfony/notifier": "5.4.*", - "symfony/options-resolver": "5.4.*", - "symfony/process": "5.4.*", - "symfony/property-access": "5.4.*", - "symfony/property-info": "5.4.*", - "symfony/proxy-manager-bridge": "5.4.*", - "symfony/rate-limiter": "5.4.*", + "symfony/notifier": "6.4.*", + "symfony/options-resolver": "6.4.*", + "symfony/process": "6.4.*", + "symfony/property-access": "6.4.*", + "symfony/property-info": "6.4.*", + "symfony/proxy-manager-bridge": "6.4.*", + "symfony/rate-limiter": "6.4.*", "symfony/requirements-checker": "^2.0", - "symfony/routing": "5.4.*", - "symfony/runtime": "5.4.*", - "symfony/security-bundle": "5.4.*", - "symfony/security-core": "5.4.*", - "symfony/security-csrf": "5.4.*", - "symfony/security-http": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/stopwatch": "5.4.*", - "symfony/string": "5.4.*", - "symfony/translation": "5.4.*", + "symfony/routing": "6.4.*", + "symfony/runtime": "6.4.*", + "symfony/security-bundle": "6.4.*", + "symfony/security-core": "6.4.*", + "symfony/security-csrf": "6.4.*", + "symfony/security-http": "6.4.*", + "symfony/serializer": "6.4.*", + "symfony/stopwatch": "6.4.*", + "symfony/string": "6.4.*", + "symfony/translation": "6.4.*", "symfony/translation-contracts": "^2.3", - "symfony/twig-bundle": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/web-link": "5.4.*", - "symfony/workflow": "5.4.*", - "symfony/yaml": "5.4.*", + "symfony/twig-bundle": "6.4.*", + "symfony/validator": "6.4.*", + "symfony/web-link": "6.4.*", + "symfony/workflow": "6.4.*", + "symfony/yaml": "6.4.*", "twig/extra-bundle": "^3.0", "twig/html-extra": "^3.3", "twig/intl-extra": "*", @@ -147,12 +148,12 @@ "phpunit/phpunit": "^9.5", "rector/rector": "^0.14.5", "squizlabs/php_codesniffer": "^3.5", - "symfony/browser-kit": "5.4.*", - "symfony/css-selector": "5.4.*", - "symfony/debug-bundle": "5.4.*", - "symfony/maker-bundle": "^1.48", - "symfony/phpunit-bridge": "5.4.*", - "symfony/web-profiler-bundle": "5.4.*", + "symfony/browser-kit": "6.4.*", + "symfony/css-selector": "6.4.*", + "symfony/debug-bundle": "6.4.*", + "symfony/maker-bundle": "^1.52", + "symfony/phpunit-bridge": "^7.0", + "symfony/web-profiler-bundle": "6.4.*", "symplify/monorepo-builder": "11.2.2.72" }, "config": { @@ -242,7 +243,7 @@ "extra": { "symfony": { "allow-contrib": false, - "require": "5.4.*" + "require": "6.4.*" }, "branch-alias": { "dev-main": "2.1.x-dev", diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 25d9004b..9dbe33fd 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -28,7 +28,6 @@ security: # https://symfony.com/bundles/LexikJWTAuthenticationBundle/current/index.html#configure-application-routing api_login: pattern: ^/api/token - stateless: true provider: all_users login_throttling: max_attempts: 3 diff --git a/lib/DocGenerator/composer.json b/lib/DocGenerator/composer.json index 5562ecf1..1e53ca7e 100644 --- a/lib/DocGenerator/composer.json +++ b/lib/DocGenerator/composer.json @@ -5,8 +5,8 @@ "require": { "php": ">=8.1", "roadiz/nodetype-contracts": "~1.1.2", - "symfony/translation": "5.4.*", - "symfony/http-foundation": "5.4.*" + "symfony/translation": "6.4.*", + "symfony/http-foundation": "6.4.*" }, "license": "MIT", "authors": [ diff --git a/lib/Documents/composer.json b/lib/Documents/composer.json index fd796c94..40a13d85 100644 --- a/lib/Documents/composer.json +++ b/lib/Documents/composer.json @@ -32,14 +32,14 @@ "intervention/image": "^2.5", "league/flysystem": "^3.0", "monolog/monolog": "^1.24.0 || ^2.1.1", - "symfony/asset": "5.4.*", - "symfony/console": "5.4.*", - "symfony/event-dispatcher": "5.4.*", - "symfony/filesystem": "5.4.*", - "symfony/finder": "5.4.*", - "symfony/http-foundation": "5.4.*", - "symfony/options-resolver": "5.4.*", - "symfony/serializer": "5.4.*", + "symfony/asset": "6.4.*", + "symfony/console": "6.4.*", + "symfony/event-dispatcher": "6.4.*", + "symfony/filesystem": "6.4.*", + "symfony/finder": "6.4.*", + "symfony/http-foundation": "6.4.*", + "symfony/options-resolver": "6.4.*", + "symfony/serializer": "6.4.*", "twig/twig": "^3.1" }, "require-dev": { diff --git a/lib/DtsGenerator/composer.json b/lib/DtsGenerator/composer.json index 1540c563..d0bcecde 100644 --- a/lib/DtsGenerator/composer.json +++ b/lib/DtsGenerator/composer.json @@ -4,7 +4,7 @@ "type": "library", "require": { "roadiz/nodetype-contracts": "~1.1.2", - "symfony/http-foundation": "5.4.*" + "symfony/http-foundation": "6.4.*" }, "require-dev": { "phpstan/phpstan": "^1.5.3", diff --git a/lib/EntityGenerator/composer.json b/lib/EntityGenerator/composer.json index c39b11e3..b13cce34 100644 --- a/lib/EntityGenerator/composer.json +++ b/lib/EntityGenerator/composer.json @@ -15,10 +15,10 @@ "php": ">=8.1", "ext-json": "*", "roadiz/nodetype-contracts": "~1.1.2", - "symfony/string": "5.4.*", - "symfony/yaml": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/options-resolver": "5.4.*" + "symfony/string": "6.4.*", + "symfony/yaml": "6.4.*", + "symfony/serializer": "6.4.*", + "symfony/options-resolver": "6.4.*" }, "suggest": { "api-platform/core": "If you need to create ApiFilter annotation right into your entities" diff --git a/lib/Markdown/composer.json b/lib/Markdown/composer.json index ca57d91a..9f044b2b 100644 --- a/lib/Markdown/composer.json +++ b/lib/Markdown/composer.json @@ -7,7 +7,7 @@ "league/commonmark": "^2.2.0", "twig/twig": "^3.1", "doctrine/collections": ">=1.6", - "symfony/stopwatch": "5.4.*" + "symfony/stopwatch": "6.4.*" }, "require-dev": { "squizlabs/php_codesniffer": "^3.5", diff --git a/lib/Models/composer.json b/lib/Models/composer.json index 67067bd4..5203a01f 100644 --- a/lib/Models/composer.json +++ b/lib/Models/composer.json @@ -21,11 +21,11 @@ "php": ">=8.1", "doctrine/orm": "~2.17.0", "jms/serializer": "^3.9.0", - "symfony/string": "5.4.*", + "symfony/string": "6.4.*", "symfony/translation-contracts": "^2.3", - "symfony/http-foundation": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/validator": "5.4.*" + "symfony/http-foundation": "6.4.*", + "symfony/serializer": "6.4.*", + "symfony/validator": "6.4.*" }, "require-dev": { "phpunit/phpunit": "^9.5", diff --git a/lib/Models/src/Bag/LazyParameterBag.php b/lib/Models/src/Bag/LazyParameterBag.php index 4e9d6cd2..a258d5b7 100644 --- a/lib/Models/src/Bag/LazyParameterBag.php +++ b/lib/Models/src/Bag/LazyParameterBag.php @@ -23,7 +23,7 @@ public function __construct() * @param mixed|null $default * @return mixed|null */ - public function get(string $key, $default = null) + public function get(string $key, $default = null): mixed { if (!$this->ready) { $this->populateParameters(); @@ -50,7 +50,7 @@ public function all(string $key = null): array * * @return bool */ - public function has(string $key) + public function has(string $key): bool { if (!$this->ready) { $this->populateParameters(); @@ -62,7 +62,7 @@ public function has(string $key) /** * @return array */ - public function keys() + public function keys(): array { if (!$this->ready) { $this->populateParameters(); @@ -75,7 +75,7 @@ public function keys() * @return \ArrayIterator */ #[\ReturnTypeWillChange] - public function getIterator() + public function getIterator(): \ArrayIterator { if (!$this->ready) { $this->populateParameters(); @@ -88,7 +88,7 @@ public function getIterator() * @return int */ #[\ReturnTypeWillChange] - public function count() + public function count(): int { if (!$this->ready) { $this->populateParameters(); @@ -105,7 +105,7 @@ public function count() * * @return mixed */ - public function filter(string $key, $default = null, int $filter = \FILTER_DEFAULT, $options = []) + public function filter(string $key, $default = null, int $filter = \FILTER_DEFAULT, $options = []): mixed { if (!$this->ready) { $this->populateParameters(); diff --git a/lib/OpenId/composer.json b/lib/OpenId/composer.json index fb7eaef0..0a76940c 100644 --- a/lib/OpenId/composer.json +++ b/lib/OpenId/composer.json @@ -21,14 +21,14 @@ "roadiz/random": "2.2.x-dev", "roadiz/models": "2.2.x-dev", "guzzlehttp/guzzle": "^7.2.0", - "symfony/http-foundation": "5.4.*", - "symfony/security-core": "5.4.*", - "symfony/security-http": "5.4.*", - "symfony/security-csrf": "5.4.*", + "symfony/http-foundation": "6.4.*", + "symfony/security-core": "6.4.*", + "symfony/security-http": "6.4.*", + "symfony/security-csrf": "6.4.*", "psr/cache": ">=1.0.1", "symfony/event-dispatcher-contracts": "^2.4.0", "codercat/jwk-to-pem": "^1.0", - "symfony/routing": "5.4.*" + "symfony/routing": "6.4.*" }, "require-dev": { "phpstan/phpstan": "^1.5.3", diff --git a/lib/OpenId/src/Authentication/Provider/OpenIdAccountProvider.php b/lib/OpenId/src/Authentication/Provider/OpenIdAccountProvider.php index 13489726..31e1c95d 100644 --- a/lib/OpenId/src/Authentication/Provider/OpenIdAccountProvider.php +++ b/lib/OpenId/src/Authentication/Provider/OpenIdAccountProvider.php @@ -16,7 +16,7 @@ class OpenIdAccountProvider implements UserProviderInterface * @param string $username * @deprecated since Symfony 5.3, use loadUserByIdentifier() instead */ - public function loadUserByUsername($username) + public function loadUserByUsername(string $username): UserInterface { throw new UserNotFoundException('Cannot load an OpenId account with its email.'); } diff --git a/lib/RoadizCompatBundle/composer.json b/lib/RoadizCompatBundle/composer.json index 2e8284b0..914e3a54 100644 --- a/lib/RoadizCompatBundle/composer.json +++ b/lib/RoadizCompatBundle/composer.json @@ -22,7 +22,7 @@ "pimple/pimple": "^3.3.1", "roadiz/core-bundle": "2.2.x-dev", "roadiz/openid": "2.2.x-dev", - "symfony/framework-bundle": "5.4.*" + "symfony/framework-bundle": "6.4.*" }, "require-dev": { "php-coveralls/php-coveralls": "^2.4", diff --git a/lib/RoadizCompatBundle/src/Controller/AppController.php b/lib/RoadizCompatBundle/src/Controller/AppController.php index ecae78dc..baf49c4f 100644 --- a/lib/RoadizCompatBundle/src/Controller/AppController.php +++ b/lib/RoadizCompatBundle/src/Controller/AppController.php @@ -321,7 +321,7 @@ public function getAssignation(): array public function prepareBaseAssignation() { /** @var KernelInterface $kernel */ - $kernel = $this->get('kernel'); + $kernel = $this->container->get('kernel'); $this->assignation = [ 'head' => [ 'ajax' => $this->getRequest()->isXmlHttpRequest(), @@ -368,7 +368,7 @@ public function getTheme(): ?Theme { $this->getStopwatch()->start('getTheme'); /** @var ThemeResolverInterface $themeResolver */ - $themeResolver = $this->get(ThemeResolverInterface::class); + $themeResolver = $this->container->get(ThemeResolverInterface::class); if (null === $this->theme) { $className = new UnicodeString(static::getCalledClass()); while (!$className->endsWith('App')) { @@ -475,7 +475,7 @@ public function validateNodeAccessForRole(mixed $attributes, mixed $nodeId = nul /** @var User $user */ $user = $this->getUser(); /** @var NodeChrootResolver $chrootResolver */ - $chrootResolver = $this->get(NodeChrootResolver::class); + $chrootResolver = $this->container->get(NodeChrootResolver::class); $chroot = $chrootResolver->getChroot($user); if ($this->isGranted($attributes) && $chroot === null) { @@ -560,9 +560,9 @@ public function makeResponseCachable( bool $allowClientCache = false ): Response { /** @var Kernel $kernel */ - $kernel = $this->get('kernel'); + $kernel = $this->container->get('kernel'); /** @var RequestStack $requestStack */ - $requestStack = $this->get(RequestStack::class); + $requestStack = $this->container->get(RequestStack::class); $settings = $this->getSettingsBag(); if ( @@ -647,7 +647,7 @@ protected function getHome(?TranslationInterface $translation = null): ?Node protected function getErrorsAsArray(FormInterface $form): array { /** @var FormErrorSerializer $formErrorSerializer */ - $formErrorSerializer = $this->get(FormErrorSerializer::class); + $formErrorSerializer = $this->container->get(FormErrorSerializer::class); return $formErrorSerializer->getErrorsAsArray($form); } } diff --git a/lib/RoadizCompatBundle/src/Controller/Controller.php b/lib/RoadizCompatBundle/src/Controller/Controller.php index 0a216612..5026df4a 100644 --- a/lib/RoadizCompatBundle/src/Controller/Controller.php +++ b/lib/RoadizCompatBundle/src/Controller/Controller.php @@ -6,6 +6,7 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\NonUniqueResultException; +use Doctrine\Persistence\ManagerRegistry; use Doctrine\Persistence\ObjectManager; use Psr\Log\LoggerInterface; use RZ\Roadiz\Core\AbstractEntities\PersistableInterface; @@ -68,6 +69,7 @@ public static function getSubscribedServices(): array 'csrfTokenManager' => CsrfTokenManagerInterface::class, 'defaultTranslation' => 'defaultTranslation', 'dispatcher' => 'event_dispatcher', + 'doctrine' => 'doctrine', 'em' => EntityManagerInterface::class, 'event_dispatcher' => 'event_dispatcher', EventDispatcherInterface::class => EventDispatcherInterface::class, @@ -112,11 +114,12 @@ public static function getSubscribedServices(): array /** * @return Request + * @deprecated */ protected function getRequest(): Request { /** @var RequestStack $requestStack */ - $requestStack = $this->get(RequestStack::class); + $requestStack = $this->container->get(RequestStack::class); $request = $requestStack->getCurrentRequest(); if (null === $request) { throw new BadRequestHttpException('Request is not available in this context'); @@ -124,25 +127,16 @@ protected function getRequest(): Request return $request; } - /** - * @return Security - */ - protected function getAuthorizationChecker(): Security - { - /** @var Security $security */ # php-stan hint - $security = $this->get(Security::class); - return $security; - } - /** * Alias for `$this->container['securityTokenStorage']`. * * @return TokenStorageInterface + * @deprecated */ protected function getTokenStorage(): TokenStorageInterface { /** @var TokenStorageInterface $tokenStorage */ # php-stan hint - $tokenStorage = $this->get(TokenStorageInterface::class); + $tokenStorage = $this->container->get(TokenStorageInterface::class); return $tokenStorage; } @@ -150,76 +144,110 @@ protected function getTokenStorage(): TokenStorageInterface * Alias for `$this->container['em']`. * * @return ObjectManager + * @deprecated */ protected function em(): ObjectManager { - return $this->getDoctrine()->getManager(); + return $this->container->get('em'); } /** * @return TranslatorInterface + * @deprecated */ protected function getTranslator(): TranslatorInterface { /** @var TranslatorInterface $translator */ # php-stan hint - $translator = $this->get(TranslatorInterface::class); + $translator = $this->container->get(TranslatorInterface::class); return $translator; } /** * @return Environment + * @deprecated */ protected function getTwig(): Environment { /** @var Environment $twig */ # php-stan hint - $twig = $this->get(Environment::class); + $twig = $this->container->get(Environment::class); return $twig; } + /** + * @return Stopwatch + * @deprecated + */ protected function getStopwatch(): Stopwatch { /** @var Stopwatch $stopwatch */ - $stopwatch = $this->get(Stopwatch::class); + $stopwatch = $this->container->get(Stopwatch::class); return $stopwatch; } + /** + * @deprecated + */ protected function getPreviewResolver(): PreviewResolverInterface { /** @var PreviewResolverInterface $previewResolver */ - $previewResolver = $this->get(PreviewResolverInterface::class); + $previewResolver = $this->container->get(PreviewResolverInterface::class); return $previewResolver; } + /** + * @return ManagerRegistry + * @throws \Psr\Container\ContainerExceptionInterface + * @throws \Psr\Container\NotFoundExceptionInterface + * @deprecated + */ + protected function getDoctrine(): ManagerRegistry + { + return $this->container->get('doctrine'); + } + /** * @param object $event * @param string|null $eventName * @return object The passed $event MUST be returned + * @deprecated */ protected function dispatchEvent(object $event, string $eventName = null): object { /** @var EventDispatcherInterface $eventDispatcher */ # php-stan hint - $eventDispatcher = $this->get(EventDispatcherInterface::class); + $eventDispatcher = $this->container->get(EventDispatcherInterface::class); return $eventDispatcher->dispatch($event, $eventName); } + /** + * @return Settings + * @deprecated + */ protected function getSettingsBag(): Settings { /** @var Settings $settingsBag */ # php-stan hint - $settingsBag = $this->get(Settings::class); + $settingsBag = $this->container->get(Settings::class); return $settingsBag; } + /** + * @return HandlerFactoryInterface + * @deprecated + */ protected function getHandlerFactory(): HandlerFactoryInterface { /** @var HandlerFactoryInterface $handlerFactory */ # php-stan hint - $handlerFactory = $this->get(HandlerFactoryInterface::class); + $handlerFactory = $this->container->get(HandlerFactoryInterface::class); return $handlerFactory; } + /** + * @return LoggerInterface + * @deprecated + */ protected function getLogger(): LoggerInterface { /** @var LoggerInterface $logger */ # php-stan hint - $logger = $this->get(LoggerInterface::class); + $logger = $this->container->get(LoggerInterface::class); return $logger; } @@ -235,7 +263,7 @@ protected function generateUrl($route, array $parameters = [], int $referenceTyp { if ($route instanceof NodesSources) { /** @var UrlGeneratorInterface $urlGenerator */ - $urlGenerator = $this->get(UrlGeneratorInterface::class); + $urlGenerator = $this->container->get(UrlGeneratorInterface::class); return $urlGenerator->generate( RouteObjectInterface::OBJECT_BASED_ROUTE_NAME, array_merge($parameters, [RouteObjectInterface::ROUTE_OBJECT => $route]), @@ -408,7 +436,7 @@ protected function denyResourceExceptForFormats(Request $request, array $accepta protected function createNamedFormBuilder(string $name = 'form', $data = null, array $options = []) { /** @var FormFactoryInterface $formFactory */ - $formFactory = $this->get(FormFactoryInterface::class); + $formFactory = $this->container->get(FormFactoryInterface::class); return $formFactory->createNamedBuilder($name, FormType::class, $data, $options); } @@ -432,33 +460,6 @@ public function createEntityListManager(string $entity, array $criteria = [], ar ); } - /** - * Create and return a ContactFormManager to build and send contact - * form by email. - * - * @return ContactFormManager - * @deprecated Use constructor service injection - */ - public function createContactFormManager(): ContactFormManager - { - /** @var ContactFormManager $contactFormManager */ # php-stan hinting - $contactFormManager = $this->get(ContactFormManager::class); - return $contactFormManager; - } - - /** - * Create and return a EmailManager to build and send emails. - * - * @return EmailManager - * @deprecated Use constructor service injection - */ - public function createEmailManager(): EmailManager - { - /** @var EmailManager $emailManager */ # php-stan hinting - $emailManager = $this->get(EmailManager::class); - return $emailManager; - } - /** * Get a user from the tokenStorage. * @@ -470,10 +471,6 @@ public function createEmailManager(): EmailManager */ protected function getUser(): ?UserInterface { - if (!$this->has('securityTokenStorage')) { - throw new \LogicException('No TokenStorage has been registered in your application.'); - } - /** @var TokenInterface|null $token */ $token = $this->getTokenStorage()->getToken(); return $token?->getUser(); diff --git a/lib/RoadizCompatBundle/src/Controller/FrontendController.php b/lib/RoadizCompatBundle/src/Controller/FrontendController.php index 2f4ac373..dbb63a21 100644 --- a/lib/RoadizCompatBundle/src/Controller/FrontendController.php +++ b/lib/RoadizCompatBundle/src/Controller/FrontendController.php @@ -299,30 +299,6 @@ protected function extendAssignation() { } - /** - * Add a default translation locale for static routes and - * node SEO data. - * - * * [parent assignations…] - * * **_default_locale** - * * meta - * * siteName - * * siteCopyright - * * siteDescription - * - * @return $this - */ - public function prepareBaseAssignation(): static - { - parent::prepareBaseAssignation(); - - /** @var TranslationInterface $translation */ - $translation = $this->get('defaultTranslation'); - $this->assignation['_default_locale'] = $translation->getLocale(); - - return $this; - } - /** * {@inheritdoc} */ diff --git a/lib/RoadizCompatBundle/src/Routing/ThemeAwareNodeRouter.php b/lib/RoadizCompatBundle/src/Routing/ThemeAwareNodeRouter.php index 906feb91..ad74858f 100644 --- a/lib/RoadizCompatBundle/src/Routing/ThemeAwareNodeRouter.php +++ b/lib/RoadizCompatBundle/src/Routing/ThemeAwareNodeRouter.php @@ -59,12 +59,12 @@ public function match(string $pathinfo): array return $this->innerRouter->match($pathinfo); } - public function supports($name): bool + public function supports(string $name): bool { return $this->innerRouter->supports($name); } - public function getRouteDebugMessage($name, array $parameters = []): string + public function getRouteDebugMessage(string $name, array $parameters = []): string { return $this->innerRouter->getRouteDebugMessage($name, $parameters); } diff --git a/lib/RoadizCoreBundle/composer.json b/lib/RoadizCoreBundle/composer.json index fab80ec6..1e227d00 100644 --- a/lib/RoadizCoreBundle/composer.json +++ b/lib/RoadizCoreBundle/composer.json @@ -59,37 +59,38 @@ "sensio/framework-extra-bundle": "^6.1", "solarium/solarium": "^6.0.4", "symfony-cmf/routing": "^2.3.3", - "symfony-cmf/routing-bundle": "^2.5", - "symfony/asset": "5.4.*", - "symfony/cache": "5.4.*", - "symfony/console": "5.4.*", - "symfony/dotenv": "5.4.*", - "symfony/expression-language": "5.4.*", + "symfony-cmf/routing-bundle": "^3.0.2", + "symfony/asset": "6.4.*", + "symfony/cache": "6.4.*", + "symfony/console": "6.4.*", + "symfony/dotenv": "6.4.*", + "symfony/expression-language": "6.4.*", "symfony/flex": "^2.2.3", - "symfony/form": "5.4.*", - "symfony/framework-bundle": "5.4.*", - "symfony/http-client": "5.4.*", - "symfony/intl": "5.4.*", - "symfony/mailer": "5.4.*", - "symfony/messenger": "5.4.*", - "symfony/mime": "5.4.*", + "symfony/form": "6.4.*", + "symfony/framework-bundle": "6.4.*", + "symfony/http-client": "6.4.*", + "symfony/intl": "6.4.*", + "symfony/lock": "6.4.*", + "symfony/mailer": "6.4.*", + "symfony/messenger": "6.4.*", + "symfony/mime": "6.4.*", "symfony/monolog-bundle": "^3.1", - "symfony/notifier": "5.4.*", - "symfony/process": "5.4.*", - "symfony/property-access": "5.4.*", - "symfony/property-info": "5.4.*", - "symfony/proxy-manager-bridge": "5.4.*", - "symfony/rate-limiter": "5.4.*", - "symfony/runtime": "5.4.*", - "symfony/security-core": "5.4.*", - "symfony/serializer": "5.4.*", - "symfony/string": "5.4.*", - "symfony/translation": "5.4.*", - "symfony/twig-bundle": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/web-link": "5.4.*", - "symfony/workflow": "5.4.*", - "symfony/yaml": "5.4.*", + "symfony/notifier": "6.4.*", + "symfony/process": "6.4.*", + "symfony/property-access": "6.4.*", + "symfony/property-info": "6.4.*", + "symfony/proxy-manager-bridge": "6.4.*", + "symfony/rate-limiter": "6.4.*", + "symfony/runtime": "6.4.*", + "symfony/security-core": "6.4.*", + "symfony/serializer": "6.4.*", + "symfony/string": "6.4.*", + "symfony/translation": "6.4.*", + "symfony/twig-bundle": "6.4.*", + "symfony/validator": "6.4.*", + "symfony/web-link": "6.4.*", + "symfony/workflow": "6.4.*", + "symfony/yaml": "6.4.*", "twig/extra-bundle": "^3.0", "twig/intl-extra": "*", "twig/string-extra": "*", @@ -104,9 +105,9 @@ "phpstan/phpstan-doctrine": "^1.3", "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.5", - "symfony/browser-kit": "5.4.*", - "symfony/phpunit-bridge": "5.4.*", - "symfony/stopwatch": "5.4.*" + "symfony/browser-kit": "6.4.*", + "symfony/phpunit-bridge": "^7.0", + "symfony/stopwatch": "6.4.*" }, "config": { "optimize-autoloader": true, diff --git a/lib/RoadizCoreBundle/src/Bag/Settings.php b/lib/RoadizCoreBundle/src/Bag/Settings.php index 4586ae26..4e8a3d4c 100644 --- a/lib/RoadizCoreBundle/src/Bag/Settings.php +++ b/lib/RoadizCoreBundle/src/Bag/Settings.php @@ -55,9 +55,9 @@ protected function populateParameters(): void /** * @param string $key * @param mixed $default - * @return bool|mixed + * @return mixed */ - public function get($key, $default = false) + public function get(string $key, $default = false): mixed { return parent::get($key, $default); } @@ -68,7 +68,7 @@ public function get($key, $default = false) * @param string $key * @return Document|null */ - public function getDocument($key): ?Document + public function getDocument(string $key): ?Document { try { $id = $this->getInt($key); diff --git a/lib/RoadizCoreBundle/src/Doctrine/ORM/SimpleQueryBuilder.php b/lib/RoadizCoreBundle/src/Doctrine/ORM/SimpleQueryBuilder.php index eed46053..90c7713b 100644 --- a/lib/RoadizCoreBundle/src/Doctrine/ORM/SimpleQueryBuilder.php +++ b/lib/RoadizCoreBundle/src/Doctrine/ORM/SimpleQueryBuilder.php @@ -55,7 +55,7 @@ public function buildExpressionWithBinding($value, string $prefix, string $key): * * @return Comparison|Func|string */ - public function buildExpressionWithoutBinding($value, string $prefix, string $key, string $baseKey = null) + public function buildExpressionWithoutBinding(mixed $value, string $prefix, string $key, string $baseKey = null) { if (\mb_strlen($prefix) > 0 && \mb_substr($prefix, -\mb_strlen('.')) !== '.') { $prefix .= '.'; @@ -127,14 +127,11 @@ public function buildExpressionWithoutBinding($value, string $prefix, string $ke if ($value instanceof PersistableInterface) { return $this->queryBuilder->expr()->eq($prefix . $key, ':' . $baseKey); } - if (isset($value)) { - return $this->queryBuilder->expr()->eq($prefix . $key, ':' . $baseKey); - } if (null === $value) { return $this->queryBuilder->expr()->isNull($prefix . $key); } - throw new \InvalidArgumentException('Value is not supported for expression.'); + return $this->queryBuilder->expr()->eq($prefix . $key, ':' . $baseKey); } /** @@ -181,14 +178,11 @@ public function bindValue(string $key, $value): QueryBuilder if ($value instanceof PersistableInterface) { return $this->queryBuilder->setParameter($key, $value->getId()); } - if (isset($value)) { - return $this->queryBuilder->setParameter($key, $value); - } if (null === $value) { return $this->queryBuilder; } - throw new \InvalidArgumentException('Value is not supported for binding.'); + return $this->queryBuilder->setParameter($key, $value); } /** diff --git a/lib/RoadizCoreBundle/src/EntityHandler/NodeHandler.php b/lib/RoadizCoreBundle/src/EntityHandler/NodeHandler.php index d9a9b408..2336d661 100644 --- a/lib/RoadizCoreBundle/src/EntityHandler/NodeHandler.php +++ b/lib/RoadizCoreBundle/src/EntityHandler/NodeHandler.php @@ -22,6 +22,7 @@ use Symfony\Component\Workflow\Registry; use Symfony\Component\Workflow\Workflow; use RZ\Roadiz\Core\Handlers\AbstractHandler; +use Symfony\Component\Workflow\WorkflowInterface; /** * Handle operations with nodes entities. @@ -307,9 +308,9 @@ public function removeWithChildrenAndAssociations() } /** - * @return Workflow + * @return WorkflowInterface */ - private function getWorkflow(): Workflow + private function getWorkflow(): WorkflowInterface { return $this->registry->get($this->getNode()); } diff --git a/lib/RoadizCoreBundle/src/EventSubscriber/UserLocaleSubscriber.php b/lib/RoadizCoreBundle/src/EventSubscriber/UserLocaleSubscriber.php index fc75e89f..2fed01d2 100644 --- a/lib/RoadizCoreBundle/src/EventSubscriber/UserLocaleSubscriber.php +++ b/lib/RoadizCoreBundle/src/EventSubscriber/UserLocaleSubscriber.php @@ -64,7 +64,7 @@ public function onUserUpdated(FilterUserEvent $event): void if ( null !== $this->tokenStorage->getToken() && $this->tokenStorage->getToken()->getUser() instanceof User && - $this->tokenStorage->getToken()->getUsername() === $user->getUsername() + $this->tokenStorage->getToken()->getUserIdentifier() === $user->getUserIdentifier() ) { if (null === $user->getLocale()) { $this->requestStack->getSession()->remove('_locale'); diff --git a/lib/RoadizCoreBundle/src/Logger/DoctrineHandler.php b/lib/RoadizCoreBundle/src/Logger/DoctrineHandler.php index 058e1940..399e05be 100644 --- a/lib/RoadizCoreBundle/src/Logger/DoctrineHandler.php +++ b/lib/RoadizCoreBundle/src/Logger/DoctrineHandler.php @@ -215,10 +215,10 @@ public function write(array $record): void ] ); } else { - $log->setUsername($user->getUsername()); + $log->setUsername($user->getUserIdentifier()); } } else { - $log->setUsername($token->getUsername()); + $log->setUsername($token->getUserIdentifier()); } } diff --git a/lib/RoadizCoreBundle/src/Preview/EventSubscriber/PreviewModeSubscriber.php b/lib/RoadizCoreBundle/src/Preview/EventSubscriber/PreviewModeSubscriber.php index 2850b83f..1bcd3daf 100644 --- a/lib/RoadizCoreBundle/src/Preview/EventSubscriber/PreviewModeSubscriber.php +++ b/lib/RoadizCoreBundle/src/Preview/EventSubscriber/PreviewModeSubscriber.php @@ -83,11 +83,6 @@ public function onKernelRequest(RequestEvent $event): void public function onControllerMatched(ControllerEvent $event): void { if ($this->supports() && $event->isMainRequest()) { - /** @var TokenInterface|null $token */ - $token = $this->tokenStorage->getToken(); - if (null === $token || !$token->isAuthenticated()) { - throw new PreviewNotAllowedException('You are not authenticated to use preview mode.'); - } if (!$this->security->isGranted($this->previewResolver->getRequiredRole())) { throw new PreviewNotAllowedException('You are not granted to use preview mode.'); } diff --git a/lib/RoadizCoreBundle/src/Preview/Exception/PreviewNotAllowedException.php b/lib/RoadizCoreBundle/src/Preview/Exception/PreviewNotAllowedException.php index 2c376595..07da1c7b 100644 --- a/lib/RoadizCoreBundle/src/Preview/Exception/PreviewNotAllowedException.php +++ b/lib/RoadizCoreBundle/src/Preview/Exception/PreviewNotAllowedException.php @@ -12,7 +12,7 @@ */ class PreviewNotAllowedException extends AccessDeniedHttpException { - public function __construct($message = "You are not allowed to use preview mode.") + public function __construct(string $message = "You are not allowed to use preview mode.") { parent::__construct($message); } diff --git a/lib/RoadizCoreBundle/src/Routing/NodeRouter.php b/lib/RoadizCoreBundle/src/Routing/NodeRouter.php index bdea3b74..c9f89099 100644 --- a/lib/RoadizCoreBundle/src/Routing/NodeRouter.php +++ b/lib/RoadizCoreBundle/src/Routing/NodeRouter.php @@ -92,7 +92,7 @@ public function getGenerator(): UrlGeneratorInterface /** * @inheritDoc */ - public function supports($name): bool + public function supports(mixed $name): bool { return ($name instanceof NodesSources || $name === RouteObjectInterface::OBJECT_BASED_ROUTE_NAME); } diff --git a/lib/RoadizCoreBundle/src/Routing/RedirectionRouter.php b/lib/RoadizCoreBundle/src/Routing/RedirectionRouter.php index 8df68ff7..1a5f94a2 100644 --- a/lib/RoadizCoreBundle/src/Routing/RedirectionRouter.php +++ b/lib/RoadizCoreBundle/src/Routing/RedirectionRouter.php @@ -70,12 +70,12 @@ public function getGenerator(): UrlGeneratorInterface throw new \BadMethodCallException(get_class($this) . ' does not support path generation.'); } - public function supports($name): bool + public function supports(mixed $name): bool { return false; } - public function getRouteDebugMessage($name, array $parameters = []): string + public function getRouteDebugMessage(mixed $name, array $parameters = []): string { return 'RedirectionRouter does not support path generation.'; } diff --git a/lib/RoadizFontBundle/composer.json b/lib/RoadizFontBundle/composer.json index 6e836f08..6bcee450 100644 --- a/lib/RoadizFontBundle/composer.json +++ b/lib/RoadizFontBundle/composer.json @@ -30,20 +30,20 @@ "roadiz/models": "2.2.x-dev", "roadiz/rozier": "2.2.x-dev", "sensio/framework-extra-bundle": "^6.1", - "symfony/asset": "5.4.*", - "symfony/cache": "5.4.*", - "symfony/dotenv": "5.4.*", - "symfony/expression-language": "5.4.*", - "symfony/form": "5.4.*", - "symfony/framework-bundle": "5.4.*", - "symfony/http-client": "5.4.*", - "symfony/intl": "5.4.*", - "symfony/runtime": "5.4.*", - "symfony/string": "5.4.*", - "symfony/translation": "5.4.*", - "symfony/twig-bundle": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/yaml": "5.4.*", + "symfony/asset": "6.4.*", + "symfony/cache": "6.4.*", + "symfony/dotenv": "6.4.*", + "symfony/expression-language": "6.4.*", + "symfony/form": "6.4.*", + "symfony/framework-bundle": "6.4.*", + "symfony/http-client": "6.4.*", + "symfony/intl": "6.4.*", + "symfony/runtime": "6.4.*", + "symfony/string": "6.4.*", + "symfony/translation": "6.4.*", + "symfony/twig-bundle": "6.4.*", + "symfony/validator": "6.4.*", + "symfony/yaml": "6.4.*", "twig/extra-bundle": "^3.0", "twig/intl-extra": "*", "twig/string-extra": "*", @@ -55,9 +55,9 @@ "phpstan/phpstan-doctrine": "^1.3", "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.5", - "symfony/browser-kit": "5.4.*", - "symfony/phpunit-bridge": "5.4.*", - "symfony/stopwatch": "5.4.*", + "symfony/browser-kit": "6.4.*", + "symfony/phpunit-bridge": "^7.0", + "symfony/stopwatch": "6.4.*", "roadiz/core-bundle": "2.2.x-dev", "roadiz/compat-bundle": "2.2.x-dev", "roadiz/rozier-bundle": "2.2.x-dev", diff --git a/lib/RoadizRozierBundle/composer.json b/lib/RoadizRozierBundle/composer.json index 22393b69..9f3d431e 100644 --- a/lib/RoadizRozierBundle/composer.json +++ b/lib/RoadizRozierBundle/composer.json @@ -20,7 +20,7 @@ "prefer-stable": true, "require": { "php": ">=8.1", - "symfony/framework-bundle": "5.4.*", + "symfony/framework-bundle": "6.4.*", "roadiz/core-bundle": "2.2.x-dev", "roadiz/rozier": "2.2.x-dev", "roadiz/compat-bundle": "2.2.x-dev", diff --git a/lib/RoadizTwoFactorBundle/composer.json b/lib/RoadizTwoFactorBundle/composer.json index bea113c8..3a88f3e8 100644 --- a/lib/RoadizTwoFactorBundle/composer.json +++ b/lib/RoadizTwoFactorBundle/composer.json @@ -32,7 +32,7 @@ "scheb/2fa-google-authenticator": "^6.8", "scheb/2fa-trusted-device": "^6.8", "sensio/framework-extra-bundle": "^6.1", - "symfony/framework-bundle": "5.4.*" + "symfony/framework-bundle": "6.4.*" }, "require-dev": { "php-coveralls/php-coveralls": "^2.4", @@ -40,7 +40,7 @@ "phpstan/phpstan-doctrine": "^1.3", "phpunit/phpunit": "^9.5", "squizlabs/php_codesniffer": "^3.5", - "symfony/stopwatch": "5.4.*" + "symfony/stopwatch": "6.4.*" }, "config": { "optimize-autoloader": true, diff --git a/lib/RoadizUserBundle/composer.json b/lib/RoadizUserBundle/composer.json index 176630b0..98f72abd 100644 --- a/lib/RoadizUserBundle/composer.json +++ b/lib/RoadizUserBundle/composer.json @@ -22,8 +22,9 @@ "require": { "php": ">=8.1", "api-platform/core": "~2.7.0", - "symfony/framework-bundle": "5.4.*", - "symfony/rate-limiter": "5.4.*", + "symfony/framework-bundle": "6.4.*", + "symfony/rate-limiter": "6.4.*", + "symfony/lock": "6.4.*", "doctrine/orm": "~2.17.0" }, "require-dev": { diff --git a/lib/Rozier/composer.json b/lib/Rozier/composer.json index 8f0310cd..8c8e111b 100644 --- a/lib/Rozier/composer.json +++ b/lib/Rozier/composer.json @@ -49,19 +49,19 @@ "roadiz/nodetype-contracts": "~1.1.2", "roadiz/openid": "2.2.x-dev", "roadiz/rozier-bundle": "2.2.x-dev", - "symfony/asset": "5.4.*", - "symfony/filesystem": "5.4.*", - "symfony/form": "5.4.*", - "symfony/http-foundation": "5.4.*", - "symfony/http-kernel": "5.4.*", - "symfony/routing": "5.4.*", - "symfony/security-core": "5.4.*", - "symfony/security-csrf": "5.4.*", - "symfony/security-http": "5.4.*", - "symfony/translation": "5.4.*", - "symfony/validator": "5.4.*", - "symfony/workflow": "5.4.*", - "symfony/yaml": "5.4.*", + "symfony/asset": "6.4.*", + "symfony/filesystem": "6.4.*", + "symfony/form": "6.4.*", + "symfony/http-foundation": "6.4.*", + "symfony/http-kernel": "6.4.*", + "symfony/routing": "6.4.*", + "symfony/security-core": "6.4.*", + "symfony/security-csrf": "6.4.*", + "symfony/security-http": "6.4.*", + "symfony/translation": "6.4.*", + "symfony/validator": "6.4.*", + "symfony/workflow": "6.4.*", + "symfony/yaml": "6.4.*", "twig/twig": "^3.1" }, "require-dev": { diff --git a/lib/Rozier/src/RozierApp.php b/lib/Rozier/src/RozierApp.php index b9a38be4..b1b395a7 100644 --- a/lib/Rozier/src/RozierApp.php +++ b/lib/Rozier/src/RozierApp.php @@ -112,10 +112,10 @@ public function prepareBaseAssignation() /* * Use kernel DI container to delay API requests */ - $this->assignation['themeServices'] = $this->get(RozierServiceRegistry::class); + $this->assignation['themeServices'] = $this->container->get(RozierServiceRegistry::class); /** @var CsrfTokenManagerInterface $tokenManager */ - $tokenManager = $this->get('csrfTokenManager'); + $tokenManager = $this->container->get('csrfTokenManager'); /* * Switch this to true to use uncompressed JS and CSS files */ @@ -163,7 +163,7 @@ public function indexAction(Request $request) public function cssAction(Request $request): Response { /** @var NodeTypes $nodeTypesBag */ - $nodeTypesBag = $this->get('nodeTypesBag'); + $nodeTypesBag = $this->container->get('nodeTypesBag'); $this->assignation['mainColor'] = $this->getSettingsBag()->get('main_color'); $this->assignation['nodeTypes'] = $nodeTypesBag->all(); diff --git a/phpstan.neon b/phpstan.neon index 0032596b..8b554c0d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -54,6 +54,7 @@ parameters: reportUnmatchedIgnoredErrors: false checkGenericClassInNonGenericObjectType: false checkMissingIterableValueType: false + treatPhpDocTypesAsCertain: false includes: - vendor/phpstan/phpstan-doctrine/extension.neon - vendor/phpstan/phpstan-doctrine/rules.neon diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 26b7452f..f63743d4 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -16,13 +16,6 @@ - - - - - - - @@ -36,11 +29,20 @@ + + + + + + + + tests + lib/Models/tests