13 use Magento\Framework\Filter\Template\Tokenizer\ParameterFactory;
23 private $parameterFactory;
41 ParameterFactory $parameterFactory,
44 $this->parameterFactory = $parameterFactory;
45 $this->normalizer = $normalizer;
46 parent::__construct($serialize, $json);
58 preg_match_all(
'/(.*?){{widget(.*?)}}/si',
$value, $matches, PREG_SET_ORDER);
59 if (empty($matches)) {
63 foreach ($matches as $match) {
64 $convertedValue .= $match[1] .
'{{widget' . $this->convertWidgetParams($match[2]) .
'}}';
66 preg_match_all(
'/(.*?{{widget.*?}})*(?<ending>.*?)$/si',
$value, $matchesTwo, PREG_SET_ORDER);
67 if (isset($matchesTwo[0])) {
68 $convertedValue .= $matchesTwo[0][
'ending'];
71 return $convertedValue;
79 return parent::isValidJsonValue($this->normalizer->restoreReservedCharacters(
$value));
88 private function convertWidgetParams($paramsString)
91 $tokenizer = $this->parameterFactory->create();
92 $tokenizer->setString($paramsString);
93 $widgetParameters = $tokenizer->tokenize();
94 if (isset($widgetParameters[
'conditions_encoded'])) {
98 $conditions = $this->restoreReservedCharactersInSerializedContent($widgetParameters[
'conditions_encoded']);
99 $widgetParameters[
'conditions_encoded'] = $this->normalizer->replaceReservedCharacters(
100 parent::convert($conditions)
102 $newParamsString =
'';
103 foreach ($widgetParameters as $key => $parameter) {
104 $newParamsString .=
' ' . $key .
'="' . $parameter .
'"';
106 return $newParamsString;
108 return $paramsString;
118 private function restoreReservedCharactersInSerializedContent($serializedContent)
__construct(Serialize $serialize, Json $json, ParameterFactory $parameterFactory, Normalizer $normalizer)