static function processElementTransformationChild($useComments, $php, $tpl, &$node, $elementTree, $elementList, &$resourceData) { $count = count($elementList); $lastElement = null; $newElementList = array(); for ($i = 0; $i < $count; ++$i) { $element =& $elementList[$i]; $elementType = $element[0]; if ($elementType == eZTemplate::TYPE_OPERATOR) { $operatorName = $element[1][0]; $operatorParameters = array_slice($element[1], 1); if (!isset($tpl->Operators[$operatorName])) { return false; } if (is_array($tpl->Operators[$operatorName])) { $tpl->loadAndRegisterOperators($tpl->Operators[$operatorName]); } $operatorObject =& $tpl->Operators[$operatorName]; if (is_object($operatorObject)) { $hasTransformationSupport = false; $transformParameters = false; $inputAsParameter = false; $knownType = 'static'; if (method_exists($operatorObject, 'operatorTemplateHints')) { $hints = $operatorObject->operatorTemplateHints(); if (isset($hints[$operatorName]) and isset($hints[$operatorName]['element-transformation']) and $hints[$operatorName]['element-transformation']) { $hasTransformationSupport = true; } if ($hasTransformationSupport and isset($hints[$operatorName]['element-transformation-func'])) { $transformationMethod = $hints[$operatorName]['element-transformation-func']; } else { $transformationMethod = 'templateElementTransformation'; } if (isset($hints[$operatorName]) and isset($hints[$operatorName]['transform-parameters'])) { $transformParameters = $hints[$operatorName]['transform-parameters']; } if (isset($hints[$operatorName]) and isset($hints[$operatorName]['input-as-parameter'])) { $inputAsParameter = $hints[$operatorName]['input-as-parameter']; } if (isset($hints[$operatorName]['output']) and !$hints[$operatorName]['output']) { $knownType = 'null'; } else { if (isset($hints[$operatorName]['output-type'])) { $knownType = $hints[$operatorName]['output-type']; } } } if ($hasTransformationSupport and method_exists($operatorObject, $transformationMethod)) { $resetNewElementList = false; if ($transformParameters) { $newParameters = array(); if ($inputAsParameter) { $newParameterElements = eZTemplateCompiler::processElementTransformationChild($useComments, $php, $tpl, $node, $elementTree, $newElementList, $resourceData); if (count($newParameterElements) > 0 or $inputAsParameter === 'always') { $newParameters[] = $newParameterElements; $resetNewElementList = true; } } foreach ($operatorParameters as $operatorParameter) { $newParameterElements = eZTemplateCompiler::processElementTransformationChild($useComments, $php, $tpl, $node, $elementTree, $operatorParameter, $resourceData); if (!$newParameterElements) { $newParameters[] = $operatorParameter; } else { $newParameters[] = $newParameterElements; } } $operatorParameters = $newParameters; } $newElements = $operatorObject->{$transformationMethod}($operatorName, $node, $tpl, $resourceData, $element, $lastElement, $elementList, $elementTree, $operatorParameters); if (is_array($newElements)) { if ($resetNewElementList) { $newElementList = $newElements; } else { $newElementList = array_merge($newElementList, $newElements); } } else { $newElementList[] = $element; } } else { $newElementList[] = $element; } } else { if ($resourceData['test-compile']) { $tpl->warning('', "Operator '{$operatorName}' is not registered."); } } } else { $newElementList[] = $element; } $lastElement = $element; } return $newElementList; }