diff --git a/UPGRADE.md b/UPGRADE.md index afc6c46..f55c4ca 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,5 +1,7 @@ # Upgrade Notes +## 5.0.6 +- [IMPROVEMENT] Try to determinate locale and site when inline renderer is active (mostly via `checkMissingRequiredEditable()`) ## 5.0.5 - [BUGFIX] Fix exception handler decoration ## 5.0.4 diff --git a/config/services/route.yaml b/config/services/route.yaml index 393dcb7..0aa4b5a 100644 --- a/config/services/route.yaml +++ b/config/services/route.yaml @@ -29,5 +29,9 @@ services: - { name: i18n.modifier.route_item } I18nBundle\Modifier\RouteItem\Type\PimcoreExportDataAwareModifier: + tags: + - { name: i18n.modifier.route_item } + + I18nBundle\Modifier\RouteItem\Type\PimcoreInlineRendererAwareModifier: tags: - { name: i18n.modifier.route_item } \ No newline at end of file diff --git a/src/Modifier/RouteItem/Type/PimcoreExportDataAwareModifier.php b/src/Modifier/RouteItem/Type/PimcoreExportDataAwareModifier.php index 13a6f96..3ae9937 100644 --- a/src/Modifier/RouteItem/Type/PimcoreExportDataAwareModifier.php +++ b/src/Modifier/RouteItem/Type/PimcoreExportDataAwareModifier.php @@ -3,7 +3,6 @@ namespace I18nBundle\Modifier\RouteItem\Type; use I18nBundle\Model\RouteItem\RouteItemInterface; -use Pimcore\Http\RequestHelper; use Pimcore\Model\Document; use Pimcore\Model\Site; use Pimcore\Tool\Frontend; @@ -17,28 +16,18 @@ class PimcoreExportDataAwareModifier implements RouteItemModifierInterface 'pimcore_bundle_xliff_translation_xliffexport' ]; - public function __construct( - protected RequestStack $requestStack, - protected RequestHelper $requestHelper - ) { + public function __construct(protected RequestStack $requestStack) + { } public function supportParameters(string $type, RouteItemInterface $routeItem, array $parameters, array $context): bool { - if (!$this->requestStack->getMainRequest() instanceof Request) { - return false; - } - - return in_array($this->requestStack->getMainRequest()->attributes->get('_route'), self::EXPORT_AWARE_ROUTES, true); + return $this->isValidRequest(); } public function supportRequest(string $type, RouteItemInterface $routeItem, Request $request, array $context): bool { - if (!$this->requestStack->getMainRequest() instanceof Request) { - return false; - } - - return in_array($this->requestStack->getMainRequest()->attributes->get('_route'), self::EXPORT_AWARE_ROUTES, true); + return $this->isValidRequest(); } public function modifyByParameters(RouteItemInterface $routeItem, array $parameters, array $context): void @@ -93,4 +82,13 @@ protected function modify(RouteItemInterface $routeItem, Request $request): void $routeItem->getRouteParametersBag()->set('_locale', $element->getProperty('language')); } } + + private function isValidRequest(): bool + { + if (!$this->requestStack->getMainRequest() instanceof Request) { + return false; + } + + return in_array($this->requestStack->getMainRequest()->attributes->get('_route'), self::EXPORT_AWARE_ROUTES, true); + } } diff --git a/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php b/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php new file mode 100644 index 0000000..c470ffc --- /dev/null +++ b/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php @@ -0,0 +1,98 @@ +isValidRequest(); + } + + public function supportRequest(string $type, RouteItemInterface $routeItem, Request $request, array $context): bool + { + return $this->isValidRequest(); + } + + public function modifyByParameters(RouteItemInterface $routeItem, array $parameters, array $context): void + { + $this->modify($routeItem, $this->requestStack->getMainRequest()); + } + + public function modifyByRequest(RouteItemInterface $routeItem, Request $request, array $context): void + { + $this->modify($routeItem, $request); + } + + protected function modify(RouteItemInterface $routeItem, Request $request): void + { + $document = $this->determinateDocumentByRoute($request); + + $hasSiteContext = $routeItem->getRouteContextBag()->has('site') && $routeItem->getRouteContextBag()->get('site') !== null; + $hasLocaleParameter = $routeItem->getRouteParametersBag()->has('_locale'); + + if (!$document instanceof Document) { + return; + } + + if (!$hasSiteContext) { + $site = Frontend::getSiteForDocument($document); + if ($site instanceof Site) { + $routeItem->getRouteContextBag()->set('site', $site); + } + } + + if (!$hasLocaleParameter && !empty($document->getProperty('language'))) { + $routeItem->getRouteParametersBag()->set('_locale', $document->getProperty('language')); + } + } + + private function determinateDocumentByRoute(Request $request): ?Document + { + if ( + $request->attributes->get('_route') === 'pimcore_admin_document_document_add' && + $request->request->get('elementType') === 'document' && + !empty($request->request->get('parentId')) + ) { + return Document::getById($request->request->get('parentId')); + } + + if ( + $request->attributes->get('_route') === 'pimcore_admin_document_page_save' && + !empty($request->request->get('id')) + ) { + return Document::getById($request->request->get('id')); + } + + return null; + } + + private function isValidRequest(): bool + { + if (!$this->requestStack->getMainRequest() instanceof Request) { + return false; + } + + return in_array( + $this->requestStack->getMainRequest()->attributes->get('_route'), + self::EDIT_AWARE_ROUTES, + true + ); + } +}