function arrayTrans($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters) { switch ($operatorName) { case $this->ArrayName: $code = ''; $paramCount = 0; $values = array(); $staticArray = array(); for ($i = 0; $i < count($parameters); ++$i) { if ($i != 0) { $code .= ', '; } else { $code .= '%output% = array( '; } if (!eZTemplateNodeTool::isStaticElement($parameters[$i])) { $values[] = $parameters[$i]; ++$paramCount; $code .= '%' . $paramCount . '%'; } else { if ($paramCount == 0) { $staticArray[] = eZTemplateNodeTool::elementStaticValue($parameters[$i]); } $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i]), 0, 0, false); } } if ($paramCount == 0) { return array(eZTemplateNodeTool::createArrayElement($staticArray)); } $code .= ' );'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->HashName: $code = ''; $paramCount = 0; $values = array(); $staticArray = array(); $staticKeys = true; $keys = array(); $vals = array(); $hashCount = (int) (count($parameters) / 2); for ($i = 0; $i < $hashCount; ++$i) { if ($i != 0) { $code .= ', '; } else { $code .= '%output% = array( '; } if (!eZTemplateNodeTool::isStaticElement($parameters[$i * 2])) { $staticKeys = false; $values[] = $parameters[$i * 2]; ++$paramCount; $code .= '%' . $paramCount . '%'; } else { $keys[] = eZTemplateNodeTool::elementStaticValue($parameters[$i * 2]); $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i * 2]), 0, 0, false); } $code .= ' => '; if (!eZTemplateNodeTool::isStaticElement($parameters[$i * 2 + 1])) { $values[] = $parameters[$i * 2 + 1]; ++$paramCount; $code .= '%' . $paramCount . '%'; } else { if ($paramCount == 0) { $staticArray[eZTemplateNodeTool::elementStaticValue($parameters[$i * 2])] = eZTemplateNodeTool::elementStaticValue($parameters[$i * 2 + 1]); } $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i * 2 + 1]), 0, 0, false); } if ($staticKeys) { $vals[$keys[count($keys) - 1]] = $parameters[$i * 2 + 1]; } } if ($paramCount == 0) { return array(eZTemplateNodeTool::createArrayElement($staticArray)); } if ($staticKeys) { return array(eZTemplateNodeTool::createDynamicArrayElement($keys, $vals)); } $code .= ' );'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->ContainsName: $values = array(); $inParam = null; $isString = false; $isArray = false; if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]); if (is_string($inParam)) { $isString = true; } else { if (is_array($inParam)) { $isArray = true; } } $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false); } else { $values[] = $parameters[0]; $inParamCode = '%' . count($values) . '%'; } if (eZTemplateNodeTool::isStaticElement($parameters[1])) { $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]); if (count($values) == 0) { if ($isString) { $result = strpos($inParam, $matchParam) !== false; } else { if ($isArray) { $result = in_array($matchParam, $inParam); } } return array(eZTemplateNodeTool::createBooleanElement($result)); } $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false); } else { $values[] = $parameters[1]; $matchParamCode = '%' . count($values) . '%'; } if ($isString) { $code = '%output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );'; } else { if ($isArray) { $code = '%output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );'; } else { $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . ' %output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );' . "\n" . '}' . "\n" . 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . ' %output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . '%output% = false;' . "\n" . '}'; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->CompareName: $inParam = null; $isString = false; $isArray = false; $values = array(); if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]); if (is_string($inParam)) { $isString = true; } else { if (is_array($inParam)) { $isArray = true; } } $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false); } else { $values[] = $parameters[0]; $inParamCode = '%' . count($values) . '%'; } if (eZTemplateNodeTool::isStaticElement($parameters[1])) { $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]); if (count($values) == 0) { if ($isString) { $result = strcmp($inParam, $matchParam) === 0; } else { if ($isArray) { $result = (count(array_diff($matchParam, $inParam)) == 0 and count(array_diff($inParam, $matchParam)) == 0); } } return array(eZTemplateNodeTool::createBooleanElement($result)); } $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false); } else { $values[] = $parameters[1]; $matchParamCode = '%' . count($values) . '%'; } if ($isString) { $code = '%output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ' ) === 0;'; } else { if ($isArray) { $code = '%output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" . ' ( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );'; } else { $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . ' %output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ') === 0;' . "\n" . '}' . "\n" . 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" . '{' . "\n" . ' %output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" . '( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );' . "\n" . '}'; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->ImplodeName: $values = array(); if (!eZTemplateNodeTool::isStaticElement($parameters[1])) { $values[] = $parameters[1]; $code = '%1%, '; } else { $code = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[1]), 0, 0, false) . ', '; } if (eZTemplateNodeTool::isStaticElement($parameters[0])) { if (count($values) == 0) { return array(eZTemplateNodeTool::createStringElement(implode(eZTemplateNodeTool::elementStaticValue($parameters[1]), eZTemplateNodeTool::elementStaticValue($parameters[0])))); } else { $code .= eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[0]), 0, 0, false); } } else { $values[] = $parameters[0]; $code .= '%' . count($values) . '%'; } $code = '%output% = implode( ' . $code . ' );'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->UniqueName: if (eZTemplateNodeTool::isStaticElement($parameters[0])) { return array(eZTemplateNodeTool::createArrayElement(array_unique(eZTemplateNodeTool::elementStaticValue($parameters[0])))); } $values = array($parameters[0]); $code = '%output% = array_unique( %1% );'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->ExplodeName: $values = array(); $inParam = null; $isString = false; $isArray = false; if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]); if (is_string($inParam)) { $isString = true; } else { if (is_array($inParam)) { $isArray = true; } } $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false); } else { $values[] = $parameters[0]; $inParamCode = '%' . count($values) . '%'; } if (eZTemplateNodeTool::isStaticElement($parameters[1])) { $matchParam = eZTemplateNodeTool::elementStaticValue($parameters[1]); if (count($values) == 0) { if ($isString) { $result = explode($matchParam, $inParam); } else { if ($isArray) { $result = array(array_slice($inParam, 0, $matchParam), array_slice($inParam, $matchParam)); } } return array(eZTemplateNodeTool::createArrayElement($result)); } $matchParamCode = eZPHPCreator::variableText($matchParam, 0, 0, false); } else { $values[] = $parameters[1]; $matchParamCode = '%' . count($values) . '%'; } if ($isString) { $code = '%output% = explode( ' . $matchParamCode . ', ' . $inParamCode . ' );'; } else { if ($isArray) { $code = '%output% = array( array_slice( ' . $inParamCode . ', 0,' . $matchParamCode . ' ), array_slice( ' . $inParamCode . ', ' . $matchParamCode . ' ) );'; } else { $code = "if ( is_string( {$inParamCode} ) )\n" . "{\n" . "\t%output% = explode( {$matchParamCode}, {$inParamCode} );\n" . "}\n" . "else if ( is_array( {$inParamCode} ) )\n" . "{\n" . "\t%output% = array( array_slice( {$inParamCode}, 0, {$matchParamCode} ), array_slice( {$inParamCode}, {$matchParamCode} ) );\n" . "}\n" . "else\n" . "{\n" . "\t%output% = null;\n" . "}\n"; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->RemoveName: $values = array(); $isArray = false; $isString = false; if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inputArray = eZTemplateNodeTool::elementStaticValue($parameters[0]); $inputArrayCode = eZPHPCreator::variableText($inputArray, 0, 0, false); $isString = is_string($inputArray); $isArray = is_array($inputArray); } else { $values[] = $parameters[0]; $inputArrayCode = '%' . count($values) . '%'; } if (eZTemplateNodeTool::isStaticElement($parameters[1])) { $offset = eZTemplateNodeTool::elementStaticValue($parameters[1]); $offsetCode = eZPHPCreator::variableText($offset, 0, 0, false); } else { $values[] = $parameters[1]; $offsetCode = '%' . count($values) . '%'; } $length = false; $lengthCode = ''; if (count($parameters) > 2) { if (eZTemplateNodeTool::isStaticElement($parameters[2])) { $length = eZTemplateNodeTool::elementStaticValue($parameters[2]); $lengthCode = eZPHPCreator::variableText($length, 0, 0, false); } else { $values[] = $parameters[2]; $lengthCode = '%' . count($values) . '%'; } } if (count($values) == 0) { if ($isString) { return array(eZTemplateNodeTool::createStringElement(substr($inputArray, $offset, $length))); } else { if ($isArray) { if ($length === false) { $length = 1; } $array_one = array_slice($inputArray, 0, $offset); $array_two = array_slice($inputArray, $offset + $length); return array(eZTemplateNodeTool::createArrayElement(array_merge($array_one, $array_two))); } } } if ($isString) { $code = '%output% = substr( ' . $inputArrayCode . ', ' . $offsetCode; if ($lengthCode) { $code .= ', ' . $lengthCode; } $code .= ' );'; } else { if ($isArray) { $code = '%output% = array_merge( array_slice( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ), array_slice( ' . $inputArrayCode . ', ' . $offsetCode; if ($lengthCode) { $code .= ' + ' . $lengthCode; } $code .= ' ) );'; } else { $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . 'if ( is_string( %tmp1% ) )' . "\n" . '{' . "\n" . ' %output% = ( substr( %tmp1%, 0, ' . $offsetCode . ' )'; $lengthCode = !$lengthCode ? 1 : $lengthCode; if ($lengthCode) { $code .= ' . substr( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )'; } $code .= ' );' . "\n" . '}' . "\n" . 'else if ( is_array( %tmp1% ) )' . "\n" . '{' . "\n" . ' %output% = array_merge( array_slice( %tmp1%, 0, ' . $offsetCode . ' )'; if ($lengthCode) { $code .= ', array_slice( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )'; } $code .= ' );' . "\n" . '}'; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 1)); break; case $this->InsertName: $values = array(); $isArray = false; $isString = false; if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inputArray = eZTemplateNodeTool::elementStaticValue($parameters[0]); $inputArrayCode = eZPHPCreator::variableText($inputArray, 0, 0, false); $isString = is_string($inputArray); $isArray = is_array($inputArray); } else { $values[] = $parameters[0]; $inputArrayCode = '%' . count($values) . '%'; } if (eZTemplateNodeTool::isStaticElement($parameters[1])) { $offset = eZTemplateNodeTool::elementStaticValue($parameters[1]); $offsetCode = eZPHPCreator::variableText($offset, 0, 0, false); } else { $values[] = $parameters[1]; $offsetCode = '%' . count($values) . '%'; } if (count($parameters) > 2) { if (eZTemplateNodeTool::isStaticElement($parameters[2])) { $insertText = eZTemplateNodeTool::elementStaticValue($parameters[2]); } } $insertElemCode = array(); for ($i = 2; $i < count($parameters); ++$i) { if (eZTemplateNodeTool::isStaticElement($parameters[$i])) { $insertElemCode[] = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i]), 0, 0, false); } else { $values[] = $parameters[$i]; $insertElemCode[] = '%' . count($values) . '%'; } } if (count($values) == 0) { if ($isString) { return array(eZTemplateNodeTool::createStringElement(substr($inputArray, 0, $offset) . $insertText . substr($inputArray, $offset))); } else { if ($isArray) { $array_one = array_slice($inputArray, 0, $offset); $array_two = array_slice($inputArray, $offset); $array_to_insert = array(); for ($i = 2; $i < count($parameters); ++$i) { $array_to_insert[] = eZTemplateNodeTool::elementStaticValue($parameters[$i]); } return array(eZTemplateNodeTool::createArrayElement(array_merge($array_one, $array_to_insert, $array_two))); } } } $tmpCount = 0; if ($isString) { $code = '%output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );'; } else { if ($isArray) { $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . '%tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" . '%tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" . '%tmp4% = array( '; for ($i = 0; $i < count($insertElemCode); ++$i) { if ($i != 0) { $code .= ", "; } $code .= $insertElemCode[$i]; } $code .= ' );' . "\n" . '%output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n"; $tmpCount = 4; } else { $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" . 'if ( is_string( %tmp1% ) )' . "\n" . '{' . "\n" . ' %output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );' . "\n" . '}' . "\n" . 'else if ( is_array( %tmp1% ) )' . "\n" . '{' . "\n" . ' %tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" . ' %tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" . ' %tmp4% = array( '; for ($i = 0; $i < count($insertElemCode); ++$i) { if ($i != 0) { $code .= ", "; } $code .= $insertElemCode[$i]; } $code .= ' );' . "\n" . ' %output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n" . '}' . "\n"; $tmpCount = 4; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, $tmpCount)); break; case $this->ReverseName: if (eZTemplateNodeTool::isStaticElement($parameters[0])) { if (is_string(eZTemplateNodeTool::elementStaticValue($parameters[0]))) { return array(eZTemplateNodeTool::createStringElement(strrev(eZTemplateNodeTool::elementStaticValue($parameters[0])))); } else { if (is_array(eZTemplateNodeTool::elementStaticValue($parameters[0]))) { return array(eZTemplateNodeTool::createArrayElement(array_reverse(eZTemplateNodeTool::elementStaticValue($parameters[0])))); } } } $values = array($parameters[0]); $code = 'if ( is_string( %1% ) )' . "\n" . '{' . "\n" . ' %output% = strrev( %1% );' . "\n" . '}' . "\n" . 'else if( is_array( %1% ) )' . "\n" . '{' . "\n" . ' %output% = array_reverse( %1% );' . "\n" . '}' . "\n"; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->ArraySumName: if (eZTemplateNodeTool::isStaticElement($parameters[0])) { return array(eZTemplateNodeTool::createNumericElement(array_sum(eZTemplateNodeTool::elementStaticValue($parameters[0])))); } $values = array($parameters[0]); $code = '%output% = array_sum( %1% );'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); break; case $this->RepeatName: $values = array(); $isString = false; $isArray = false; if (!eZTemplateNodeTool::isStaticElement($parameters[0])) { $values[] = $parameters[0]; $arrayCode = '%' . count($values) . '%'; } else { $arrayCode = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[0]), 0, 0, false); $isString = is_string(eZTemplateNodeTool::elementStaticValue($parameters[0])); $isArray = is_array(eZTemplateNodeTool::elementStaticValue($parameters[0])); } if (!eZTemplateNodeTool::isStaticElement($parameters[1])) { $values[] = $parameters[1]; $countCode = '%' . count($values) . '%'; } else { $count = (int) eZTemplateNodeTool::elementStaticValue($parameters[1]); if (count($values) == 0) { if ($isString) { $retText = ''; $origText = eZTemplateNodeTool::elementStaticValue($parameters[0]); for ($i = 0; $i < $count; $i++) { $retText .= $origText; } return array(eZTemplateNodeTool::createStringElement($retText)); } else { if ($isArray) { $retArray = array(); $origArray = eZTemplateNodeTool::elementStaticValue($parameters[0]); for ($i = 0; $i < $count; $i++) { $retArray = array_merge($retArray, $origArray); } return array(eZTemplateNodeTool::createArrayElement($retArray)); } } } $countCode = (string) $count; } $code = '%tmp2% = ' . $arrayCode . ';' . "\n" . 'if ( is_string( %tmp2% ) )' . "\n" . ' %output% = \'\';' . "\n" . 'else if ( is_array( %tmp2% ) )' . "\n" . ' %output% = array();' . "\n" . 'for( %tmp1% = 0; %tmp1% < ' . $countCode . '; ++%tmp1% )' . "\n" . '{' . "\n" . ' if ( is_string( %tmp2% ) )' . "\n" . ' %output% .= %tmp2%;' . "\n" . ' else if ( is_array( %tmp2% ) )' . "\n" . ' %output% = array_merge( %output%, %tmp2% );' . "\n" . '}' . "\n"; return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 2)); break; } }
static function createNamespaceChangeNode($variableData, $parameters = array()) { if (is_string($variableData)) { $variableData = array(eZTemplateNodeTool::createStringElement($variableData)); } else { if (is_numeric($variableData)) { $variableData = array(eZTemplateNodeTool::createNumericElement($variableData)); } } $node = array(eZTemplate::NODE_INTERNAL_NAMESPACE_CHANGE, $variableData, $parameters); return $node; }
function operatorTransform($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters) { if (!eZTemplateNodeTool::isConstantElement($parameters[1]) || count($parameters) > 2 && !eZTemplateNodeTool::isConstantElement($parameters[2])) { return false; } // We do not support non-static values for decimal_count, decimal_symbol and thousands_separator if (count($parameters) > 3 and !eZTemplateNodeTool::isConstantElement($parameters[3])) { return false; } if (count($parameters) > 4 and !eZTemplateNodeTool::isConstantElement($parameters[4])) { return false; } if (count($parameters) > 5 and !eZTemplateNodeTool::isConstantElement($parameters[5])) { return false; } $locale = eZLocale::instance(); $decimalCount = $locale->decimalCount(); $decimalSymbol = $locale->decimalSymbol(); $decimalThousandsSeparator = $locale->thousandsSeparator(); if (count($parameters) > 2) { $prefix = eZTemplateNodeTool::elementConstantValue($parameters[2]); } else { $prefix = 'auto'; } if (count($parameters) > 3) { $decimalCount = eZTemplateNodeTool::elementConstantValue($parameters[3]); } elseif ($prefix == 'none') { $decimalCount = 0; } if (count($parameters) > 4) { $decimalSymbol = eZTemplateNodeTool::elementConstantValue($parameters[4]); } if (count($parameters) > 5) { $decimalThousandsSeparator = eZTemplateNodeTool::elementConstantValue($parameters[5]); } $decimalSymbolText = eZPHPCreator::variableText($decimalSymbol, 0, 0, false); $decimalThousandsSeparatorText = eZPHPCreator::variableText($decimalThousandsSeparator, 0, 0, false); $unit = eZTemplateNodeTool::elementConstantValue($parameters[1]); $ini = eZINI::instance(); if ($prefix == "auto") { $prefixes = $ini->variableArray("UnitSettings", "BinaryUnits"); if (in_array($unit, $prefixes)) { $prefix = "binary"; } else { $prefix = "decimal"; } } $unit_ini = eZINI::instance("units.ini"); $use_si = $ini->variable("UnitSettings", "UseSIUnits") == "true"; $fake = $use_si ? "" : "Fake"; if ($unit_ini->hasVariable("Base", $unit)) { $base = $unit_ini->variable("Base", $unit); } $hasInput = false; $output = false; if (eZTemplateNodeTool::isConstantElement($parameters[0])) { $output = eZTemplateNodeTool::elementConstantValue($parameters[0]); $hasInput = true; } $prefix_var = ""; if ($prefix == "decimal") { $prefixes = $unit_ini->group("DecimalPrefixes"); $prefix_group = $unit_ini->group("DecimalPrefixes"); $prefixes = array(); foreach ($prefix_group as $prefix_item) { $prefixes[] = explode(";", $prefix_item); } usort($prefixes, "eZTemplateUnitCompareFactor"); $prefix_var = ""; if ($hasInput) { if ($output >= 0 and $output < 10) { $prefix_var = ''; } else { foreach ($prefixes as $prefix) { $val = pow(10, (int) $prefix[0]); if ($val <= $output) { $prefix_var = $prefix[1]; $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator); break; } } } } else { $values = array(); $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createArrayElement($prefixes)); $values[] = array(eZTemplateNodeTool::createStringElement($base)); $code = 'if ( %1% >= 0 and %1% < 10 )' . "\n" . '{' . "\n" . ' %tmp3% = \'\';' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . ' %tmp3% = "";' . "\n" . ' foreach ( %2% as %tmp1% )' . "\n" . ' {' . "\n" . ' %tmp2% = pow( 10, (int)%tmp1%[0] );' . "\n" . ' if ( %tmp2% <= %1% )' . "\n" . ' {' . "\n" . ' %tmp3% = %tmp1%[1];' . "\n" . ' %1% = number_format( %1% / %tmp2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' );' . "\n" . ' break;' . "\n" . ' }' . "\n" . ' }' . "\n" . '}' . "\n" . '%output% = %1% . \' \' . %tmp3% . %3%;'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 3)); } } else { if ($prefix == "binary") { $prefix_group = $unit_ini->group($fake . "BinaryPrefixes"); $prefixes = array(); foreach ($prefix_group as $prefix_item) { $prefixes[] = explode(";", $prefix_item); } usort($prefixes, "eZTemplateUnitCompareFactor"); $prefix_var = ""; if ($hasInput) { if ($output >= 0 and $output < 10) { $prefix_var = ''; } foreach ($prefixes as $prefix) { $val = pow(2, (int) $prefix[0]); if ($val <= $output) { $prefix_var = $prefix[1]; $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator); break; } } } else { $values = array(); $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createArrayElement($prefixes)); $values[] = array(eZTemplateNodeTool::createStringElement($base)); $code = 'if ( %1% >= 0 and %1% < 10 )' . "\n" . '{' . "\n" . ' %tmp3% = \'\';' . "\n" . '}' . "\n" . 'else' . "\n" . '{' . "\n" . ' %tmp3% = "";' . "\n" . ' foreach ( %2% as %tmp1% )' . "\n" . ' {' . "\n" . ' %tmp2% = pow( 2, (int)%tmp1%[0] );' . "\n" . ' if ( %tmp2% <= %1% )' . "\n" . ' {' . "\n" . ' %tmp3% = %tmp1%[1];' . "\n" . ' %1% = number_format( %1% / %tmp2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' );' . "\n" . ' break;' . "\n" . ' }' . "\n" . ' }' . "\n" . '}' . "\n" . '%output% = %1% . \' \' . %tmp3% . %3%;'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, 3)); } } else { if ($unit_ini->hasVariable("BinaryPrefixes", $prefix)) { $prefix_base = 2; $prefix_var = $unit_ini->variableArray("BinaryPrefixes", $prefix); } else { if ($unit_ini->hasVariable("DecimalPrefixes", $prefix)) { $prefix_base = 10; $prefix_var = $unit_ini->variableArray("DecimalPrefixes", $prefix); } else { if ($prefix == "none") { $prefix_var = ''; if ($hasInput) { $output = number_format($output, $decimalCount, $decimalSymbol, $decimalThousandsSeparator); } else { $values = array(); $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createStringElement('')); $values[] = array(eZTemplateNodeTool::createStringElement($base)); $code = '%output% = number_format( %1%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' ) . \' \' . %2% . %3%;'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); } } } } if (is_array($prefix_var)) { if ($hasInput) { $val = pow($prefix_base, (int) $prefix_var[0]); $output = number_format($output / $val, $decimalCount, $decimalSymbol, $decimalThousandsSeparator); $prefix_var = $prefix_var[1]; } else { $values = array(); $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createNumericElement(pow($prefix_base, (int) $prefix_var[0]))); $values[] = array(eZTemplateNodeTool::createStringElement($prefix_var[1])); $values[] = array(eZTemplateNodeTool::createStringElement($base)); $code = '%output% = number_format( %1% / %2%, ' . $decimalCount . ', ' . $decimalSymbolText . ', ' . $decimalThousandsSeparatorText . ' ) . \' \' . %3% . %4%;'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); } } } } if ($hasInput) { return array(eZTemplateNodeTool::createStringElement($output . ' ' . $prefix_var . $base)); } $values = array(); $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createStringElement($prefix_var)); $values[] = array(eZTemplateNodeTool::createStringElement($base)); $code = '%output% = %1% . \' \' . %2% . %3%;'; return array(eZTemplateNodeTool::createCodePieceElement($code, $values)); }
function romanTransformation( $operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters ) { $values = array(); if ( count( $parameters ) != 1 ) return false; $newElements = array(); if ( eZTemplateNodeTool::isConstantElement( $parameters[0] ) ) { $staticResult = $this->buildRoman( eZTemplateNodeTool::elementConstantValue( $parameters[0] ) ); return array( eZTemplateNodeTool::createNumericElement( $staticResult ) ); } else { return false; } }