From 6c4f4103d2634cc42d0b7d2cbf2352a2b85811c1 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 16 Mar 2018 07:40:36 -0400 Subject: [PATCH] Fix issue processwire/processwire-issues#542 in InputfieldRepeater.module repeater item titles, where numbered HTML entities (like the one for apostrophe) were getting their "#" character removed, making it look like double encoding --- .../InputfieldRepeater.module | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module b/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module index 6025809f..ad65c7af 100644 --- a/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module +++ b/wire/modules/Fieldtype/FieldtypeRepeater/InputfieldRepeater.module @@ -132,8 +132,19 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { if($page->id && $repeaterTitle) { // custom repeater titles specified + $hasCnt = stripos($repeaterTitle, '#n') !== false; - if($this->wire('sanitizer')->fieldName($repeaterTitle) === $repeaterTitle) { + // update index numbers? + if($hasCnt) { + // replace "#n" with index number of repeater item + $repeaterTitle = str_replace("#n", "#$cnt", $repeaterTitle); + } + + if(strpos($repeaterTitle, '{') !== false) { + // formatted {label} + $out = $page->getMarkup($repeaterTitle); + + } else if(!$hasCnt && $this->wire('sanitizer')->fieldName($repeaterTitle) === $repeaterTitle) { // just a single field name $value = $page->getFormatted($repeaterTitle); if(is_object($value)) { @@ -145,24 +156,12 @@ class InputfieldRepeater extends Inputfield implements InputfieldItemList { $out = (string) $value; } } - } else if(strpos($repeaterTitle, '{') !== false) { - // formatted {label} - $out = $page->getMarkup($repeaterTitle); } else { // label, but with no page variables $out = $repeaterTitle; } $out = strip_tags(trim($out)); - - // update index numbers? - if(stripos($out, '#n') !== false) { - // replace "#n" with index number of repeater item - $out = preg_replace('/#n\b/i', "#$cnt", $out); - } else { - // otherwise remove any pound signs so the JS side doesn't detect them - $out = str_replace('#', '', $out); - } } if(!strlen($out)) {