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..f5d22e9 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,10 +16,8 @@ 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 diff --git a/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php b/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php new file mode 100644 index 0000000..ef85f76 --- /dev/null +++ b/src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php @@ -0,0 +1,101 @@ +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 + { + $parentRequest = $this->requestStack->getParentRequest(); + + if (!$parentRequest instanceof Request) { + return false; + } + + if (!$parentRequest->attributes->has(EditmodeResolver::ATTRIBUTE_EDITMODE) || $parentRequest->attributes->get(EditmodeResolver::ATTRIBUTE_EDITMODE) === false) { + return false; + } + + if (!$parentRequest->attributes->has(Block::ATTRIBUTE_IGNORE_EDITMODE_INDICES) || $parentRequest->attributes->get(Block::ATTRIBUTE_IGNORE_EDITMODE_INDICES) === false) { + return false; + } + + return true; + } +}