Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ContentConverter.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Cms\Setup;
7 
13 use Magento\Framework\Filter\Template\Tokenizer\ParameterFactory;
14 
19 {
23  private $parameterFactory;
24 
28  private $normalizer;
29 
38  public function __construct(
39  Serialize $serialize,
40  Json $json,
41  ParameterFactory $parameterFactory,
42  Normalizer $normalizer
43  ) {
44  $this->parameterFactory = $parameterFactory;
45  $this->normalizer = $normalizer;
46  parent::__construct($serialize, $json);
47  }
48 
56  public function convert($value)
57  {
58  preg_match_all('/(.*?){{widget(.*?)}}/si', $value, $matches, PREG_SET_ORDER);
59  if (empty($matches)) {
60  return $value;
61  }
62  $convertedValue = '';
63  foreach ($matches as $match) {
64  $convertedValue .= $match[1] . '{{widget' . $this->convertWidgetParams($match[2]) . '}}';
65  }
66  preg_match_all('/(.*?{{widget.*?}})*(?<ending>.*?)$/si', $value, $matchesTwo, PREG_SET_ORDER);
67  if (isset($matchesTwo[0])) {
68  $convertedValue .= $matchesTwo[0]['ending'];
69  }
70 
71  return $convertedValue;
72  }
73 
77  protected function isValidJsonValue($value)
78  {
79  return parent::isValidJsonValue($this->normalizer->restoreReservedCharacters($value));
80  }
81 
88  private function convertWidgetParams($paramsString)
89  {
91  $tokenizer = $this->parameterFactory->create();
92  $tokenizer->setString($paramsString);
93  $widgetParameters = $tokenizer->tokenize();
94  if (isset($widgetParameters['conditions_encoded'])) {
95  if ($this->isValidJsonValue($widgetParameters['conditions_encoded'])) {
96  return $paramsString;
97  }
98  $conditions = $this->restoreReservedCharactersInSerializedContent($widgetParameters['conditions_encoded']);
99  $widgetParameters['conditions_encoded'] = $this->normalizer->replaceReservedCharacters(
100  parent::convert($conditions)
101  );
102  $newParamsString = '';
103  foreach ($widgetParameters as $key => $parameter) {
104  $newParamsString .= ' ' . $key . '="' . $parameter . '"';
105  }
106  return $newParamsString;
107  } else {
108  return $paramsString;
109  }
110  }
111 
118  private function restoreReservedCharactersInSerializedContent($serializedContent)
119  {
120  $map = [
121  '{' => '[',
122  '}' => ']',
123  '"' => '`',
124  '\\' => '|',
125  ];
126  return str_replace(
127  array_values($map),
128  array_keys($map),
129  $serializedContent
130  );
131  }
132 }
__construct(Serialize $serialize, Json $json, ParameterFactory $parameterFactory, Normalizer $normalizer)
$value
Definition: gender.phtml:16