createSimpleVariables($uniqueSimpleVariables); return $result; } /** * @param array $variables [description] * * @return array [description] */ private function createSimpleVariables(array $variables): array { $filters = [ '__', '_', 'product.', ]; $data = []; foreach ($variables as $variable) { $forElement = \strpos($variable, $filters[2]) !== false; $twigVars = trim(str_replace([$filters[2]], '', $variable)); $name = trim(str_replace([$filters[0]], '', $twigVars)); $name = trim(str_replace([$filters[1]], ' ', $name)); $data[$variable] = ['twigVar' => $twigVars, 'name' => $name, 'forElement' => $forElement]; } // $data['forElement'] = array_map(function ($var) use ($filters) { // $position = \strpos($var, $filters[2]); // $filtered = $position || 0 === $position ? true : false; // return $filtered; // }, $variables); // $data['twigVar'] = $twigVars; // $data['name'] = array_map(function ($twigVar) use ($filters) { // return trim(str_replace([$filters[0], $filters[1]], ' ', $twigVar)); // }, $twigVars); return $data; } /** * @param string $content [description] * * @return array [description] */ public function extractNestedVariables(string $content): array { $data = []; foreach ($this->nestedVariablesExpressions as $expression) { $nestedVariables = []; $nestedRegex = '/{% (for ' . $expression . ' in )(.*?) %}|(?<='.$expression.'.)(.*?)(?=\s*\)|\s*}}|\s*\||\s|\s*,)/'; preg_match_all($nestedRegex, $content, $nestedVariables); $nestedVariables = array_unique(reset($nestedVariables)); $nestedExpression = $this->createNestedVariables($nestedVariables, $expression); $data = array_merge($data, $nestedExpression); } return $data; } /** * @param array $variables [description] * @param string $expression [description] * * @return array [description] */ private function createNestedVariables(array $variables, string $expression): array { $parentFilters = [ '{%', "for $expression in", '%}', 'product.', '_', 'if not break', ]; $childFilters = [ '{{', 'txtToXml(', "$expression.", ")", '}}', ]; $data = []; $parentName = ''; $parentTwigVar = ''; $forElement = false; foreach ($variables as $variable) { if (false !== strpos($variable, $parentFilters[1])) { $parentTwigVar = trim(\str_replace([$parentFilters[0], $parentFilters[1], $parentFilters[2], $parentFilters[3], $parentFilters[5]], '', $variable)); $parentName = trim(\str_replace($parentFilters[4], ' ', $parentTwigVar)); $forElement = \strpos($variable, $parentFilters[3]) !== false ; $data[$parentTwigVar] = ['twigVar' => $parentTwigVar, 'name' => $parentName, 'forElement' => $forElement, 'inputs' => []]; } else { $variableName = trim(\str_replace([$childFilters[0], $childFilters[1], $childFilters[2], $childFilters[3], $childFilters[4]], ' ', $variable)); $name = \str_replace($parentFilters[4], ' ', $variableName); $data[$parentTwigVar]['inputs'][] = ['variableName' => $variableName, 'name' => $name]; } } return $data; } }