From 494d4cb9ac2dafeca062df206ad7da54e01f8bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Thu, 4 Jan 2024 16:52:31 +0100 Subject: [PATCH 1/3] extract helper functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Müller --- src/View/Helper/AbstractHelper.php | 29 +++++++++++++++++++++++++++ src/View/Helper/FormButton.php | 14 ++----------- src/View/Helper/FormCollection.php | 14 ++----------- src/View/Helper/FormLabel.php | 10 ++------- src/View/Helper/FormMultiCheckbox.php | 13 ++---------- src/View/Helper/FormRow.php | 9 ++------- src/View/Helper/FormSelect.php | 9 ++------- 7 files changed, 41 insertions(+), 57 deletions(-) diff --git a/src/View/Helper/AbstractHelper.php b/src/View/Helper/AbstractHelper.php index 736e467e2..610e6ef8e 100644 --- a/src/View/Helper/AbstractHelper.php +++ b/src/View/Helper/AbstractHelper.php @@ -7,6 +7,7 @@ use Laminas\Escaper\Exception\RuntimeException as EscaperException; use Laminas\Form\ElementInterface; use Laminas\Form\Exception\InvalidArgumentException; +use Laminas\Form\LabelAwareInterface; use Laminas\I18n\View\Helper\AbstractTranslatorHelper as BaseAbstractHelper; use Laminas\View\Helper\Doctype; use Laminas\View\Helper\EscapeHtml; @@ -558,4 +559,32 @@ protected function hasAllowedPrefix(string $attribute): bool return false; } + + /** + * translate the label + */ + protected function translateLabel(string $label): string + { + if (null !== ($translator = $this->getTranslator())) { + $label = $translator->translate( + $label, + $this->getTranslatorTextDomain() + ); + } + + return $label; + } + + /** + * escape the label + */ + protected function escapeLabel(ElementInterface $element, string $label): string + { + if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { + $escapeHtmlHelper = $this->getEscapeHtmlHelper(); + $label = $escapeHtmlHelper($label); + } + + return $label; + } } diff --git a/src/View/Helper/FormButton.php b/src/View/Helper/FormButton.php index c5585fe7d..bffe64797 100644 --- a/src/View/Helper/FormButton.php +++ b/src/View/Helper/FormButton.php @@ -6,7 +6,6 @@ use Laminas\Form\ElementInterface; use Laminas\Form\Exception; -use Laminas\Form\LabelAwareInterface; use function gettype; use function is_array; @@ -89,17 +88,8 @@ public function render(ElementInterface $element, ?string $buttonContent = null) } } - if (null !== ($translator = $this->getTranslator())) { - $buttonContent = $translator->translate( - $buttonContent, - $this->getTranslatorTextDomain() - ); - } - - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); - $buttonContent = $escapeHtmlHelper($buttonContent); - } + $buttonContent = $this->translateLabel($buttonContent); + $buttonContent = $this->escapeLabel($element, $buttonContent); return $openTag . $buttonContent . $this->closeTag(); } diff --git a/src/View/Helper/FormCollection.php b/src/View/Helper/FormCollection.php index 65452b574..ea605d7da 100644 --- a/src/View/Helper/FormCollection.php +++ b/src/View/Helper/FormCollection.php @@ -7,7 +7,6 @@ use Laminas\Form\Element\Collection as CollectionElement; use Laminas\Form\ElementInterface; use Laminas\Form\FieldsetInterface; -use Laminas\Form\LabelAwareInterface; use Laminas\View\Helper\HelperInterface; use RuntimeException; @@ -145,17 +144,8 @@ public function render(ElementInterface $element): string $legend = ''; if (! empty($label)) { - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate( - $label, - $this->getTranslatorTextDomain() - ); - } - - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); - $label = $escapeHtmlHelper($label); - } + $label = $this->translateLabel($label); + $label = $this->escapeLabel($element, $label); $legend = sprintf( $this->labelWrapper, diff --git a/src/View/Helper/FormLabel.php b/src/View/Helper/FormLabel.php index 756fe6bb9..687c768e9 100644 --- a/src/View/Helper/FormLabel.php +++ b/src/View/Helper/FormLabel.php @@ -61,14 +61,8 @@ public function __invoke(?ElementInterface $element = null, ?string $labelConten ); } - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate($label, $this->getTranslatorTextDomain()); - } - - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); - $label = $escapeHtmlHelper($label); - } + $label = $this->translateLabel($label); + $label = $this->escapeLabel($element, $label); } if ($label && $labelContent) { diff --git a/src/View/Helper/FormMultiCheckbox.php b/src/View/Helper/FormMultiCheckbox.php index fd9816c7c..1bd3da21b 100644 --- a/src/View/Helper/FormMultiCheckbox.php +++ b/src/View/Helper/FormMultiCheckbox.php @@ -137,7 +137,6 @@ protected function renderOptions( array $selectedOptions, array $attributes ): string { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $labelClose = $labelHelper->closeTag(); $labelPosition = $this->getLabelPosition(); @@ -212,16 +211,8 @@ protected function renderOptions( $closingBracket ); - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate( - $label, - $this->getTranslatorTextDomain() - ); - } - - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $label = $escapeHtmlHelper($label); - } + $label = $this->translateLabel($label); + $label = $this->escapeLabel($element, $label); $labelOpen = $labelHelper->openTag($labelAttributes); $template = $labelOpen . '%s%s' . $labelClose; diff --git a/src/View/Helper/FormRow.php b/src/View/Helper/FormRow.php index 3deb47a9d..d6c67c0fe 100644 --- a/src/View/Helper/FormRow.php +++ b/src/View/Helper/FormRow.php @@ -115,7 +115,6 @@ public function __invoke( */ public function render(ElementInterface $element, ?string $labelPosition = null): string { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); @@ -129,9 +128,7 @@ public function render(ElementInterface $element, ?string $labelPosition = null) if (isset($label) && '' !== $label) { // Translate the label - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate($label, $this->getTranslatorTextDomain()); - } + $label = $this->translateLabel($label); } // Does this element have errors ? @@ -170,9 +167,7 @@ public function render(ElementInterface $element, ?string $labelPosition = null) $labelAttributes = $element->getLabelAttributes(); } - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $label = $escapeHtmlHelper($label); - } + $label = $this->escapeLabel($element, $label); if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; diff --git a/src/View/Helper/FormSelect.php b/src/View/Helper/FormSelect.php index 6b1efc82d..138281d4c 100644 --- a/src/View/Helper/FormSelect.php +++ b/src/View/Helper/FormSelect.php @@ -185,7 +185,7 @@ public function renderOptions(array $options, array $selectedOptions = []): stri $value = $optionSpec['value']; } if (isset($optionSpec['label'])) { - $label = $optionSpec['label']; + $label = (string) $optionSpec['label']; } if (isset($optionSpec['selected'])) { $selected = $optionSpec['selected']; @@ -198,12 +198,7 @@ public function renderOptions(array $options, array $selectedOptions = []): stri $selected = true; } - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate( - $label, - $this->getTranslatorTextDomain() - ); - } + $label = $this->translateLabel($label); $attributes = [ 'value' => $value, From 5bb2a11bdc6c9844513ae80c2f0771ca4b8a0b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Thu, 4 Jan 2024 19:18:19 +0100 Subject: [PATCH 2/3] allow `int` for the translation function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Müller --- src/View/Helper/AbstractHelper.php | 19 ++++++------------- src/View/Helper/FormSelect.php | 2 +- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/View/Helper/AbstractHelper.php b/src/View/Helper/AbstractHelper.php index 610e6ef8e..5ff7b80fb 100644 --- a/src/View/Helper/AbstractHelper.php +++ b/src/View/Helper/AbstractHelper.php @@ -563,16 +563,9 @@ protected function hasAllowedPrefix(string $attribute): bool /** * translate the label */ - protected function translateLabel(string $label): string + protected function translateLabel(string|int $label): string|int { - if (null !== ($translator = $this->getTranslator())) { - $label = $translator->translate( - $label, - $this->getTranslatorTextDomain() - ); - } - - return $label; + return $this->getTranslator()?->translate($label, $this->getTranslatorTextDomain()) ?? $label; } /** @@ -580,11 +573,11 @@ protected function translateLabel(string $label): string */ protected function escapeLabel(ElementInterface $element, string $label): string { - if (! $element instanceof LabelAwareInterface || ! $element->getLabelOption('disable_html_escape')) { - $escapeHtmlHelper = $this->getEscapeHtmlHelper(); - $label = $escapeHtmlHelper($label); + if ($element instanceof LabelAwareInterface && $element->getLabelOption('disable_html_escape')) { + return $label; } - return $label; + $escapeHtmlHelper = $this->getEscapeHtmlHelper(); + return $escapeHtmlHelper($label); } } diff --git a/src/View/Helper/FormSelect.php b/src/View/Helper/FormSelect.php index 138281d4c..359a4b714 100644 --- a/src/View/Helper/FormSelect.php +++ b/src/View/Helper/FormSelect.php @@ -185,7 +185,7 @@ public function renderOptions(array $options, array $selectedOptions = []): stri $value = $optionSpec['value']; } if (isset($optionSpec['label'])) { - $label = (string) $optionSpec['label']; + $label = $optionSpec['label']; } if (isset($optionSpec['selected'])) { $selected = $optionSpec['selected']; From 93de9bb3ad3d53cdb45424ebe36fa65ddae2521a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 9 Jan 2024 09:01:31 +0100 Subject: [PATCH 3/3] mark functions as internal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Müller --- src/View/Helper/AbstractHelper.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/View/Helper/AbstractHelper.php b/src/View/Helper/AbstractHelper.php index 5ff7b80fb..2576e6156 100644 --- a/src/View/Helper/AbstractHelper.php +++ b/src/View/Helper/AbstractHelper.php @@ -562,6 +562,8 @@ protected function hasAllowedPrefix(string $attribute): bool /** * translate the label + * + * @internal */ protected function translateLabel(string|int $label): string|int { @@ -570,6 +572,8 @@ protected function translateLabel(string|int $label): string|int /** * escape the label + * + * @internal */ protected function escapeLabel(ElementInterface $element, string $label): string {