From 937a9783548f1a6a05f988ddc4a113d9ef991ce1 Mon Sep 17 00:00:00 2001 From: Julian Pustkuchen <3110-Anybody@users.noreply.drupalcode.org> Date: Mon, 26 Feb 2024 11:53:37 +0000 Subject: [PATCH 1/4] Implemented a E_USER_WARNING if wrong parameter count in drupalContextualLinks() --- src/TwigTweakExtension.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/TwigTweakExtension.php b/src/TwigTweakExtension.php index 36e3004..8b543ed 100644 --- a/src/TwigTweakExtension.php +++ b/src/TwigTweakExtension.php @@ -419,6 +419,18 @@ class TwigTweakExtension extends AbstractExtension { public static function drupalContextualLinks(string $id): array { $build['#cache']['contexts'] = ['user.permissions']; if (\Drupal::currentUser()->hasPermission('access contextual links')) { + // Pre-check the format of $id, as expected by Drupal core without further checks: + $contexts = explode('|', $id); + foreach ($contexts as $context) { + // Drupal core expects exactly three parameters: + // [$group, $route_parameters_raw, $metadata_raw] = explode(':', $context); + // in _contextual_id_to_links($id): + $contextParamCount = substr_count($context, ':') + if ($contextParamCount !== 3) { + trigger_error("Wrong {{ drupal_contextual_links() }} parameters. 3 parameters expected, separated by colon (\":\"), but {$contextParamCount} given in: \"{$id}\"", E_USER_WARNING); + } + } + $build['#type'] = 'contextual_links_placeholder'; $build['#id'] = $id; } From 2a4f410b288fa14870ed0b1933c694b6c0c9fd3a Mon Sep 17 00:00:00 2001 From: Julian Pustkuchen <3110-Anybody@users.noreply.drupalcode.org> Date: Mon, 26 Feb 2024 11:56:54 +0000 Subject: [PATCH 2/4] Update TwigTweakExtension.php --- src/TwigTweakExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TwigTweakExtension.php b/src/TwigTweakExtension.php index 8b543ed..dfe3e3f 100644 --- a/src/TwigTweakExtension.php +++ b/src/TwigTweakExtension.php @@ -425,7 +425,7 @@ class TwigTweakExtension extends AbstractExtension { // Drupal core expects exactly three parameters: // [$group, $route_parameters_raw, $metadata_raw] = explode(':', $context); // in _contextual_id_to_links($id): - $contextParamCount = substr_count($context, ':') + $contextParamCount = substr_count($context, ':'); if ($contextParamCount !== 3) { trigger_error("Wrong {{ drupal_contextual_links() }} parameters. 3 parameters expected, separated by colon (\":\"), but {$contextParamCount} given in: \"{$id}\"", E_USER_WARNING); } From 2fcb480467971a8a50ed1c70ff4eb8861ea23539 Mon Sep 17 00:00:00 2001 From: Julian Pustkuchen <3110-Anybody@users.noreply.drupalcode.org> Date: Mon, 26 Feb 2024 12:00:43 +0000 Subject: [PATCH 3/4] Improved message --- src/TwigTweakExtension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TwigTweakExtension.php b/src/TwigTweakExtension.php index dfe3e3f..f642aeb 100644 --- a/src/TwigTweakExtension.php +++ b/src/TwigTweakExtension.php @@ -427,7 +427,7 @@ class TwigTweakExtension extends AbstractExtension { // in _contextual_id_to_links($id): $contextParamCount = substr_count($context, ':'); if ($contextParamCount !== 3) { - trigger_error("Wrong {{ drupal_contextual_links() }} parameters. 3 parameters expected, separated by colon (\":\"), but {$contextParamCount} given in: \"{$id}\"", E_USER_WARNING); + trigger_error("Wrong {{ drupal_contextual_links() }} parameter given. 3 parameters expected separated by colon (\":\"), but {$contextParamCount+1} given in \"{$id}\"", E_USER_WARNING); } } From ecfd9d72d4440e2b6706fb0753667d657d7e451d Mon Sep 17 00:00:00 2001 From: Julian Pustkuchen <3110-Anybody@users.noreply.drupalcode.org> Date: Mon, 26 Feb 2024 12:18:14 +0000 Subject: [PATCH 4/4] Update TwigTweakExtension.php --- src/TwigTweakExtension.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/TwigTweakExtension.php b/src/TwigTweakExtension.php index f642aeb..109a6e8 100644 --- a/src/TwigTweakExtension.php +++ b/src/TwigTweakExtension.php @@ -425,9 +425,9 @@ class TwigTweakExtension extends AbstractExtension { // Drupal core expects exactly three parameters: // [$group, $route_parameters_raw, $metadata_raw] = explode(':', $context); // in _contextual_id_to_links($id): - $contextParamCount = substr_count($context, ':'); + $contextParamCount = substr_count($context, ':')+1; if ($contextParamCount !== 3) { - trigger_error("Wrong {{ drupal_contextual_links() }} parameter given. 3 parameters expected separated by colon (\":\"), but {$contextParamCount+1} given in \"{$id}\"", E_USER_WARNING); + trigger_error("Wrong {{ drupal_contextual_links() }} parameter given. 3 parameters expected separated by colon (\":\"), but {$contextParamCount} given in \"{$id}\"", E_USER_WARNING); } }