Ejemplo n.º 1
0
 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;
     }
 }
Ejemplo n.º 3
0
    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;
    }
Ejemplo n.º 4
0
 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();
                 }
             }
         }
     }
 }
Ejemplo n.º 5
0
    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;
    }