Skip to content
Snippets Groups Projects
Commit 2fb039a1 authored by Robin De Herdt's avatar Robin De Herdt Committed by Benjamin Cizej
Browse files

Issue #3499394 by robindh: Ajax issue on multilingual sites

parent 626b663a
No related branches found
No related tags found
1 merge request!9Multilingual compatibility for entity reference & media library widgets
......@@ -11,6 +11,7 @@ use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteProviderInterface;
use Drupal\Core\Url;
use Drupal\kontainer\Service\KontainerServiceInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
......@@ -87,12 +88,11 @@ class KontainerReferenceItemWidget extends EntityReferenceAutocompleteWidget {
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
try {
$createKontainerMediaPath = $this->routeProvider
->getRouteByName('kontainer.create_media')
->getPath();
$createKontainerMediaPathTrimmed = ltrim($createKontainerMediaPath, '/');
$url = Url::fromRoute('kontainer.create_media');
$url->setOption('query', [
'token' => $this->csrfTokenGenerator->get($url->getInternalPath()),
]);
$fieldMachineName = $items->getName();
$csrfToken = $this->csrfTokenGenerator->get($createKontainerMediaPathTrimmed);
$element['target_id']['#attributes']['readonly'] = 'readonly';
$element['target_id']['#attributes']['data-kontainer-selector'] = 'kontainer-reference-' . $fieldMachineName . '-' . $delta;
$element['kontainer_button'] = [
......@@ -106,13 +106,15 @@ class KontainerReferenceItemWidget extends EntityReferenceAutocompleteWidget {
'#attached' => [
'library' => 'kontainer/kontainer-lib',
'drupalSettings' => [
'ajaxTrustedUrl' => [$createKontainerMediaPath . '?token=' . $csrfToken => TRUE],
'ajaxTrustedUrl' => [
$url->toString(TRUE)->getGeneratedUrl() => TRUE,
],
'kontainer' => [
'kontainerUrl' => $this->configFactory
->get('kontainer.settings')
->get('kontainer_url'),
'token' => $csrfToken,
'createMediaPath' => $createKontainerMediaPathTrimmed,
'token' => $this->csrfTokenGenerator->get($url->getInternalPath()),
'createMediaPath' => $url->getInternalPath(),
],
],
],
......
......@@ -471,11 +471,11 @@ class KontainerService implements KontainerServiceInterface {
* {@inheritDoc}
*/
public function buildKontainerSelectButtonArray(string $type, array $attributes): array {
$createKontainerMediaPath = $this->routeProvider
->getRouteByName('kontainer.create_media')
->getPath();
$createKontainerMediaPathTrimmed = ltrim($createKontainerMediaPath, '/');
$csrfToken = $this->csrfTokenGenerator->get($createKontainerMediaPathTrimmed);
$url = Url::fromRoute('kontainer.create_media');
$url->setOption('query', [
'token' => $this->csrfTokenGenerator->get($url->getInternalPath()),
]);
$output = [
'#type' => $type,
'#value' => 'Kontainer select',
......@@ -483,13 +483,15 @@ class KontainerService implements KontainerServiceInterface {
'#attached' => [
'library' => 'kontainer/kontainer-lib',
'drupalSettings' => [
'ajaxTrustedUrl' => [$createKontainerMediaPath . '?token=' . $csrfToken => TRUE],
'ajaxTrustedUrl' => [
$url->toString(TRUE)->getGeneratedUrl() => TRUE,
],
'kontainer' => [
'kontainerUrl' => $this->configFactory
->get('kontainer.settings')
->get('kontainer_url'),
'token' => $csrfToken,
'createMediaPath' => $createKontainerMediaPathTrimmed,
'token' => $this->csrfTokenGenerator->get($url->getInternalPath()),
'createMediaPath' => $url->getInternalPath(),
],
],
],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment