From 5db3928dfa1b494ccba6c088134e518c357911bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Haas?= <21467-jurgenhaas@users.noreply.drupalcode.org> Date: Thu, 22 Aug 2024 13:25:57 +0000 Subject: [PATCH 01/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget --- modules/form/src/HookHandler.php | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index b67d9394e..e9a470af8 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -202,16 +202,18 @@ class HookHandler extends BaseHookHandler { try { $form['#entity'] = clone $entity; - $original_triggering_element = $form_state->getTriggeringElement(); - $form_state->setTriggeringElement([ - '#limit_validation_errors' => [], - ]); - /** @var \Drupal\Core\Form\FormValidatorInterface $validator */ - $validator = \Drupal::service('form_validator'); - $form_state->setValidationEnforced(TRUE); - $validator->validateForm(\Drupal::formBuilder()->getFormId($form_state->getFormObject(), $form_state), $form, $form_state); - $form_state->setTriggeringElement($original_triggering_element); - $form_state->setValidationEnforced(TRUE); + if ($form['#eca_ief_info']['widget_plugin_id'] !== 'inline_entity_form_complex') { + $original_triggering_element = $form_state->getTriggeringElement(); + $form_state->setTriggeringElement([ + '#limit_validation_errors' => [], + ]); + /** @var \Drupal\Core\Form\FormValidatorInterface $validator */ + $validator = \Drupal::service('form_validator'); + $form_state->setValidationEnforced(TRUE); + $validator->validateForm(\Drupal::formBuilder()->getFormId($form_state->getFormObject(), $form_state), $form, $form_state); + $form_state->setTriggeringElement($original_triggering_element); + $form_state->setValidationEnforced(TRUE); + } /** @var \Drupal\inline_entity_form\InlineFormInterface $handler */ $handler = \Drupal::entityTypeManager()->getHandler($form['#entity']->getEntityTypeId(), 'inline_form'); -- GitLab From c1da0d41e4fdf6bcf0987e5d7230da2588622fd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Haas?= <21467-jurgenhaas@users.noreply.drupalcode.org> Date: Thu, 22 Aug 2024 16:00:57 +0000 Subject: [PATCH 02/11] Downgrading logger message to warning --- modules/form/src/HookHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index e9a470af8..3373e4e20 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -228,7 +228,7 @@ class HookHandler extends BaseHookHandler { ], $form['#entity']); } catch (\Throwable $t) { - \Drupal::logger('eca_form')->error("An error occurred while trying to build an inline entity from submitted form values. This might be a problem in case you use ECA to extend inline entity forms. Please report this to the ECA issue queue to help us improving it."); + \Drupal::logger('eca_form')->warning("An error occurred while trying to build an inline entity from submitted form values. This might be a problem in case you use ECA to extend inline entity forms. Please report this to the ECA issue queue to help us improving it."); } // Info is not needed anymore, remove it to prevent unnecessary bloat. -- GitLab From 1f3d21b08af14d6388de270f7e77184a47e9f5d2 Mon Sep 17 00:00:00 2001 From: lexsoft <lex.soft.0.0@gmail.com> Date: Tue, 12 Nov 2024 14:25:01 +0000 Subject: [PATCH 03/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget - ensure broader compatibility --- modules/form/src/HookHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 3373e4e20..32b2669b6 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -202,7 +202,7 @@ class HookHandler extends BaseHookHandler { try { $form['#entity'] = clone $entity; - if ($form['#eca_ief_info']['widget_plugin_id'] !== 'inline_entity_form_complex') { + if (!str_starts_with($form['#eca_ief_info']['widget_plugin_id'], 'inline_entity_form_complex')) { $original_triggering_element = $form_state->getTriggeringElement(); $form_state->setTriggeringElement([ '#limit_validation_errors' => [], -- GitLab From efcab1c7311d20e029bc85cf93f496873cbd18a9 Mon Sep 17 00:00:00 2001 From: John Locke <john@freelock.com> Date: Fri, 4 Apr 2025 11:01:07 -0700 Subject: [PATCH 04/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget --- modules/form/src/HookHandler.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 32b2669b6..4354c1be7 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -268,10 +268,14 @@ class HookHandler extends BaseHookHandler { else { return; } + $delta = $form_state->getTriggeringElement()['#ief_row_delta']; + if (is_null($delta)) { + return; + } $info = [ 'parent' => $context['items']->getEntity(), 'field_name' => $context['items']->getFieldDefinition()->getName(), - 'delta' => $context['delta'], + 'delta' => $delta, 'widget_plugin_id' => $context['widget']->getPluginId(), ]; $entity_form['#eca_ief_info'] = &$info; -- GitLab From 1ba6a3fb4e9efac76f05b10dd81589c02f573177 Mon Sep 17 00:00:00 2001 From: John Locke <john@freelock.com> Date: Sat, 5 Apr 2025 11:10:58 -0700 Subject: [PATCH 05/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget - fix test to specify delta the same way IEF does --- modules/form/tests/src/Kernel/InlineEntityFormTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/form/tests/src/Kernel/InlineEntityFormTest.php b/modules/form/tests/src/Kernel/InlineEntityFormTest.php index bf7737dc6..e2339f656 100644 --- a/modules/form/tests/src/Kernel/InlineEntityFormTest.php +++ b/modules/form/tests/src/Kernel/InlineEntityFormTest.php @@ -81,6 +81,10 @@ class InlineEntityFormTest extends KernelTestBase { $form_object = \Drupal::entityTypeManager()->getFormObject('node', 'edit'); $form_object->setEntity($article); $form_state = new FormState(); + + // IEF delta is found using the triggeringElement -- without this, no default entity is loaded. + $form_state->setTriggeringElement(['#ief_row_delta' => 0]); + $form = \Drupal::formBuilder()->buildForm($form_object, $form_state); $this->assertTrue($form['field_pages']['widget'][0]['inline_entity_form']['title']['widget'][0]['#disabled'], "The model has set the title field to be disabled."); -- GitLab From 51359ef3eaa64a1fb8e46a201f90fdc02e5f27cf Mon Sep 17 00:00:00 2001 From: John Locke <john@freelock.com> Date: Sat, 5 Apr 2025 12:47:21 -0700 Subject: [PATCH 06/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget - fix cs issue (line too long) --- modules/form/tests/src/Kernel/InlineEntityFormTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/form/tests/src/Kernel/InlineEntityFormTest.php b/modules/form/tests/src/Kernel/InlineEntityFormTest.php index e2339f656..f1e7b9de4 100644 --- a/modules/form/tests/src/Kernel/InlineEntityFormTest.php +++ b/modules/form/tests/src/Kernel/InlineEntityFormTest.php @@ -82,7 +82,8 @@ class InlineEntityFormTest extends KernelTestBase { $form_object->setEntity($article); $form_state = new FormState(); - // IEF delta is found using the triggeringElement -- without this, no default entity is loaded. + // IEF delta is found using the triggeringElement -- + // without this, no default entity is loaded. $form_state->setTriggeringElement(['#ief_row_delta' => 0]); $form = \Drupal::formBuilder()->buildForm($form_object, $form_state); -- GitLab From ad408565981430acfcb5827b883b082846bb9eac Mon Sep 17 00:00:00 2001 From: John Locke <john@freelock.com> Date: Tue, 8 Apr 2025 01:01:59 -0700 Subject: [PATCH 07/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget - fix ComplexInlineEntityForm --- modules/form/src/HookHandler.php | 28 ++++++++++++++----- .../tests/src/Kernel/InlineEntityFormTest.php | 4 --- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index a18124881..15a2c4cae 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -259,12 +259,30 @@ class HookHandler extends BaseHookHandler { return; } + $plugin_id = $context['widget']->getPluginId(); + $add_complex = false; + // If plugin_id == 'inline_entity_form_simple', we can safely attach #entity and we have the correct #delta. + if ($plugin_id == 'inline_entity_form_simple') { + $delta = $context['delta']; + } + elseif ($plugin_id == 'inline_entity_form_complex') { + $trigger = $form_state->getTriggeringElement(); + if (isset($trigger['#ief_form']) && $trigger['#ief_form'] == 'add') { + $delta = $context['items']->count(); + } else { + $delta = $trigger['#ief_row_delta']; + } + } + else { + // unrecognized widget. + return; + } // Pass along information for ::alterInlineEntityForm(). if (isset($element['inline_entity_form'])) { $entity_form = &$element['inline_entity_form']; } - elseif (isset($element['entities'][$context['delta']]['form']['inline_entity_form'])) { - $entity_form = &$element['entities'][$context['delta']]['form']['inline_entity_form']; + elseif (isset($element['entities'][$delta]['form']['inline_entity_form'])) { + $entity_form = &$element['entities'][$delta]['form']['inline_entity_form']; } elseif (isset($element['form']['inline_entity_form'])) { $entity_form = &$element['form']['inline_entity_form']; @@ -272,15 +290,11 @@ class HookHandler extends BaseHookHandler { else { return; } - $delta = $form_state->getTriggeringElement()['#ief_row_delta']; - if (is_null($delta)) { - return; - } $info = [ 'parent' => $context['items']->getEntity(), 'field_name' => $context['items']->getFieldDefinition()->getName(), 'delta' => $delta, - 'widget_plugin_id' => $context['widget']->getPluginId(), + 'widget_plugin_id' => $plugin_id, ]; $entity_form['#eca_ief_info'] = &$info; diff --git a/modules/form/tests/src/Kernel/InlineEntityFormTest.php b/modules/form/tests/src/Kernel/InlineEntityFormTest.php index f1e7b9de4..745fafb65 100644 --- a/modules/form/tests/src/Kernel/InlineEntityFormTest.php +++ b/modules/form/tests/src/Kernel/InlineEntityFormTest.php @@ -82,10 +82,6 @@ class InlineEntityFormTest extends KernelTestBase { $form_object->setEntity($article); $form_state = new FormState(); - // IEF delta is found using the triggeringElement -- - // without this, no default entity is loaded. - $form_state->setTriggeringElement(['#ief_row_delta' => 0]); - $form = \Drupal::formBuilder()->buildForm($form_object, $form_state); $this->assertTrue($form['field_pages']['widget'][0]['inline_entity_form']['title']['widget'][0]['#disabled'], "The model has set the title field to be disabled."); -- GitLab From dab6976144cea266201fe0a1747c2e5d6c41a939 Mon Sep 17 00:00:00 2001 From: John Locke <john@freelock.com> Date: Tue, 8 Apr 2025 09:12:32 -0700 Subject: [PATCH 08/11] Issue #3469697 by jurgenhaas: ECA Form breaks complex IEF widget - phpcs issues --- modules/form/src/HookHandler.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 15a2c4cae..75c0e9378 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -260,8 +260,9 @@ class HookHandler extends BaseHookHandler { } $plugin_id = $context['widget']->getPluginId(); - $add_complex = false; - // If plugin_id == 'inline_entity_form_simple', we can safely attach #entity and we have the correct #delta. + $add_complex = FALSE; + // If plugin_id == 'inline_entity_form_simple', we can safely attach #entity + // and we have the correct #delta. if ($plugin_id == 'inline_entity_form_simple') { $delta = $context['delta']; } @@ -269,12 +270,13 @@ class HookHandler extends BaseHookHandler { $trigger = $form_state->getTriggeringElement(); if (isset($trigger['#ief_form']) && $trigger['#ief_form'] == 'add') { $delta = $context['items']->count(); - } else { + } + else { $delta = $trigger['#ief_row_delta']; } } else { - // unrecognized widget. + // Unrecognized widget. return; } // Pass along information for ::alterInlineEntityForm(). -- GitLab From a01c0d8f319a9066ea28606486531d988a521bcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Haas?= <21467-jurgenhaas@users.noreply.drupalcode.org> Date: Thu, 10 Apr 2025 14:11:17 +0000 Subject: [PATCH 09/11] Apply 2 suggestion(s) to 2 file(s) --- modules/form/src/HookHandler.php | 8 ++++---- modules/form/tests/src/Kernel/InlineEntityFormTest.php | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 75c0e9378..4f7986723 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -261,14 +261,14 @@ class HookHandler extends BaseHookHandler { $plugin_id = $context['widget']->getPluginId(); $add_complex = FALSE; - // If plugin_id == 'inline_entity_form_simple', we can safely attach #entity + // If plugin_id === 'inline_entity_form_simple', we can safely attach #entity // and we have the correct #delta. - if ($plugin_id == 'inline_entity_form_simple') { + if ($plugin_id === 'inline_entity_form_simple') { $delta = $context['delta']; } - elseif ($plugin_id == 'inline_entity_form_complex') { + elseif ($plugin_id === 'inline_entity_form_complex') { $trigger = $form_state->getTriggeringElement(); - if (isset($trigger['#ief_form']) && $trigger['#ief_form'] == 'add') { + if (isset($trigger['#ief_form']) && $trigger['#ief_form'] === 'add') { $delta = $context['items']->count(); } else { diff --git a/modules/form/tests/src/Kernel/InlineEntityFormTest.php b/modules/form/tests/src/Kernel/InlineEntityFormTest.php index 745fafb65..bf7737dc6 100644 --- a/modules/form/tests/src/Kernel/InlineEntityFormTest.php +++ b/modules/form/tests/src/Kernel/InlineEntityFormTest.php @@ -81,7 +81,6 @@ class InlineEntityFormTest extends KernelTestBase { $form_object = \Drupal::entityTypeManager()->getFormObject('node', 'edit'); $form_object->setEntity($article); $form_state = new FormState(); - $form = \Drupal::formBuilder()->buildForm($form_object, $form_state); $this->assertTrue($form['field_pages']['widget'][0]['inline_entity_form']['title']['widget'][0]['#disabled'], "The model has set the title field to be disabled."); -- GitLab From 86fab8bc6ff497a1a3c35e2a778b98c0ab333c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Haas?= <21467-jurgenhaas@users.noreply.drupalcode.org> Date: Thu, 10 Apr 2025 14:21:58 +0000 Subject: [PATCH 10/11] Apply 1 suggestion(s) to 1 file(s) --- modules/form/src/HookHandler.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 4f7986723..37f309736 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -261,8 +261,8 @@ class HookHandler extends BaseHookHandler { $plugin_id = $context['widget']->getPluginId(); $add_complex = FALSE; - // If plugin_id === 'inline_entity_form_simple', we can safely attach #entity - // and we have the correct #delta. + // If plugin_id === 'inline_entity_form_simple', we can safely attach + // #entity and we have the correct #delta. if ($plugin_id === 'inline_entity_form_simple') { $delta = $context['delta']; } -- GitLab From bb3b5ea46ed93aa991e9a45b436345b9cf2faf1f Mon Sep 17 00:00:00 2001 From: mxh <webit.haupt@googlemail.com> Date: Sat, 12 Apr 2025 09:15:26 +0200 Subject: [PATCH 11/11] Issue #3469697 by freelock, jurgenhaas, lexsoft, mxh: ECA Form breaks complex IEF widget --- modules/form/src/HookHandler.php | 33 +++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/modules/form/src/HookHandler.php b/modules/form/src/HookHandler.php index 37f309736..267632642 100644 --- a/modules/form/src/HookHandler.php +++ b/modules/form/src/HookHandler.php @@ -259,26 +259,29 @@ class HookHandler extends BaseHookHandler { return; } - $plugin_id = $context['widget']->getPluginId(); - $add_complex = FALSE; - // If plugin_id === 'inline_entity_form_simple', we can safely attach - // #entity and we have the correct #delta. - if ($plugin_id === 'inline_entity_form_simple') { - $delta = $context['delta']; - } - elseif ($plugin_id === 'inline_entity_form_complex') { - $trigger = $form_state->getTriggeringElement(); - if (isset($trigger['#ief_form']) && $trigger['#ief_form'] === 'add') { - $delta = $context['items']->count(); + $delta = $context['delta'] ?? NULL; + if (isset($element['#ief_id']) && ($triggering_element = &$form_state->getTriggeringElement())) { + if (isset($triggering_element['#ief_row_delta'])) { + $delta = $triggering_element['#ief_row_delta']; } else { - $delta = $trigger['#ief_row_delta']; + $entities = $form_state->get([ + 'inline_entity_form', + $element['#ief_id'], + 'entities', + ]); + if (!empty($entities)) { + $delta = count($entities); + } + elseif (isset($triggering_element['#ief_form']) && $triggering_element['#ief_form'] === 'add') { + $delta = $context['items']->count(); + } } } - else { - // Unrecognized widget. + if (!isset($delta)) { return; } + // Pass along information for ::alterInlineEntityForm(). if (isset($element['inline_entity_form'])) { $entity_form = &$element['inline_entity_form']; @@ -296,7 +299,7 @@ class HookHandler extends BaseHookHandler { 'parent' => $context['items']->getEntity(), 'field_name' => $context['items']->getFieldDefinition()->getName(), 'delta' => $delta, - 'widget_plugin_id' => $plugin_id, + 'widget_plugin_id' => $context['widget']->getPluginId(), ]; $entity_form['#eca_ief_info'] = &$info; -- GitLab