static function createConstantElement( $constant, $variablePlacement = false ) { if ( is_array( $constant ) ) return eZTemplateNodeTool::createArrayElement( $constant, $variablePlacement ); else if ( is_string( $constant ) ) return eZTemplateNodeTool::createStringElement( $constant, $variablePlacement ); else if ( is_bool( $constant ) ) return eZTemplateNodeTool::createBooleanElement( $constant, $variablePlacement ); else if ( is_numeric( $constant ) ) return eZTemplateNodeTool::createNumericElement( $constant, $variablePlacement ); else return eZTemplateNodeTool::createVoidElement(); }
function compareTrans($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters) { $isArray = false; $isString = false; $inParam = null; $inParamCode = ''; $compareParams = array(); $compareParamsCode = array(); $offset = 0; $values = array(); $tmpCount = 0; if (eZTemplateNodeTool::isStaticElement($parameters[0])) { $inParam = eZTemplateNodeTool::elementStaticValue($parameters[0]); $inParamCode = eZPHPCreator::variableText($inParam, 0, 0, false); $isString = is_string($inParam); $isArray = is_array($inParam); } else { $values[] = $parameters[0]; $inParamCode = '%' . count($values) . '%'; } for ($i = 1; $i < count($parameters); $i++) { if (eZTemplateNodeTool::isStaticElement($parameters[$i])) { $compareParams[] = eZTemplateNodeTool::elementStaticValue($parameters[$i]); $compareParamsCode[] = eZPHPCreator::variableText(eZTemplateNodeTool::elementStaticValue($parameters[$i]), 0, 0, false); } else { $values[] = $parameters[$i]; $compareParamsCode[] = '%' . count($values) . '%'; } } switch ($operatorName) { case $this->EndsWithName: if (count($values) == 0) { if ($isString) { $result = strrpos($inParam, $compareParams[0]) === strlen($inParam) - strlen($compareParams[0]); } else { if ($isArray) { $length = count($inParam); $params = count($compareParams); $start = $length - $params; $result = true; for ($i = 0; $i < $params; ++$i) { if ($inParam[$start + $i] != $compareParams[$i]) { $result = false; break; } } } } return array(eZTemplateNodeTool::createBooleanElement($result)); } if ($isString) { $code = '%output% = ( strrpos( ' . $inParamCode . ', ' . $compareParamsCode[0] . ' ) === ( strlen( ' . $inParamCode . ' ) - strlen( ' . $compareParamsCode[0] . ' ) ) );'; } else { if ($isArray) { $code = '%tmp4% = ' . $inParamCode . ';' . "\n" . '%tmp1% = count( %tmp4% );' . "\n" . '%tmp2% = ' . count($compareParamsCode) . ';' . "\n" . '%tmp3% = %tmp1% - %tmp2%;' . "\n" . '%output% = true;' . "\n"; for ($i = 0; $i < count($compareParamsCode); ++$i) { if ($i != 0) { $code .= 'else '; } $code .= 'if ( %tmp4%[%tmp3% + ' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" . ' %output% = false;' . "\n"; } $tmpCount = 4; } else { $code = '%tmp4% = ' . $inParamCode . ';' . "\n" . 'if ( is_string( %tmp4% ) )' . "\n" . '{' . "\n" . ' %output% = ( strrpos( %tmp4%, ' . $compareParamsCode[0] . ' ) === ( strlen( %tmp4% ) - strlen( ' . $compareParamsCode[0] . ' ) ) );' . "\n" . '}' . "\n" . 'else if( is_array( %tmp4% ) )' . "\n" . '{' . "\n" . ' %tmp1% = count( %tmp4% );' . "\n" . ' %tmp2% = ' . count($compareParamsCode) . ';' . "\n" . ' %tmp3% = %tmp1% - %tmp2%;' . "\n" . ' %output% = true;' . "\n"; for ($i = 0; $i < count($compareParamsCode); ++$i) { if ($i != 0) { $code .= ' else '; } $code .= 'if ( %tmp4%[%tmp3% + ' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" . ' %output% = false;' . "\n"; } $code .= '}'; $tmpCount = 4; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, $tmpCount)); break; case $this->BeginsWithName: if (count($values) == 0) { if ($isString) { $result = strpos($inParam, $compareParams[0]) === 0; } else { if ($isArray) { $result = true; for ($i = 0; $i < count($compareParams); ++$i) { if ($inParam[$i] != $compareParams[$i]) { $result = false; break; } } } } return array(eZTemplateNodeTool::createBooleanElement($result)); } if ($isString) { $code = '%output% = ( ' . $compareParamsCode[0] . ' && strpos( ' . $inParamCode . ', ' . $compareParamsCode[0] . ' ) === 0 );'; } else { if ($isArray) { $code = '%tmp1% = ' . $inParamCode . ';' . "\n" . '%output% = true;' . "\n"; for ($i = 0; $i < count($compareParamsCode); ++$i) { if ($i != 0) { $code .= 'else '; } $code .= 'if ( %tmp1%[' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" . ' %output% = false;' . "\n"; } $tmpCount = 1; } else { $code = '%tmp1% = ' . $inParamCode . ';' . "\n" . 'if ( is_string( %tmp1% ) )' . "\n" . '{' . "\n" . " if ( {$compareParamsCode[0]} == '' )\n" . " %output% = false;\n" . " else\n" . ' %output% = ( strpos( %tmp1%, ' . $compareParamsCode[0] . ' ) === 0 );' . "\n" . '}' . "\n" . 'else if( is_array( %tmp1% ) )' . "\n" . '{' . "\n" . ' %output% = true;' . "\n"; for ($i = 0; $i < count($compareParamsCode); ++$i) { if ($i != 0) { $code .= ' else '; } $code .= 'if ( %tmp1%[' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" . ' %output% = false;' . "\n"; } $code .= '}'; $tmpCount = 1; } } return array(eZTemplateNodeTool::createCodePieceElement($code, $values, false, $tmpCount)); break; } }
function urlTransformation($operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters) { $ini = eZINI::instance(); $shareTemplates = $ini->hasVariable('TemplateSettings', 'ShareCompiledTemplates') ? $ini->variable('TemplateSettings', 'ShareCompiledTemplates') == 'enabled' : false; $useTmp = false; $newElements = array(); $values = array(); $paramCount = 0; $tmpCount = 0; switch ($operatorName) { case $this->URLName: if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $url = eZTemplateNodeTool::elementStaticValue($parameters[0]); $serverURL = isset($parameters[2]) ? eZTemplateNodeTool::elementStaticValue($parameters[2]) : 'relative'; eZURI::transformURI($url, false, $serverURL); $url = $this->applyQuotes($url, $parameters[1]); return array(eZTemplateNodeTool::createStringElement($url)); } else { if ($shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $url = eZTemplateNodeTool::elementStaticValue($parameters[0]); $values[] = array(eZTemplateNodeTool::createStringElement($url)); $values[] = isset($parameters[2]) ? $parameters[2] : array(eZTemplateNodeTool::createStringElement('relative')); $code = <<<CODEPIECE %tmp1% = %1%; eZURI::transformURI( %tmp1%, false, %2% ); CODEPIECE; $useTmp = true; ++$tmpCount; } else { $values[] = $parameters[0]; $values[] = isset($parameters[2]) ? $parameters[2] : array(eZTemplateNodeTool::createStringElement('relative')); $code = <<<CODEPIECE //include_once( 'lib/ezutils/classes/ezuri.php' ); eZURI::transformURI( %1%, false, %2% ); CODEPIECE; } } ++$paramCount; break; case $this->URLRootName: if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $url = eZTemplateNodeTool::elementStaticValue($parameters[0]); if (preg_match("#^[a-zA-Z0-9]+:#", $url) or substr($url, 0, 2) == '//') { $url = '/'; } else { if (strlen($url) > 0 and $url[0] != '/') { $url = '/' . $url; } } $serverURL = isset($parameters[2]) ? eZTemplateNodeTool::elementStaticValue($parameters[2]) : 'relative'; // Same as "ezurl" without "index.php" and the siteaccess name in the returned address. eZURI::transformURI($url, true, $serverURL); $url = $this->applyQuotes($url, $parameters[1]); return array(eZTemplateNodeTool::createStringElement($url)); } else { if ($shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $url = eZTemplateNodeTool::elementStaticValue($parameters[0]); $values[] = array(eZTemplateNodeTool::createStringElement($url)); $values[] = isset($parameters[2]) ? $parameters[2] : array(eZTemplateNodeTool::createStringElement('relative')); $code = '%tmp1% = %1%;'; $code .= 'if ( preg_match( "#^[a-zA-Z0-9]+:#", %tmp1% ) or' . "\n" . 'substr( %tmp1%, 0, 2 ) == \'//\' )' . "\n" . ' %tmp1% = \'/\';' . "\n" . 'else if ( strlen( %tmp1% ) > 0 and' . "\n" . ' %tmp1%[0] != \'/\' )' . "\n" . '%tmp1% = \'/\' . %tmp1%;' . "\n"; $code .= '//include_once( \'lib/ezutils/classes/ezuri.php\' );' . "\n" . 'eZURI::transformURI( %tmp1%, true, %2% );' . "\n"; $useTmp = true; ++$tmpCount; } else { $values[] = $parameters[0]; $values[] = isset($parameters[2]) ? $parameters[2] : array(eZTemplateNodeTool::createStringElement('relative')); $code = 'if ( preg_match( "#^[a-zA-Z0-9]+:#", %1% ) or' . "\n" . 'substr( %1%, 0, 2 ) == \'//\' )' . "\n" . ' %1% = \'/\';' . "\n" . 'else if ( strlen( %1% ) > 0 and' . "\n" . ' %1%[0] != \'/\' )' . "\n" . '%1% = \'/\' . %1%;' . "\n"; $code .= '//include_once( \'lib/ezutils/classes/ezuri.php\' );' . "\n" . 'eZURI::transformURI( %1%, true, %2% );' . "\n"; } } ++$paramCount; break; case $this->SysName: if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[1])) { $sysAttribute = eZTemplateNodeTool::elementStaticValue($parameters[1]); return array(eZTemplateNodeTool::createStringElement($this->Sys->attribute($sysAttribute))); } return false; break; case $this->DesignName: if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $path = eZTemplateNodeTool::elementStaticValue($parameters[0]); $path = $this->eZDesign($tpl, $path, $operatorName); $path = $this->applyQuotes($path, $parameters[1]); return array(eZTemplateNodeTool::createStringElement($path)); } else { if ($shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $path = eZTemplateNodeTool::elementStaticValue($parameters[0]); $values[] = array(eZTemplateNodeTool::createStringElement($path)); $code = '%tmp1% = %1%;' . "\n" . '%tmp1% = eZURLOperator::eZDesign( $tpl, %tmp1%, "' . $operatorName . '" );' . "\n"; $useTmp = true; ++$tmpCount; } else { $values[] = $parameters[0]; $code = '%1% = eZURLOperator::eZDesign( $tpl, %1%, "' . $operatorName . '" );' . "\n"; } } ++$paramCount; break; case $this->ImageName: $skipSlash = count($parameters) > 2 ? eZTemplateNodeTool::elementStaticValue($parameters[2]) == true : false; if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $path = eZTemplateNodeTool::elementStaticValue($parameters[0]); $path = eZURLOperator::eZImage($tpl, $path, $operatorName, $skipSlash); $path = $this->applyQuotes($path, $parameters[1]); return array(eZTemplateNodeTool::createStringElement($path)); } else { if ($shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $path = eZTemplateNodeTool::elementStaticValue($parameters[0]); $values[] = array(eZTemplateNodeTool::createStringElement($path)); $values[] = array(eZTemplateNodeTool::createBooleanElement($skipSlash)); $code = '%tmp1% = %1%;' . "\n" . '%tmp1% = eZURLOperator::eZImage( $tpl, %tmp1%, "' . $operatorName . '", %2% );' . "\n"; $useTmp = true; ++$tmpCount; } else { $values[] = $parameters[0]; $values[] = array(eZTemplateNodeTool::createBooleanElement($skipSlash)); $code = '%1% = eZURLOperator::eZImage( $tpl, %1%, "' . $operatorName . '", %2% );' . "\n"; } } ++$paramCount; break; case $this->ExtName: if (!$shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $origUrl = eZTemplateNodeTool::elementStaticValue($parameters[0]); $url = eZURL::urlByMD5(md5($origUrl)); if ($url == false) { eZURL::registerURL($origUrl); } else { $origUrl = $url; } $origUrl = $this->applyQuotes($origUrl, $parameters[1]); return array(eZTemplateNodeTool::createStringElement($origUrl)); } else { if ($shareTemplates && eZTemplateNodeTool::isStaticElement($parameters[0])) { $origUrl = eZTemplateNodeTool::elementStaticValue($parameters[0]); $values[] = array(eZTemplateNodeTool::createStringElement($origUrl)); $code .= '//include_once( \'kernel/classes/datatypes/ezurl/ezurl.php\' );' . "\n" . '%tmp1% = %1%; ' . "\n" . '%tmp2% = eZURL::urlByMD5( md5( %tmp1% ) );' . "\n" . 'if ( %tmp2% == false )' . "\n" . ' eZURL::registerURL( %tmp1% );' . "\n" . 'else' . "\n" . ' %tmp1% = %tmp2%;' . "\n"; ++$tmpCount; $useTmp = true; } else { $values[] = $parameters[0]; $code .= '//include_once( \'kernel/classes/datatypes/ezurl/ezurl.php\' );' . "\n" . '%tmp1% = eZURL::urlByMD5( md5( %1% ) );' . "\n" . 'if ( %tmp1% == false )' . "\n" . ' eZURL::registerURL( %1% );' . "\n" . 'else' . "\n" . ' %1% = %tmp1%;' . "\n"; } } ++$tmpCount; ++$paramCount; break; } $http = eZHTTPTool::instance(); if (isset($http->UseFullUrl) and $http->UseFullUrl) { ++$tmpCount; $code .= '//include_once( \'lib/ezutils/classes/ezhttptool.php\' );' . "\n" . '%tmp' . $tmpCount . '% = eZHTTPTool::instance();' . "\n" . 'if ( isset( %tmp' . $tmpCount . '%->UseFullUrl ) and %tmp' . $tmpCount . '%->UseFullUrl ' . "\n" . ' and strncasecmp( %1%, \'/\' , 1 ) === 0 ) // do not prepend the site path if it\'s not a http url%' . "\n" . '{' . "\n" . ' %1% = %tmp' . $tmpCount . '%->createRedirectUrl( %1%, array( \'pre_url\' => false ) );' . "\n" . '}' . "\n"; } if (count($parameters) > $paramCount) { if (eZTemplateNodeTool::isStaticElement($parameters[$paramCount])) { $quote = '"'; $val = eZTemplateNodeTool::elementStaticValue($parameters[$paramCount]); ++$paramCount; if ($val == 'single') { $quote = "'"; } else { if ($val == 'no') { $quote = false; } } if ($quote !== false) { $values[] = array(eZTemplateNodeTool::createStringElement($quote)); if ($useTmp) { $code .= '%tmp1% = %' . count($values) . '% . %tmp1% . %' . count($values) . '%;' . "\n"; } else { $code .= '%1% = %' . count($values) . '% . %1% . %' . count($values) . '%;' . "\n"; } } } else { $values[] = $parameters[$paramCount]; if ($useTmp) { $code .= 'switch (%' . count($values) . '%)' . "\n" . '{' . "\n" . ' case \'single\':' . "\n" . ' %tmp1% = \'\\\'\' . %tmp1% . \'\\\'\' ;' . "\n" . ' break;' . "\n" . ' case \'no\':' . "\n" . ' break;' . "\n" . ' default:' . "\n" . ' %tmp1 = \'"\' . %tmp1% . \'"\' ;' . "\n" . '}' . "\n"; } else { $code .= 'switch (%' . count($values) . '%)' . "\n" . '{' . "\n" . ' case \'single\':' . "\n" . ' %1% = \'\\\'\' . %1% . \'\\\'\' ;' . "\n" . ' break;' . "\n" . ' case \'no\':' . "\n" . ' break;' . "\n" . ' default:' . "\n" . ' %1% = \'"\' . %1% . \'"\' ;' . "\n" . '}' . "\n"; } } } else { $quote = '"'; $values[] = array(eZTemplateNodeTool::createStringElement($quote)); if ($useTmp) { $code .= '%tmp1% = %' . count($values) . '% . %tmp1% . %' . count($values) . '%;' . "\n"; } else { $code .= '%1% = %' . count($values) . '% . %1% . %' . count($values) . '%;' . "\n"; } } if ($useTmp) { $code .= '%output% = %tmp1%;' . "\n"; } else { $code .= '%output% = %1%;' . "\n"; } $newElements[] = eZTemplateNodeTool::createCodePieceElement($code, $values, false, $tmpCount); return $newElements; }
static function createStaticElement($static, $variablePlacement = false) { if (is_array($static)) { return eZTemplateNodeTool::createArrayElement($static, $variablePlacement); } else { if (is_string($static)) { return eZTemplateNodeTool::createStringElement($static, $variablePlacement); } else { if (is_bool($static)) { return eZTemplateNodeTool::createBooleanElement($static, $variablePlacement); } else { if (is_numeric($static)) { return eZTemplateNodeTool::createNumericElement($static, $variablePlacement); } else { return eZTemplateNodeTool::createVoidElement(); } } } } }
function trueFalseTransformation( $operatorName, &$node, $tpl, &$resourceData, $element, $lastElement, $elementList, $elementTree, &$parameters ) { $values = array(); if ( ( count( $parameters ) != 0 ) ) { return false; } $newElements = array(); $value = false; if ( $operatorName == $this->TrueName ) $value = true; $newElements[] = eZTemplateNodeTool::createBooleanElement( $value ); return $newElements; }