function functionTemplateStatistics($functionName, &$node, $tpl, $resourceData, $namespace, &$stats) { $newNamespace = $namespace; $parameters = eZTemplateNodeTool::extractFunctionNodeParameters($node); if ($functionName == $this->SetName or $functionName == $this->LetName or $functionName == $this->DefaultName) { if (isset($parameters['-name'])) { $nameData = $parameters['-name']; $nameDataInspection = eZTemplateCompiler::inspectVariableData($tpl, $nameData, false, $resourceData); if ($nameDataInspection['is-constant'] and !$nameDataInspection['has-operators'] and !$nameDataInspection['has-attributes']) { $parameterNamespace = $nameDataInspection['new-data'][0][1]; $newNamespace = $tpl->mergeNamespace($namespace, $parameterNamespace); } } } if ($functionName == $this->SetName) { foreach (array_keys($parameters) as $name) { if ($name == '-name') { continue; } $parameter =& $parameters[$name]; eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $name, array('is_modified' => true)); eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameter, false, $resourceData, $namespace, $stats); } } else { if ($functionName == $this->LetName) { foreach (array_keys($parameters) as $name) { if ($name == '-name') { continue; } $parameter =& $parameters[$name]; eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $name, array('is_created' => true, 'is_removed' => true)); eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameter, false, $resourceData, $namespace, $stats); } } else { if ($functionName == $this->DefaultName) { foreach (array_keys($parameters) as $name) { if ($name == '-name') { continue; } $parameter =& $parameters[$name]; eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $name, array()); eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameter, false, $resourceData, $namespace, $stats); } } } } if ($functionName == $this->LetName or $functionName == $this->DefaultName) { $functionChildren = eZTemplateNodeTool::extractFunctionNodeChildren($node); if (is_array($functionChildren)) { eZTemplateCompiler::calculateVariableStatisticsChildren($tpl, $functionChildren, $resourceData, $newNamespace, $stats); } } }
static function calculateVariableNodeStatistics($tpl, $variableData, $variablePlacement, &$resourceData, $namespace, &$stats) { if (!is_array($variableData)) { return false; } foreach ($variableData as $variableItem) { $variableItemType = $variableItem[0]; $variableItemData = $variableItem[1]; $variableItemPlacement = $variableItem[2]; if ($variableItemType == eZTemplate::TYPE_STRING or $variableItemType == eZTemplate::TYPE_IDENTIFIER) { } else { if ($variableItemType == eZTemplate::TYPE_NUMERIC) { } else { if ($variableItemType == eZTemplate::TYPE_ARRAY) { } else { if ($variableItemType == eZTemplate::TYPE_BOOLEAN) { } else { if ($variableItemType == eZTemplate::TYPE_VARIABLE) { $variableNamespace = $variableItemData[0]; $variableNamespaceScope = $variableItemData[1]; $variableName = $variableItemData[2]; if ($variableNamespaceScope == eZTemplate::NAMESPACE_SCOPE_GLOBAL) { $newNamespace = $variableNamespace; } else { if ($variableNamespaceScope == eZTemplate::NAMESPACE_SCOPE_LOCAL) { $newNamespace = $variableNamespace; } else { if ($variableNamespaceScope == eZTemplate::NAMESPACE_SCOPE_RELATIVE) { $newNamespace = $tpl->mergeNamespace($namespace, $variableNamespace); } else { $newNamespace = false; } } } eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $variableName, array('is_accessed' => true)); } else { if ($variableItemType == eZTemplate::TYPE_ATTRIBUTE) { eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $variableItemData, $variableItemPlacement, $resourceData, $namespace, $stats); } else { if ($variableItemType == eZTemplate::TYPE_OPERATOR) { $operatorName = $variableItemData[0]; if (!isset($tpl->Operators[$operatorName])) { continue; } if (is_array($tpl->Operators[$operatorName])) { $tpl->loadAndRegisterOperators($tpl->Operators[$operatorName]); } $operator =& $tpl->Operators[$operatorName]; if (is_object($operator)) { $hasStats = false; if (method_exists($operator, 'operatorTemplateHints')) { $hints = $operator->operatorTemplateHints(); if (isset($hints[$operatorName])) { $operatorHints = $hints[$operatorName]; $hasParameters = false; if (isset($operatorHints['parameters'])) { $hasParameters = $operatorHints['parameters']; } if ($hasParameters === true) { $parameters = $variableItemData; $count = count($parameters) - 1; for ($i = 0; $i < $count; ++$i) { $parameter =& $parameters[$i + 1]; $parameterData = $parameter[1]; $parameterPlacement = $parameter[2]; eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameter, $parameterPlacement, $resourceData, $namespace, $stats); } } else { if (is_integer($hasParameters)) { $parameters = $variableItemData; $count = min(count($parameters) - 1, $hasParameters); for ($i = 0; $i < $count; ++$i) { $parameter =& $parameters[$i + 1]; $parameterData = $parameter[1]; $parameterPlacement = $parameter[2]; eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameter, $parameterPlacement, $resourceData, $namespace, $stats); } } } $hasStats = true; } } if (!$hasStats and method_exists($operator, 'operatorTemplateStatistics')) { $hasStats = $operator->operatorTemplateStatistics($operatorName, $variableItem, $variablePlacement, $tpl, $resourceData, $namespace, $stats); } if (!$hasStats and method_exists($operator, 'namedParameterList')) { $namedParameterList = $operator->namedParameterList(); if (method_exists($operator, 'namedParameterPerOperator') and $operator->namedParameterPerOperator()) { $namedParameterList = $namedParameterList[$operatorName]; } $operatorParameters = array_slice($variableItemData, 1); $count = 0; foreach ($namedParameterList as $parameterName => $parameterDefinition) { $operatorParameter = $operatorParameters[$count]; eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $operatorParameter, $variablePlacement, $resourceData, $namespace, $stats); ++$count; } $hasStats = true; } } else { if ($resourceData['test-compile']) { $tpl->warning('', "Operator '{$operatorName}' is not registered."); } } } else { if ($variableItemType == eZTemplate::TYPE_VOID) { $tpl->warning('TemplateCompiler::calculateOperatorStatistics', "Void datatype should not be used, ignoring it"); } else { $tpl->warning('TemplateCompiler::calculateOperatorStatistics', "Unknown data type {$variableItemType}, ignoring it"); } } } } } } } } } return true; }
function functionTemplateStatistics($functionName, &$node, $tpl, $resourceData, $namespace, &$stats) { if ($functionName != $this->Name) { return false; } $newNamespace = $namespace; $parameters = eZTemplateNodeTool::extractFunctionNodeParameters($node); if (isset($parameters['name'])) { $nameData = $parameters['name']; $nameDataInspection = eZTemplateCompiler::inspectVariableData($tpl, $nameData, false, $resourceData); if ($nameDataInspection['is-constant'] and !$nameDataInspection['has-operators'] and !$nameDataInspection['has-attributes']) { $parameterNamespace = $nameDataInspection['new-data'][0][1]; $newNamespace = $tpl->mergeNamespace($namespace, $parameterNamespace); } } $parameterNames = array('loop', 'show', 'var', 'last-value', 'reverse', 'sequence', 'max', 'offset'); foreach ($parameterNames as $parameterName) { if (isset($parameters[$parameterName])) { eZTemplateCompiler::calculateVariableNodeStatistics($tpl, $parameters[$parameterName], false, $resourceData, $namespace, $stats); } } if (!isset($parameters['var'])) { if (isset($parameters['loop'])) { $newVariables = array('key', 'item', 'index', 'number'); foreach ($newVariables as $newVariableName) { eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $newVariableName, array('is_created' => true, 'is_removed' => true)); } } if (isset($parameters['sequence'])) { $newVariables = array('sequence'); foreach ($newVariables as $newVariableName) { eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $newVariableName, array('is_created' => true, 'is_removed' => true)); } } } else { if (isset($parameters['loop'])) { $varDataInspection = eZTemplateCompiler::inspectVariableData($tpl, $parameters['var'], false, $resourceData); if ($varDataInspection['is-constant'] and !$varDataInspection['has-operators'] and !$varDataInspection['has-attributes']) { $varName = $varDataInspection['new-data'][0][1]; eZTemplateCompiler::setVariableStatistics($stats, $newNamespace, $varName, array('is_created' => true, 'is_removed' => true)); } } } $functionChildren = eZTemplateNodeTool::extractFunctionNodeChildren($node); if (is_array($functionChildren)) { eZTemplateCompiler::calculateVariableStatisticsChildren($tpl, $functionChildren, $resourceData, $newNamespace, $stats); } }