Skip to content

Commit

Permalink
try to determinate locale and site when inline renderer is active
Browse files Browse the repository at this point in the history
  • Loading branch information
solverat committed May 30, 2024
1 parent e83a9f3 commit ccab1aa
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 5 deletions.
2 changes: 2 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 4 additions & 0 deletions config/services/route.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down
101 changes: 101 additions & 0 deletions src/Modifier/RouteItem/Type/PimcoreInlineRendererAwareModifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<?php

namespace I18nBundle\Modifier\RouteItem\Type;

use I18nBundle\Model\RouteItem\RouteItemInterface;
use Pimcore\Http\Request\Resolver\EditmodeResolver;
use Pimcore\Model\Document;
use Pimcore\Model\Document\Editable\Block;
use Pimcore\Model\Site;
use Pimcore\Tool\Frontend;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;

class PimcoreInlineRendererAwareModifier implements RouteItemModifierInterface
{
public function __construct(protected RequestStack $requestStack)
{
}

public function supportParameters(string $type, RouteItemInterface $routeItem, array $parameters, array $context): bool
{
return $this->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;
}
}

0 comments on commit ccab1aa

Please sign in to comment.