00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 include_once( "lib/eztemplate/classes/eztemplate.php" );
00048
00049 class eZTemplateArrayOperator
00050 {
00051
00052
00053
00054 function eZTemplateArrayOperator( $arrayName = 'array',
00055 $hashName = 'hash',
00056 $arrayPrependName = 'array_prepend',
00057 $prependName = 'prepend',
00058 $arrayAppendName = 'array_append',
00059 $appendName = 'append',
00060 $arrayMergeName = 'array_merge',
00061 $mergeName = 'merge',
00062 $containsName = 'contains',
00063 $compareName = 'compare',
00064 $extractName = 'extract',
00065 $extractLeftName = 'extract_left',
00066 $extractRightName = 'extract_right',
00067 $beginsWithName = 'begins_with',
00068 $endsWithName = 'ends_with',
00069 $implodeName = 'implode',
00070 $explodeName = 'explode',
00071 $repeatName = 'repeat',
00072 $reverseName = 'reverse',
00073 $insertName = 'insert',
00074 $removeName = 'remove',
00075 $replaceName = 'replace',
00076 $uniqueName = 'unique',
00077 $arraySumName = 'array_sum' )
00078 {
00079 $this->ArrayName = $arrayName;
00080 $this->HashName = $hashName;
00081 $this->ArrayPrependName = $arrayPrependName;
00082 $this->PrependName = $prependName;
00083 $this->ArrayAppendName = $arrayAppendName;
00084 $this->AppendName = $appendName;
00085 $this->ArrayMergeName = $arrayMergeName;
00086 $this->MergeName = $mergeName;
00087 $this->ContainsName = $containsName;
00088 $this->CompareName = $compareName;
00089 $this->ExtractName = $extractName;
00090 $this->ExtractLeftName = $extractLeftName;
00091 $this->ExtractRightName = $extractRightName;
00092 $this->BeginsWithName = $beginsWithName;
00093 $this->EndsWithName = $endsWithName;
00094 $this->ImplodeName = $implodeName;
00095 $this->ExplodeName = $explodeName;
00096 $this->RepeatName = $repeatName;
00097 $this->ReverseName = $reverseName;
00098 $this->InsertName = $insertName;
00099 $this->RemoveName = $removeName;
00100 $this->ReplaceName = $replaceName;
00101 $this->UniqueName = $uniqueName;
00102 $this->ArraySumName = $arraySumName;
00103
00104 $this->Operators = array( $arrayName,
00105 $hashName,
00106 $arrayPrependName,
00107 $prependName,
00108 $arrayAppendName,
00109 $appendName,
00110 $arrayMergeName,
00111 $mergeName,
00112 $containsName,
00113 $compareName,
00114 $extractName,
00115 $extractLeftName,
00116 $extractRightName,
00117 $beginsWithName,
00118 $endsWithName,
00119 $implodeName,
00120 $explodeName,
00121 $repeatName,
00122 $reverseName,
00123 $insertName,
00124 $removeName,
00125 $replaceName,
00126 $uniqueName,
00127 $arraySumName );
00128 }
00129
00130
00131
00132
00133 function &operatorList()
00134 {
00135 return $this->Operators;
00136 }
00137
00138 function operatorTemplateHints()
00139 {
00140 return array( $this->ArrayName => array( 'input' => true,
00141 'output' => true,
00142 'parameters' => true,
00143 'element-transformation' => true,
00144 'transform-parameters' => true,
00145 'element-transformation-func' => 'arrayTrans' ),
00146 $this->HashName => array( 'input' => true,
00147 'output' => true,
00148 'parameters' => true,
00149 'element-transformation' => true,
00150 'transform-parameters' => true,
00151 'element-transformation-func' => 'arrayTrans'),
00152 $this->ArrayPrependName => array( 'input' => true,
00153 'output' => true,
00154 'parameters' => true,
00155 'element-transformation' => true,
00156 'transform-parameters' => true,
00157 'input-as-parameter' => 'always',
00158 'element-transformation-func' => 'mergeTrans' ),
00159 $this->PrependName => array( 'input' => true,
00160 'output' => true,
00161 'parameters' => true,
00162 'element-transformation' => true,
00163 'transform-parameters' => true,
00164 'input-as-parameter' => 'always',
00165 'element-transformation-func' => 'mergeTrans' ),
00166 $this->ArrayAppendName => array( 'input' => true,
00167 'output' => true,
00168 'parameters' => true,
00169 'element-transformation' => true,
00170 'transform-parameters' => true,
00171 'input-as-parameter' => 'always',
00172 'element-transformation-func' => 'mergeTrans' ),
00173 $this->AppendName => array( 'input' => true,
00174 'output' => true,
00175 'parameters' => true,
00176 'element-transformation' => true,
00177 'transform-parameters' => true,
00178 'input-as-parameter' => 'always',
00179 'element-transformation-func' => 'mergeTrans' ),
00180 $this->ArrayMergeName => array( 'input' => true,
00181 'output' => true,
00182 'parameters' => true,
00183 'element-transformation' => true,
00184 'transform-parameters' => true,
00185 'input-as-parameter' => 'always',
00186 'element-transformation-func' => 'mergeTrans' ),
00187 $this->MergeName => array( 'input' => true,
00188 'output' => true,
00189 'parameters' => true,
00190 'element-transformation' => true,
00191 'transform-parameters' => true,
00192 'input-as-parameter' => 'always',
00193 'element-transformation-func' => 'mergeTrans' ),
00194 $this->ContainsName => array( 'input' => true,
00195 'output' => true,
00196 'parameters' => 1,
00197 'element-transformation' => true,
00198 'transform-parameters' => true,
00199 'input-as-parameter' => 'always',
00200 'element-transformation-func' => 'arrayTrans'),
00201 $this->CompareName => array( 'input' => true,
00202 'output' => true,
00203 'parameters' => 1,
00204 'element-transformation' => true,
00205 'transform-parameters' => true,
00206 'input-as-parameter' => 'always',
00207 'element-transformation-func' => 'arrayTrans'),
00208 $this->ExtractName => array( 'input' => true,
00209 'output' => true,
00210 'parameters' => 2,
00211 'element-transformation' => true,
00212 'transform-parameters' => true,
00213 'input-as-parameter' => 'always',
00214 'element-transformation-func' => 'extractTrans'),
00215 $this->ExtractLeftName => array( 'input' => true,
00216 'output' => true,
00217 'parameters' => 1,
00218 'element-transformation' => true,
00219 'transform-parameters' => true,
00220 'input-as-parameter' => 'always',
00221 'element-transformation-func' => 'extractTrans'),
00222 $this->ExtractRightName => array( 'input' => true,
00223 'output' => true,
00224 'parameters' => 1,
00225 'element-transformation' => true,
00226 'transform-parameters' => true,
00227 'input-as-parameter' => 'always',
00228 'element-transformation-func' => 'extractTrans'),
00229 $this->BeginsWithName => array( 'input' => true,
00230 'output' => true,
00231 'parameters' => true,
00232 'element-transformation' => true,
00233 'transform-parameters' => true,
00234 'input-as-parameter' => 'always',
00235 'element-transformation-func' => 'compareTrans'),
00236 $this->EndsWithName => array( 'input' => true,
00237 'output' => true,
00238 'parameters' => true,
00239 'element-transformation' => true,
00240 'transform-parameters' => true,
00241 'input-as-parameter' => 'always',
00242 'element-transformation-func' => 'compareTrans'),
00243 $this->ImplodeName => array( 'input' => true,
00244 'output' => true,
00245 'parameters' => 1,
00246 'element-transformation' => true,
00247 'transform-parameters' => true,
00248 'input-as-parameter' => 'always',
00249 'element-transformation-func' => 'arrayTrans'),
00250 $this->ExplodeName => array( 'input' => true,
00251 'output' => true,
00252 'parameters' => 1,
00253 'element-transformation' => true,
00254 'transform-parameters' => true,
00255 'input-as-parameter' => 'always',
00256 'element-transformation-func' => 'arrayTrans'),
00257 $this->RepeatName => array( 'input' => true,
00258 'output' => true,
00259 'parameters' => 1,
00260 'element-transformation' => true,
00261 'transform-parameters' => true,
00262 'input-as-parameter' => 'always',
00263 'element-transformation-func' => 'arrayTrans'),
00264 $this->ReverseName => array( 'input' => true,
00265 'output' => true,
00266 'parameters' => false,
00267 'element-transformation' => true,
00268 'transform-parameters' => true,
00269 'input-as-parameter' => 'always',
00270 'element-transformation-func' => 'arrayTrans' ),
00271 $this->InsertName => array( 'input' => true,
00272 'output' => true,
00273 'parameters' => true,
00274 'element-transformation' => true,
00275 'transform-parameters' => true,
00276 'input-as-parameter' => 'always',
00277 'element-transformation-func' => 'arrayTrans' ),
00278 $this->RemoveName => array( 'input' => true,
00279 'output' => true,
00280 'parameters' => 2,
00281 'element-transformation' => true,
00282 'transform-parameters' => true,
00283 'input-as-parameter' => 'always',
00284 'element-transformation-func' => 'arrayTrans'),
00285 $this->ReplaceName => array( 'input' => true,
00286 'output' => true,
00287 'parameters' => true ),
00288 $this->UniqueName => array( 'input' => true,
00289 'output' => true,
00290 'parameters' => false,
00291 'element-transformation' => true,
00292 'transform-parameters' => true,
00293 'input-as-parameter' => 'always',
00294 'element-transformation-func' => 'arrayTrans'),
00295 $this->ArraySumName => array( 'input' => true,
00296 'output' => true,
00297 'parameters' => false,
00298 'element-transformation' => true,
00299 'transform-parameters' => true,
00300 'input-as-parameter' => 'always',
00301 'element-transformation-func' => 'arrayTrans' ) );
00302 }
00303
00304
00305
00306
00307 function arrayTrans( $operatorName, &$node, &$tpl, &$resourceData,
00308 &$element, &$lastElement, &$elementList, &$elementTree, &$parameters )
00309 {
00310 switch( $operatorName )
00311 {
00312 case $this->ArrayName:
00313 {
00314 $code = '';
00315 $paramCount = 0;
00316 $values = array();
00317 $staticArray = array();
00318 for ( $i = 0; $i < count( $parameters ); ++$i )
00319 {
00320 if ( $i != 0 )
00321 {
00322 $code .= ', ';
00323 }
00324 else
00325 {
00326 $code .= '%output% = array( ';
00327 }
00328
00329 if ( !eZTemplateNodeTool::isStaticElement( $parameters[$i] ) )
00330 {
00331 $values[] = $parameters[$i];
00332 ++$paramCount;
00333 $code .= '%' . $paramCount . '%';
00334 }
00335 else
00336 {
00337 if ( $paramCount == 0 )
00338 {
00339 $staticArray[] = eZTemplateNodeTool::elementStaticValue( $parameters[$i] );
00340 }
00341
00342 $code .= eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false );
00343 }
00344 }
00345
00346 if ( $paramCount == 0 )
00347 {
00348 return array( eZTemplateNodeTool::createArrayElement( $staticArray ) );
00349 }
00350
00351 $code .= ' );';
00352
00353 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00354 } break;
00355
00356 case $this->HashName:
00357 {
00358 $code = '';
00359 $paramCount = 0;
00360 $values = array();
00361 $staticArray = array();
00362 $staticKeys = true;
00363 $keys = array();
00364 $vals = array();
00365 $hashCount = (int)( count( $parameters ) / 2 );
00366 for ( $i = 0; $i < $hashCount; ++$i )
00367 {
00368 if ( $i != 0 )
00369 {
00370 $code .= ', ';
00371 }
00372 else
00373 {
00374 $code .= '%output% = array( ';
00375 }
00376
00377 if ( !eZTemplateNodeTool::isStaticElement( $parameters[$i*2] ) )
00378 {
00379 $staticKeys = false;
00380 $values[] = $parameters[$i*2];
00381 ++$paramCount;
00382 $code .= '%' . $paramCount . '%';
00383 }
00384 else
00385 {
00386 $keys[] = eZTemplateNodeTool::elementStaticValue( $parameters[$i*2] );
00387 $code .= eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i*2] ), 0, 0, false );
00388 }
00389
00390 $code .= ' => ';
00391
00392 if ( !eZTemplateNodeTool::isStaticElement( $parameters[$i*2+1] ) )
00393 {
00394 $values[] = $parameters[$i*2 + 1];
00395 ++$paramCount;
00396 $code .= '%' . $paramCount . '%';
00397 }
00398 else
00399 {
00400 if ( $paramCount == 0 )
00401 {
00402 $staticArray[ eZTemplateNodeTool::elementStaticValue( $parameters[$i*2] ) ] = eZTemplateNodeTool::elementStaticValue( $parameters[$i*2+1] );
00403 }
00404 $code .= eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i*2+1] ), 0, 0, false );
00405 }
00406
00407 if ( $staticKeys )
00408 {
00409 $vals[$keys[count( $keys ) - 1]] = $parameters[$i*2 + 1];
00410 }
00411 }
00412
00413 if ( $paramCount == 0 )
00414 {
00415 return array( eZTemplateNodeTool::createArrayElement( $staticArray ) );
00416 }
00417
00418 if ( $staticKeys )
00419 {
00420 return array( eZTemplateNodeTool::createDynamicArrayElement( $keys, $vals ) );
00421 }
00422
00423 $code .= ' );';
00424
00425 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00426 } break;
00427
00428 case $this->ContainsName:
00429 {
00430 $values = array();
00431 $inParam = null;
00432 $isString = false;
00433 $isArray = false;
00434
00435 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00436 {
00437 $inParam = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
00438 if ( is_string( $inParam ) )
00439 {
00440 $isString = true;
00441 }
00442 else if( is_array( $inParam ) )
00443 {
00444 $isArray = true;
00445 }
00446
00447 $inParamCode = eZPHPCreator::variableText( $inParam, 0, 0, false );
00448 }
00449 else
00450 {
00451 $values[] = $parameters[0];
00452 $inParamCode = '%' . count( $values ) . '%';
00453 }
00454
00455 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00456 {
00457 $matchParam = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
00458 if ( count( $values ) == 0 )
00459 {
00460 if ( $isString )
00461 {
00462 $result = ( strpos( $inParam, $matchParam ) !== false );
00463 }
00464 else if( $isArray )
00465 {
00466 $result = in_array( $matchParam, $inParam );
00467 }
00468
00469 return array( eZTemplateNodeTool::createBooleanElement( $result ) );
00470 }
00471 $matchParamCode = eZPHPCreator::variableText( $matchParam, 0, 0, false );
00472 }
00473 else
00474 {
00475 $values[] = $parameters[1];
00476 $matchParamCode = '%' . count( $values ) . '%';
00477 }
00478
00479 if ( $isString )
00480 {
00481 $code = '%output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );';
00482 }
00483 else if ( $isArray )
00484 {
00485 $code = '%output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );';
00486 }
00487 else
00488 {
00489 $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" .
00490 '{' . "\n" .
00491 ' %output% = ( strpos( ' . $inParamCode . ', ' . $matchParamCode . ' ) !== false );' . "\n" .
00492 '}' . "\n" .
00493 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" .
00494 '{' . "\n" .
00495 ' %output% = in_array( ' . $matchParamCode . ', ' . $inParamCode . ' );' . "\n" .
00496 '}' . "\n" .
00497 'else' ."\n" .
00498 '{' . "\n" .
00499 '%output% = false;' . "\n" .
00500 '}';
00501 }
00502
00503 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00504 } break;
00505
00506 case $this->CompareName:
00507 {
00508 $inParam = null;
00509 $isString = false;
00510 $isArray = false;
00511 $values = array();
00512
00513 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00514 {
00515 $inParam = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
00516 if ( is_string( $inParam ) )
00517 {
00518 $isString = true;
00519 }
00520 else if( is_array( $inParam ) )
00521 {
00522 $isArray = true;
00523 }
00524
00525 $inParamCode = eZPHPCreator::variableText( $inParam, 0, 0, false );
00526 }
00527 else
00528 {
00529 $values[] = $parameters[0];
00530 $inParamCode = '%' . count( $values ) . '%';
00531 }
00532
00533 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00534 {
00535 $matchParam = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
00536 if ( count( $values ) == 0 )
00537 {
00538 if ( $isString )
00539 {
00540 $result = strcmp( $inParam, $matchParam ) === 0;
00541 }
00542 else if( $isArray )
00543 {
00544 $result = ( count( array_diff( $matchParam, $inParam ) ) == 0 and
00545 count( array_diff( $inParam, $matchParam ) ) == 0 );
00546 }
00547
00548 return array( eZTemplateNodeTool::createBooleanElement( $result ) );
00549 }
00550 $matchParamCode = eZPHPCreator::variableText( $matchParam, 0, 0, false );
00551 }
00552 else
00553 {
00554 $values[] = $parameters[1];
00555 $matchParamCode = '%' . count( $values ) . '%';
00556 }
00557
00558 if ( $isString )
00559 {
00560 $code = '%output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ' ) === 0;';
00561 }
00562 else if ( $isArray )
00563 {
00564 $code = '%output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" .
00565 ' ( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );';
00566 }
00567 else
00568 {
00569 $code = 'if( is_string( ' . $inParamCode . ' ) )' . "\n" .
00570 '{' . "\n" .
00571 ' %output% = strcmp( ' . $inParamCode . ', ' . $matchParamCode . ') === 0;' . "\n" .
00572 '}' . "\n" .
00573 'else if ( is_array( ' . $inParamCode . ' ) )' . "\n" .
00574 '{' . "\n" .
00575 ' %output% = ( ( count( array_diff( ' . $inParamCode . ', ' . $matchParamCode . " ) ) == 0 ) and\n" .
00576 '( count( array_diff( ' . $matchParamCode . ', ' . $inParamCode . ' ) ) == 0 ) );' . "\n" .
00577 '}';
00578 }
00579
00580 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00581 } break;
00582
00583 case $this->ImplodeName:
00584 {
00585 $values = array();
00586 if ( !eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00587 {
00588 $values[] = $parameters[1];
00589 $code = '%1%, ';
00590 }
00591 else
00592 {
00593 $code = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[1] ), 0, 0, false ) . ', ';
00594 }
00595
00596 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00597 {
00598 if ( count( $values ) == 0 )
00599 {
00600 return array( eZTemplateNodeTool::createStringElement( implode( eZTemplateNodeTool::elementStaticValue( $parameters[1] ),
00601 eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
00602 }
00603 else
00604 {
00605 $code .= eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[0] ), 0, 0, false );
00606 }
00607 }
00608 else
00609 {
00610 $values[] = $parameters[0];
00611 $code .= '%' . count( $values ) . '%';
00612 }
00613
00614 $code = '%output% = implode( ' . $code . ' );';
00615
00616 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00617 } break;
00618
00619 case $this->UniqueName:
00620 {
00621 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00622 {
00623 return array( eZTemplateNodeTool::createArrayElement( array_unique( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
00624 }
00625
00626 $values = array( $parameters[0] );
00627 $code = '%output% = array_unique( %1% );';
00628 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00629 } break;
00630
00631 case $this->ExplodeName:
00632 {
00633 $values = array();
00634 $inParam = null;
00635 $isString = false;
00636 $isArray = false;
00637
00638 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00639 {
00640 $inParam = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
00641 if ( is_string( $inParam ) )
00642 {
00643 $isString = true;
00644 }
00645 else if( is_array( $inParam ) )
00646 {
00647 $isArray = true;
00648 }
00649
00650 $inParamCode = eZPHPCreator::variableText( $inParam, 0, 0, false );
00651 }
00652 else
00653 {
00654 $values[] = $parameters[0];
00655 $inParamCode = '%' . count( $values ) . '%';
00656 }
00657
00658 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00659 {
00660 $matchParam = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
00661 if ( count( $values ) == 0 )
00662 {
00663 if ( $isString )
00664 {
00665 $result = explode( $matchParam, $inParam );
00666 }
00667 else if( $isArray )
00668 {
00669 $result = array( array_slice( $inParam, 0, $matchParam ), array_slice( $inParam, $matchParam ) );
00670 }
00671
00672 return array( eZTemplateNodeTool::createArrayElement( $result ) );
00673 }
00674 $matchParamCode = eZPHPCreator::variableText( $matchParam, 0, 0, false );
00675 }
00676 else
00677 {
00678 $values[] = $parameters[1];
00679 $matchParamCode = '%' . count( $values ) . '%';
00680 }
00681
00682 if ( $isString )
00683 {
00684 $code = '%output% = explode( ' . $matchParamCode . ', ' . $inParamCode . ' );';
00685 }
00686 else if ( $isArray )
00687 {
00688 $code = '%output% = array( array_slice( ' . $inParamCode . ', 0,' . $matchParamCode . ' ), array_slice( ' . $inParamCode . ', ' . $matchParamCode .' ) );';
00689 }
00690 else
00691 {
00692 $code = "if ( is_string( $inParamCode ) )\n" .
00693 "{\n" .
00694 "\t%output% = explode( $matchParamCode, $inParamCode );\n" .
00695 "}\n" .
00696 "else if ( is_array( $inParamCode ) )\n" .
00697 "{\n" .
00698 "\t%output% = array( array_slice( $inParamCode, 0, $matchParamCode ), array_slice( $inParamCode, $matchParamCode ) );\n" .
00699 "}\n" .
00700 "else\n" .
00701 "{\n" .
00702 "\t%output% = null;\n" .
00703 "}\n";
00704 }
00705
00706 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00707 } break;
00708
00709 case $this->RemoveName:
00710 {
00711 $values = array();
00712 $isArray = false;
00713 $isString = false;
00714
00715 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00716 {
00717 $inputArray = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
00718 $inputArrayCode = eZPHPCreator::variableText( $inputArray, 0, 0, false );
00719 $isString = is_string( $inputArray );
00720 $isArray = is_array( $inputArray );
00721 }
00722 else
00723 {
00724 $values[] = $parameters[0];
00725 $inputArrayCode = '%' . count( $values ) . '%';
00726 }
00727
00728 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00729 {
00730 $offset = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
00731 $offsetCode = eZPHPCreator::variableText( $offset, 0, 0, false );
00732 }
00733 else
00734 {
00735 $values[] = $parameters[1];
00736 $offsetCode = '%' . count( $values ) . '%';
00737 }
00738
00739 $length = false;
00740 $lengthCode = '';
00741 if ( count( $parameters ) > 2 )
00742 {
00743 if ( eZTemplateNodeTool::isStaticElement( $parameters[2] ) )
00744 {
00745 $length = eZTemplateNodeTool::elementStaticValue( $parameters[2] );
00746 $lengthCode = eZPHPCreator::variableText( $length, 0, 0, false );
00747 }
00748 else
00749 {
00750 $values[] = $parameters[2];
00751 $lengthCode = '%' . count( $values ) . '%';
00752 }
00753 }
00754
00755 if ( count( $values ) == 0 )
00756 {
00757 if ( $isString )
00758 {
00759 return array( eZTemplateNodeTool::createStringElement( substr( $inputArray, $offset, $length ) ) );
00760 }
00761 else if ( $isArray )
00762 {
00763 if ( $length === false )
00764 $length = 1;
00765
00766 $array_one = array_slice( $inputArray, 0, $offset );
00767 $array_two = array_slice( $inputArray, $offset + $length );
00768
00769 return array ( eZTemplateNodeTool::createArrayElement( array_merge( $array_one, $array_two ) ) );
00770 }
00771 }
00772
00773 if ( $isString )
00774 {
00775 $code = '%output% = substr( ' . $inputArrayCode . ', ' . $offsetCode;
00776 if ( $lengthCode )
00777 $code .= ', ' . $lengthCode;
00778 $code .= ' );';
00779 }
00780 else if ( $isArray )
00781 {
00782 $code = '%output% = array_merge( array_slice( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ), array_slice( ' . $inputArrayCode . ', ' . $offsetCode;
00783 if ( $lengthCode )
00784 $code .= ' + ' . $lengthCode;
00785 $code .= ' ) );';
00786 }
00787 else
00788 {
00789 $code = ( '%tmp1% = ' . $inputArrayCode . ';' . "\n" .
00790 'if ( is_string( %tmp1% ) )' . "\n" .
00791 '{' . "\n" .
00792 ' %output% = ( substr( %tmp1%, 0, ' . $offsetCode . ' )' );
00793
00794 $lengthCode = !$lengthCode ? 1 : $lengthCode;
00795
00796 if ( $lengthCode )
00797 {
00798 $code .= ' . substr( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )';
00799 }
00800 $code .= ( ' );' . "\n" .
00801 '}' . "\n" .
00802 'else if ( is_array( %tmp1% ) )' . "\n" .
00803 '{' . "\n" .
00804 ' %output% = array_merge( array_slice( %tmp1%, 0, ' . $offsetCode . ' )' );
00805 if ( $lengthCode )
00806 {
00807 $code .= ', array_slice( %tmp1%, ' . $offsetCode . ' + ' . $lengthCode . ' )';
00808 }
00809 $code .= ( ' );' . "\n" .
00810 '}' );
00811 }
00812
00813 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values, false, 1 ) );
00814 } break;
00815
00816 case $this->InsertName:
00817 {
00818 $values = array();
00819 $isArray = false;
00820 $isString = false;
00821
00822 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00823 {
00824 $inputArray = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
00825 $inputArrayCode = eZPHPCreator::variableText( $inputArray, 0, 0, false );
00826 $isString = is_string( $inputArray );
00827 $isArray = is_array( $inputArray );
00828 }
00829 else
00830 {
00831 $values[] = $parameters[0];
00832 $inputArrayCode = '%' . count( $values ) . '%';
00833 }
00834
00835 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
00836 {
00837 $offset = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
00838 $offsetCode = eZPHPCreator::variableText( $offset, 0, 0, false );
00839 }
00840 else
00841 {
00842 $values[] = $parameters[1];
00843 $offsetCode = '%' . count( $values ) . '%';
00844 }
00845
00846 if ( count( $parameters ) > 2 )
00847 {
00848 if ( eZTemplateNodeTool::isStaticElement( $parameters[2] ) )
00849 {
00850 $insertText = eZTemplateNodeTool::elementStaticValue( $parameters[2] );
00851 }
00852 }
00853
00854 $insertElemCode = array();
00855
00856 for( $i = 2; $i < count( $parameters ); ++$i )
00857 {
00858 if ( eZTemplateNodeTool::isStaticElement( $parameters[$i] ) )
00859 {
00860 $insertElemCode[] = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false );
00861 }
00862 else
00863 {
00864 $values[] = $parameters[$i];
00865 $insertElemCode[] = '%' . count( $values ) . '%';
00866 }
00867 }
00868
00869 if ( count( $values ) == 0 )
00870 {
00871 if ( $isString )
00872 {
00873 return array( eZTemplateNodeTool::createStringElement( substr( $inputArray, 0, $offset ) . $insertText . substr( $inputArray, $offset ) ) );
00874 }
00875 else if ( $isArray )
00876 {
00877 $array_one = array_slice( $inputArray, 0, $offset );
00878 $array_two = array_slice( $inputArray, $offset );
00879
00880 $array_to_insert = array();
00881 for ( $i = 2; $i < count( $parameters ); ++$i )
00882 {
00883 $array_to_insert[] = eZTemplateNodeTool::elementStaticValue( $parameters[$i] );
00884 }
00885
00886 return array( eZTemplateNodeTool::createArrayElement( array_merge( $array_one, $array_to_insert, $array_two ) ) );
00887 }
00888 }
00889
00890 $tmpCount = 0;
00891 if ( $isString )
00892 {
00893 $code = '%output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );';
00894 }
00895 else if ( $isArray )
00896 {
00897 $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" .
00898 '%tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" .
00899 '%tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" .
00900 '%tmp4% = array( ';
00901 for( $i = 0; $i < count( $insertElemCode ); ++$i )
00902 {
00903 if ( $i != 0 )
00904 {
00905 $code .= ", ";
00906 }
00907 $code .= $insertElemCode[$i];
00908 }
00909 $code .= ' );' . "\n" .
00910 '%output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n";
00911 $tmpCount = 4;
00912 }
00913 else
00914 {
00915 $code = '%tmp1% = ' . $inputArrayCode . ';' . "\n" .
00916 'if ( is_string( %tmp1% ) )' . "\n" .
00917 '{' . "\n" .
00918 ' %output% = substr( ' . $inputArrayCode . ', 0, ' . $offsetCode . ' ) . ' . $insertElemCode[0] . ' . substr( ' . $inputArrayCode . ', ' . $offsetCode . ' );' . "\n" .
00919 '}' . "\n" .
00920 'else if ( is_array( %tmp1% ) )' . "\n" .
00921 '{' . "\n" .
00922 ' %tmp2% = array_slice( %tmp1%, 0, ' . $offsetCode . ' );' . "\n" .
00923 ' %tmp3% = array_slice( %tmp1%, ' . $offsetCode . ' );' . "\n" .
00924 ' %tmp4% = array( ';
00925 for( $i = 0; $i < count( $insertElemCode ); ++$i )
00926 {
00927 if ( $i != 0 )
00928 {
00929 $code .= ", ";
00930 }
00931 $code .= $insertElemCode[$i];
00932 }
00933 $code .= ' );' . "\n" .
00934 ' %output% = array_merge( %tmp2%, %tmp4%, %tmp3% );' . "\n" .
00935 '}' . "\n";
00936 $tmpCount = 4;
00937 }
00938
00939 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values, false, $tmpCount ) );
00940 } break;
00941
00942 case $this->ReverseName:
00943 {
00944 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00945 {
00946 if ( is_string( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) )
00947 {
00948 return array( eZTemplateNodeTool::createStringElement( strrev( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
00949 }
00950 else if ( is_array( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) )
00951 {
00952 return array( eZTemplateNodeTool::createArrayElement( array_reverse( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
00953 }
00954 }
00955
00956 $values = array( $parameters[0] );
00957 $code = 'if ( is_string( %1% ) )' . "\n" .
00958 '{' . "\n".
00959 ' %output% = strrev( %1% );' . "\n" .
00960 '}' . "\n" .
00961 'else if( is_array( %1% ) )' . "\n" .
00962 '{' . "\n" .
00963 ' %output% = array_reverse( %1% );' . "\n" .
00964 '}' . "\n";
00965
00966 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00967 } break;
00968
00969 case $this->ArraySumName:
00970 {
00971 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00972 {
00973 return array( eZTemplateNodeTool::createNumericElement( array_sum( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
00974 }
00975
00976 $values = array( $parameters[0] );
00977 $code = '%output% = array_sum( %1% );';
00978
00979 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
00980 } break;
00981
00982 case $this->RepeatName:
00983 {
00984 $values = array();
00985 $isString = false;
00986 $isArray = false;
00987
00988 if ( !eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
00989 {
00990 $values[] = $parameters[0];
00991 $arrayCode = '%' . count( $values ) . '%';
00992 }
00993 else
00994 {
00995 $arrayCode = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[0] ), 0, 0, false );
00996 $isString = is_string( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) );
00997 $isArray = is_array( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) );
00998 }
00999
01000 if ( !eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
01001 {
01002 $values[] = $parameters[1];
01003 $countCode = '%' . count( $values ) . '%';
01004 }
01005 else
01006 {
01007 $count = (int)eZTemplateNodeTool::elementStaticValue( $parameters[1] );
01008
01009 if ( count( $values ) == 0 )
01010 {
01011 if ( $isString )
01012 {
01013 $retText = '';
01014 $origText = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01015 for ( $i = 0; $i < $count; $i++)
01016 {
01017 $retText .= $origText;
01018 }
01019
01020 return array( eZTemplateNodeTool::createStringElement( $retText ) );
01021 }
01022 else if ( $isArray )
01023 {
01024 $retArray = array();
01025 $origArray = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01026 for ( $i = 0; $i < $count; $i++)
01027 {
01028 $retArray = array_merge( $retArray, $origArray );
01029 }
01030
01031 return array( eZTemplateNodeTool::createArrayElement( $retArray ) );
01032 }
01033 }
01034
01035 $countCode = (string)$count;
01036 }
01037
01038 $code = '%tmp2% = ' . $arrayCode . ';' . "\n" .
01039 'if ( is_string( %tmp2% ) )' . "\n" .
01040 ' %output% = \'\';' . "\n" .
01041 'else if ( is_array( %tmp2% ) )' . "\n" .
01042 ' %output% = array();' . "\n" .
01043 'for( %tmp1% = 0; %tmp1% < ' . $countCode . '; ++%tmp1% )' . "\n" .
01044 '{' . "\n" .
01045 ' if ( is_string( %tmp2% ) )' . "\n" .
01046 ' %output% .= %tmp2%;' . "\n" .
01047 ' else if ( is_array( %tmp2% ) )' . "\n" .
01048 ' %output% = array_merge( %output%, %tmp2% );' . "\n" .
01049 '}' . "\n";
01050
01051 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values, false, 2 ) );
01052 } break;
01053 }
01054 }
01055
01056
01057
01058
01059 function compareTrans( $operatorName, &$node, &$tpl, &$resourceData,
01060 &$element, &$lastElement, &$elementList, &$elementTree, &$parameters )
01061 {
01062 $isArray = false;
01063 $isString = false;
01064 $inParam = null;
01065 $inParamCode = '';
01066 $compareParams = array();
01067 $compareParamsCode = array();
01068 $offset = 0;
01069 $values = array();
01070 $tmpCount = 0;
01071
01072 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
01073 {
01074 $inParam = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01075 $inParamCode = eZPHPCreator::variableText( $inParam, 0, 0, false );
01076 $isString = is_string( $inParam );
01077 $isArray = is_array( $inParam );
01078 }
01079 else
01080 {
01081 $values[] = $parameters[0];
01082 $inParamCode = '%' . count( $values ) . '%';
01083 }
01084
01085 for( $i = 1; $i < count( $parameters ); $i++ )
01086 {
01087 if ( eZTemplateNodeTool::isStaticElement( $parameters[$i] ) )
01088 {
01089 $compareParams[] = eZTemplateNodeTool::elementStaticValue( $parameters[$i] );
01090 $compareParamsCode[] = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false );
01091 }
01092 else
01093 {
01094 $values[] = $parameters[$i];
01095 $compareParamsCode[] = '%' . count( $values ) . '%';
01096 }
01097 }
01098
01099 switch( $operatorName )
01100 {
01101 case $this->EndsWithName:
01102 {
01103 if ( count( $values ) == 0 )
01104 {
01105 if ( $isString )
01106 {
01107 $position = strlen( $inParam ) - strlen( $compareParams[0] );
01108 if ( $position < 0 )
01109 {
01110 $result = false;
01111 }
01112 else
01113 {
01114 $result = ( substr( $inParam, $position ) === $compareParams[0] );
01115 }
01116 }
01117 else if ( $isArray )
01118 {
01119 $length = count( $inParam );
01120 $params = count( $compareParams );
01121 $start = $length - $params;
01122
01123 $result = true;
01124 for ( $i = 0; $i < $params; ++$i )
01125 {
01126 if ( $inParam[$start + $i] != $compareParams[$i] )
01127 {
01128 $result = false;
01129 break;
01130 }
01131 }
01132 }
01133
01134 return array( eZTemplateNodeTool::createBooleanElement( $result ) );
01135 }
01136
01137 if ( $isString )
01138 {
01139 $code = "%tmp1% = strlen( $inParamCode ) - strlen( $compareParamsCode[0] );\n" .
01140 "%output% = ( substr( $inParamCode, %tmp1% ) === $compareParamsCode[0] );";
01141 $tmpCount = 1;
01142 }
01143 else if ( $isArray )
01144 {
01145 $code = '%tmp4% = ' . $inParamCode . ';' . "\n" .
01146 '%tmp1% = count( %tmp4% );' . "\n" .
01147 '%tmp2% = ' . count( $compareParamsCode ) . ';' . "\n" .
01148 '%tmp3% = %tmp1% - %tmp2%;' . "\n" .
01149 '%output% = true;' . "\n";
01150 for( $i = 0 ; $i < count( $compareParamsCode ); ++$i )
01151 {
01152 if( $i != 0 )
01153 $code .= 'else ';
01154 $code .= 'if ( %tmp4%[%tmp3% + ' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" .
01155 ' %output% = false;' . "\n";
01156 }
01157
01158 $tmpCount = 4;
01159 }
01160 else
01161 {
01162 $code = '%tmp4% = ' . $inParamCode . ';' . "\n" .
01163 'if ( is_string( %tmp4% ) )' . "\n" .
01164 '{' . "\n" .
01165 " %tmp1% = strlen( %tmp4% ) - strlen( $compareParamsCode[0] );\n" .
01166 " %output% = ( substr( %tmp4%, %tmp1% ) === $compareParamsCode[0] );\n" .
01167 '}' . "\n" .
01168 'else if( is_array( %tmp4% ) )' . "\n" .
01169 '{' . "\n" .
01170 ' %tmp1% = count( %tmp4% );' . "\n" .
01171 ' %tmp2% = ' . count( $compareParamsCode ) . ';' . "\n" .
01172 ' %tmp3% = %tmp1% - %tmp2%;' . "\n" .
01173 ' %output% = true;' . "\n";
01174 for( $i = 0 ; $i < count( $compareParamsCode ); ++$i )
01175 {
01176 if( $i != 0 )
01177 $code .= ' else ';
01178 $code .= 'if ( %tmp4%[%tmp3% + ' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" .
01179 ' %output% = false;' . "\n";
01180 }
01181 $code .= '}';
01182
01183 $tmpCount = 4;
01184 }
01185
01186 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values, false, $tmpCount ) );
01187 } break;
01188
01189 case $this->BeginsWithName:
01190 {
01191 if ( count( $values ) == 0 )
01192 {
01193 if ( $isString )
01194 {
01195 $result = ( strpos ( $inParam, $compareParams[0] ) == 0 );
01196 }
01197 else if ( $isArray )
01198 {
01199 $result = true;
01200 for ( $i = 0; $i < count( $compareParams ); ++$i )
01201 {
01202 if ( $inParam[$i] != $compareParams[$i] )
01203 {
01204 $result = false;
01205 break;
01206 }
01207 }
01208 }
01209
01210 return array( eZTemplateNodeTool::createBooleanElement( $result ) );
01211 }
01212
01213 if ( $isString )
01214 {
01215 $code = '%output% = ( ' . $compareParamsCode[0] . ' && strpos( ' . $inParamCode . ', ' . $compareParamsCode[0] . ' ) == 0 );';
01216 }
01217 else if ( $isArray )
01218 {
01219 $code = '%tmp1% = ' . $inParamCode . ';' . "\n" .
01220 '%output% = true;' . "\n";
01221 for( $i = 0 ; $i < count( $compareParamsCode ); ++$i )
01222 {
01223 if( $i != 0 )
01224 $code .= 'else ';
01225 $code .= 'if ( %tmp1%[' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" .
01226 ' %output% = false;' . "\n";
01227 }
01228
01229 $tmpCount = 1;
01230 }
01231 else
01232 {
01233 $code = '%tmp1% = ' . $inParamCode . ';' . "\n" .
01234 'if ( is_string( %tmp1% ) )' . "\n" .
01235 '{' . "\n" .
01236 " if ( {$compareParamsCode[0]} == '' )\n" .
01237 " %output% = false;\n" .
01238 " else\n" .
01239 ' %output% = ( strpos( %tmp1%, ' . $compareParamsCode[0] . ' ) === 0 );' . "\n" .
01240 '}' . "\n" .
01241 'else if( is_array( %tmp1% ) )' . "\n" .
01242 '{' . "\n" .
01243 ' %output% = true;' . "\n";
01244 for( $i = 0 ; $i < count( $compareParamsCode ); ++$i )
01245 {
01246 if( $i != 0 )
01247 $code .= ' else ';
01248 $code .= 'if ( %tmp1%[' . $i . '] != ' . $compareParamsCode[$i] . ')' . "\n" .
01249 ' %output% = false;' . "\n";
01250 }
01251 $code .= '}';
01252
01253 $tmpCount = 1;
01254 }
01255
01256 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values, false, $tmpCount ) );
01257 } break;
01258 }
01259 }
01260
01261
01262
01263
01264 function extractTrans( $operatorName, &$node, &$tpl, &$resourceData,
01265 &$element, &$lastElement, &$elementList, &$elementTree, &$parameters )
01266 {
01267 $offset = 0;
01268 $length = false;
01269 $values = array();
01270 $code = '';
01271 if ( $operatorName == $this->ExtractName )
01272 {
01273 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
01274 {
01275 $offset = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
01276 $code .= (string)$offset;
01277 }
01278 else
01279 {
01280 $values[] = $parameters[1];
01281 $code .= '%' . count ( $values ) . '%';
01282 }
01283 }
01284 else if ( $operatorName == $this->ExtractRightName )
01285 {
01286 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
01287 {
01288 $offset = -1 * eZTemplateNodeTool::elementStaticValue( $parameters[1] );
01289 $code .= (string)$offset;
01290 }
01291 else
01292 {
01293 $values[] = $parameters[1];
01294 $code .= '-1 * %' . count ( $values ) . '%';
01295 }
01296 }
01297 else
01298 {
01299 $code .= '0';
01300 }
01301
01302 if ( $operatorName == $this->ExtractName )
01303 {
01304 if ( isset( $parameters[2] ) and eZTemplateNodeTool::isStaticElement( $parameters[2] ) )
01305 {
01306 $length = eZTemplateNodeTool::elementStaticValue( $parameters[2] );
01307 $code .= ', ' . (string)$length;
01308 }
01309 else if ( isset( $parameters[2] ) )
01310 {
01311 $values[] = $parameters[2];
01312 $code .= ', ' . '%' . count ( $values ) . '%';
01313 }
01314 }
01315 else if ( $operatorName == $this->ExtractLeftName )
01316 {
01317 if ( eZTemplateNodeTool::isStaticElement( $parameters[1] ) )
01318 {
01319 $length = eZTemplateNodeTool::elementStaticValue( $parameters[1] );
01320 $code .= ', ' . (string)$length;
01321 }
01322 else
01323 {
01324 $values[] = $parameters[1];
01325 $code .= ', ' . '%' . count ( $values ) . '%';
01326 }
01327 }
01328
01329 if ( eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
01330 {
01331 if ( count( $values ) == 0 )
01332 {
01333 $input = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01334 if ( $operatorName == $this->ExtractRightName or !$length )
01335 {
01336 if ( is_string( $input ) )
01337 $output = substr( $input, $offset );
01338 else
01339 $output = array_slice( $input, $offset );
01340 }
01341 else
01342 {
01343 if ( is_string( $input ) )
01344 $output = substr( $input, $offset, $length );
01345 else
01346 $output = array_slice( $input, $offset, $length );
01347 }
01348 return array( eZTemplateNodeTool::createStaticElement( $output ) );
01349 }
01350 else
01351 {
01352 $code = '%output% = array_slice( ' . eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[0] ), 0, 0, false ) . ', ' . $code . ' );';
01353 }
01354 }
01355 else
01356 {
01357 $values[] = $parameters[0];
01358 $code = ( "if ( is_string( %" . count( $values ) . "% ) )\n" .
01359 " %output% = substr( %" . count( $values ) . "%, " . $code . " );\n" .
01360 "else\n" .
01361 " %output% = array_slice( %" . count( $values ) . "%, " . $code . " );" );
01362 }
01363
01364 return array( eZTemplateNodeTool::createCodePieceElement( $code, $values ) );
01365 }
01366
01367
01368
01369
01370 function mergeTrans( $operatorName, &$node, &$tpl, &$resourceData,
01371 &$element, &$lastElement, &$elementList, &$elementTree, &$parameters )
01372 {
01373 $code = '';
01374 $stringCode = '';
01375
01376 $paramCount = 0;
01377 $values = array();
01378 $staticArray = array();
01379 for ( $i = 1; $i < count( $parameters ); ++$i )
01380 {
01381 if ( $i != 1 )
01382 {
01383 $code .= ', ';
01384 $stringCode .= ', ';
01385 }
01386
01387 if ( !eZTemplateNodeTool::isStaticElement( $parameters[$i] ) )
01388 {
01389 $values[] = $parameters[$i];
01390 ++$paramCount;
01391 if ( $operatorName == $this->MergeName or
01392 $operatorName == $this->ArrayMergeName )
01393 $code .= '%' . $paramCount . '%';
01394 else
01395 $code .= 'array( %' . $paramCount . '% )';
01396 $stringCode .= '%' . $paramCount . '%';
01397 }
01398 else
01399 {
01400 if ( $paramCount == 0 )
01401 {
01402 $staticArray[] = eZTemplateNodeTool::elementStaticValue( $parameters[$i] );
01403 }
01404 if ( $operatorName == $this->MergeName or
01405 $operatorName == $this->ArrayMergeName )
01406 $code .= '' . eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false ) . '';
01407 else
01408 {
01409 $tmp_check = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false );
01410
01411 $tmp_check = str_replace( "%", '"."%"."', $tmp_check );
01412 $code .= 'array( ' . $tmp_check . ' )';
01413 }
01414 $stringCode .= eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[$i] ), 0, 0, false );
01415 }
01416 }
01417
01418 $isString = false;
01419 $isArray = false;
01420 $code2 = false;
01421 if ( $parameters[0] )
01422 {
01423 if ( !eZTemplateNodeTool::isStaticElement( $parameters[0] ) )
01424 {
01425 $values[] = $parameters[0];
01426 ++$paramCount;
01427 $code2 = '%' . $paramCount . '%';
01428 }
01429 else
01430 {
01431 $isString = is_string( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) );
01432 $isArray = is_array( eZTemplateNodeTool::elementStaticValue( $parameters[0] ) );
01433 if ( $paramCount == 0 )
01434 {
01435
01436 }
01437 else
01438 {
01439 $code2 = eZPHPCreator::variableText( eZTemplateNodeTool::elementStaticValue( $parameters[0] ), 0, 0, false );
01440 }
01441 }
01442 }
01443
01444 if ( $paramCount == 0 )
01445 {
01446 if ( $operatorName == $this->AppendName or
01447 $operatorName == $this->ArrayAppendName or
01448 $operatorName == $this->MergeName or
01449 $operatorName == $this->ArrayMergeName )
01450 {
01451 if ( $isString )
01452 {
01453 $str = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01454 for( $i = 0; $i < count( $staticArray ); ++$i )
01455 {
01456 $str .= $staticArray[$i];
01457 }
01458
01459 return array( eZTemplateNodeTool::createStringElement( $str ) );
01460 }
01461 else if ( $isArray )
01462 {
01463 $returnArray = eZTemplateNodeTool::elementStaticValue( $parameters[0] );
01464 for( $i = 0; $i < count( $staticArray ); ++$i )
01465 {
01466 $returnArray = array_merge( $returnArray, $staticArray[$i] );
01467 }
01468 return array( eZTemplateNodeTool::createArrayElement( $returnArray ) );
01469 }
01470 }
01471 else if ( $operatorName == $this->PrependName or
01472 $operatorName == $this->ArrayPrependName )
01473 {
01474 if ( $isString )
01475 {
01476 return array( eZTemplateNodeTool::createStringElement( eZTemplateNodeTool::elementStaticValue( $parameters[1] ) . eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) );
01477 }
01478 else if ( $isArray )
01479 {
01480 return array( eZTemplateNodeTool::createArrayElement( array_merge( $staticArray, eZTemplateNodeTool::elementStaticValue( $parameters[0] ) ) ) );
01481 }
01482 }
01483 }
01484
01485 if ( $code2 )
01486 {
01487 if ( $operatorName == $this->AppendName )
01488 {
01489 $code = ( 'if ( is_string( ' . $code2 . ' ) )' . "\n" .
01490 ' %output% = ' . $code2 . ' . implode( \'\', array( ' . $stringCode . ' ) );' . "\n" .
01491 'else if( is_array( ' . $code2 . ' ) )' . "\n" .
01492 ' %output% = array_merge( ' . $code2 . ', ' . $code . ' );' );
01493 }
01494 else if ( $operatorName == $this->ArrayAppendName )
01495 {
01496 $code = '%output% = array_merge( ' . $code2 . ', ' . $code . ' );';
01497 }
01498 else if ( $operatorName == $this->MergeName )
01499 {
01500 $code = '%output% = array_merge( ' . $code2 . ', ' . $code . ' );';
01501 }
01502 else if ( $operatorName == $this->ArrayMergeName )
01503 {
01504 $code = '%output% = array_merge( ' . $code2 . ', ' . $code . ' );';
01505 }
01506 else if ( $operatorName == $this->PrependName )
01507 {
01508 $code = ( 'if ( is_string( ' . $code2 . ' ) )' . "\n" .
01509 ' %output% = implode( \'\', array( ' . $stringCode . ' ) ) . ' . $code2 . ';' . "\n" .
01510 'else if( is_array( ' . $code2 . ' ) )' . "\n" .
01511 ' %output% = array_merge( ' . $code . ', ' . $code2 . ' );' );
01512 }
01513 else if ( $operatorName == $this->ArrayPrependName )
01514 {
01515 $code = '%output% = array_merge( ' . $code . ', ' . $code2 . ' );';
01516 }
01517 }
01518 else
01519 {
01520 if ( $operatorName == $this->MergeName )
01521 {
01522 $code = '%output% = array_merge( ' . $code . ' );';
01523 }
01524 else
01525 {
01526 $code = '%output% = array(' . $code . ');';
01527 }
01528 }
01529
01530 return array( eZTemplateNodeTool::createCodePieceElement( $code . "\n", $values ) );
01531 }
01532
01533
01534
01535
01536 function namedParameterPerOperator()
01537 {
01538 return true;
01539 }
01540
01541
01542
01543 function namedParameterList()
01544 {
01545 return array( $this->RemoveName => array( 'offset' => array( "type" => "integer",
01546 "required" => true,
01547 "default" => false ),
01548 'length' => array( "type" => "integer",
01549 "required" => false,
01550 "default" => 1 ) ),
01551 $this->RepeatName => array( 'repeat_times' => array( "type" => "integer",
01552 "required" => false,
01553 "default" => 1 ) ),
01554 $this->InsertName => array( 'insert_position' => array( "type" => "integer",
01555 "required" => true,
01556 "default" => false ),
01557 'insert_string' => array( "type" => "string",
01558 "required" => true,
01559 "default" => false ) ),
01560 $this->ExplodeName => array( 'explode_first' => array( "type" => "mixed",
01561 "required" => true,
01562 "default" => false ) ),
01563 $this->ExtractName => array( 'extract_start' => array( "type" => "integer",
01564 "required" => true,
01565 "default" => false ),
01566 'extract_length' => array( "type" => "integer",
01567 "required" => false,
01568 "default" => false ) ),
01569 $this->ExtractLeftName => array( 'length' => array( "type" => "integer",
01570 "required" => true,
01571 "default" => false ) ),
01572 $this->ExtractRightName => array( 'length' => array( "type" => "integer",
01573 "required" => true,
01574 "default" => false ) ),
01575 $this->ReplaceName => array( 'offset' => array( "type" => "integer",
01576 "required" => true,
01577 "default" => false),
01578 'length' => array( "type" => "integer",
01579 "required" => false,
01580 "default" => false) ),
01581 $this->PrependName => array( 'prepend_string' => array( "type" => "string",
01582 "required" => false,
01583 "default" => false ) ),
01584 $this->ContainsName => array( 'match' => array( "type" => "string",
01585 "required" => true,
01586 "default" => false ) ),
01587 $this->BeginsWithName => array( 'match' => array( "type" => "string",
01588 "required" => true,
01589 "default" => false ) ),
01590 $this->EndsWithName => array( 'match' => array( "type" => "string",
01591 "required" => true,
01592 "default" => false ) ),
01593 $this->ImplodeName => array( 'separator' => array( "type" => "string",
01594 "required" => true,
01595 "default" => false) ),
01596 $this->CompareName => array( 'compare' => array( "type" => "mixed",
01597 "required" => true,
01598 "default" => false ) ) );
01599 }
01600
01601 function modify( &$tpl, &$operatorName, &$operatorParameters,
01602 &$rootNamespace, &$currentNamespace, &$operatorValue,
01603 &$namedParameters, $placement )
01604 {
01605 switch( $operatorName )
01606 {
01607 case $this->ArrayName:
01608 {
01609 $operatorValue = array();
01610 for ( $i = 0; $i < count( $operatorParameters ); ++$i )
01611 {
01612 $operatorValue[] =& $tpl->elementValue( $operatorParameters[$i],
01613 $rootNamespace,
01614 $currentNamespace,
01615 $placement );
01616 }
01617 return;
01618 }break;
01619
01620 case $this->HashName:
01621 {
01622 $operatorValue = array();
01623 $hashCount = (int)( count( $operatorParameters ) / 2 );
01624 for ( $i = 0; $i < $hashCount; ++$i )
01625 {
01626 $hashName = $tpl->elementValue( $operatorParameters[$i*2],
01627 $rootNamespace,
01628 $currentNamespace,
01629 $placement );
01630 if ( is_string( $hashName ) or
01631 is_numeric( $hashName ) )
01632 $operatorValue[$hashName] =& $tpl->elementValue( $operatorParameters[($i*2)+1],
01633 $rootNamespace,
01634 $currentNamespace,
01635 $placement );
01636 else
01637 $tpl->error( $operatorName,
01638 "Unknown hash key type '" . gettype( $hashName ) . "', skipping",
01639 $placement );
01640 }
01641 return;
01642 }
01643 break;
01644
01645 case $this->ArraySumName:
01646 {
01647 if ( is_array( $operatorValue ) )
01648 {
01649 $operatorValue = array_sum( $operatorValue );
01650 }
01651 else
01652 {
01653 $tpl->error( $operatorName,
01654 "Unknown input type, can only work with arrays '" . gettype( $operatorValue ) . "'",
01655 $placement );
01656 }
01657 return;
01658 }
01659 break;
01660 }
01661
01662 $isArray = false;
01663 if ( isset( $operatorParameters[0] ) and
01664 is_array( $tpl->elementValue( $operatorParameters[0], $rootNamespace, $currentNamespace, $placement ) ) )
01665 $isArray = true;
01666
01667 if ( is_array( $operatorValue ) )
01668 $isArray = true;
01669
01670 if ( $isArray )
01671 {
01672 switch( $operatorName )
01673 {
01674
01675 case $this->ArrayPrependName:
01676 case $this->ArrayAppendName:
01677 case $this->PrependName:
01678 case $this->AppendName:
01679 {
01680 $i = 0;
01681 if ( is_array( $operatorValue ) )
01682 {
01683 if ( count( $operatorParameters ) < 1 )
01684 {
01685 $tpl->error( $operatorName,
01686 "Requires at least one item!",
01687 $placement );
01688 return;
01689 }
01690 $mainArray = $operatorValue;
01691 }
01692 else
01693 {
01694 if ( count( $operatorParameters ) < 2 )
01695 {
01696 $tpl->error( $operatorName,
01697 "Requires an array (and at least one item)!",
01698 $placement );
01699 return;
01700 }
01701 $mainArray =& $tpl->elementValue( $operatorParameters[$i++],
01702 $rootNamespace,
01703 $currentNamespace,
01704 $placement );
01705 }
01706 $tmpArray = array();
01707 for ( ; $i < count( $operatorParameters ); ++$i )
01708 {
01709 $tmpArray[] =& $tpl->elementValue( $operatorParameters[$i],
01710 $rootNamespace,
01711 $currentNamespace,
01712 $placement );
01713 }
01714 if ( $operatorName == $this->ArrayPrependName or $operatorName == $this->PrependName )
01715 $operatorValue = array_merge( $tmpArray, $mainArray );
01716 else
01717 $operatorValue = array_merge( $mainArray, $tmpArray );
01718
01719 }
01720 break;
01721
01722
01723 case $this->ArrayMergeName:
01724 case $this->MergeName:
01725 {
01726 $tmpArray = array();
01727 $tmpArray[] = $operatorValue;
01728
01729 if ( count( $operatorParameters ) < 1 )
01730 {
01731 $tpl->error( $operatorName, "Requires an array (and at least one item!)",
01732 $placement );
01733 return;
01734 }
01735
01736 for ( $i = 0; $i < count( $operatorParameters ); ++$i )
01737 {
01738 $tmpArray[] =& $tpl->elementValue( $operatorParameters[$i],
01739 $rootNamespace,
01740 $currentNamespace,
01741 $placement );
01742 }
01743 $operatorValue = call_user_func_array( 'array_merge', $tmpArray );
01744 }break;
01745
01746
01747 case $this->ContainsName:
01748 {
01749 if ( count( $operatorParameters ) < 1 )
01750 {
01751 $tpl->error( $operatorName, "Missing matching value!",
01752 $placement );
01753 return;
01754 }
01755 $matchValue =& $tpl->elementValue( $operatorParameters[0],
01756 $rootNamespace,
01757 $currentNamespace,
01758 $placement );
01759
01760 $operatorValue = in_array( $matchValue, $operatorValue );
01761 }
01762 break;
01763
01764
01765 case $this->CompareName:
01766 {
01767 $operatorValue = ( count( array_diff( $operatorValue, $namedParameters['compare'] ) ) == 0 and
01768 count( array_diff( $namedParameters['compare'], $operatorValue ) ) == 0 );
01769 }
01770 break;
01771
01772
01773 case $this->ExtractName:
01774 {
01775 if ( $namedParameters['extract_length'] === false )
01776 $operatorValue = array_slice( $operatorValue, $namedParameters['extract_start'] );
01777 else
01778 $operatorValue = array_slice( $operatorValue, $namedParameters['extract_start'], $namedParameters['extract_length'] );
01779 }
01780 break;
01781
01782
01783 case $this->ExtractLeftName:
01784 {
01785 $operatorValue = array_slice( $operatorValue, 0, $namedParameters['length'] );
01786 }break;
01787
01788
01789 case $this->ExtractRightName:
01790 {
01791 $index = count( $operatorValue ) - $namedParameters['length'];
01792 $operatorValue = array_slice( $operatorValue, $index );
01793 }break;
01794
01795
01796 case $this->BeginsWithName:
01797 {
01798 for ( $i = 0; $i < count( $operatorParameters ); $i++ )
01799 {
01800 $test = $tpl->elementValue( $operatorParameters[$i],
01801 $rootNamespace,
01802 $currentNamespace,
01803 $placement );
01804
01805 if ( $operatorValue[$i] != $test )
01806 {
01807 $operatorValue = false;
01808 return;
01809 }
01810 }
01811
01812 $operatorValue = true;
01813 }break;
01814
01815
01816 case $this->EndsWithName:
01817 {
01818 $length = count( $operatorValue );
01819 $params = count( $operatorParameters );
01820
01821 $start = $length - $params;
01822
01823 for ( $i = 0; $i < $params; $i++ )
01824 {
01825 $test = $tpl->elementValue( $operatorParameters[$i],
01826 $rootNamespace,
01827 $currentNamespace,
01828 $placement );
01829
01830 if ( $operatorValue[$start+$i] != $test )
01831 {
01832 $operatorValue = false;
01833 return;
01834 }
01835 }
01836 $operatorValue = true;
01837 }break;
01838
01839
01840 case $this->ImplodeName:
01841 {
01842 $operatorValue = implode( $operatorValue, $namedParameters['separator'] );
01843 }break;
01844
01845
01846 case $this->ExplodeName:
01847 {
01848 $array_one = array();
01849 $array_two = array();
01850
01851 $array_one = array_slice( $operatorValue, 0, $namedParameters['explode_first'] );
01852 $array_two = array_slice( $operatorValue, $namedParameters['explode_first'] );
01853
01854 $operatorValue = array( $array_one, $array_two );
01855 }break;
01856
01857
01858 case $this->RepeatName:
01859 {
01860 $arrayElement = $operatorValue;
01861 $count = $namedParameters['repeat_times'];
01862 $operatorValue = array();
01863 for ( $i = 0; $i < $count; $i++)
01864 {
01865 $operatorValue = array_merge( $operatorValue, $arrayElement );
01866 }
01867 }break;
01868
01869
01870 case $this->ReverseName:
01871 {
01872 $operatorValue = array_reverse( $operatorValue );
01873 }break;
01874
01875
01876 case $this->InsertName:
01877 {
01878 $array_one = array_slice( $operatorValue, 0, $namedParameters['insert_position'] );
01879 $array_two = array_slice( $operatorValue, $namedParameters['insert_position'] );
01880
01881
01882 $array_to_insert = array();
01883 for ( $i = 1; $i < count( $operatorParameters ); ++$i )
01884 {
01885 $array_to_insert[] =& $tpl->elementValue( $operatorParameters[$i],
01886 $rootNamespace,
01887 $currentNamespace,
01888 $placement );
01889 }
01890
01891 $operatorValue = array_merge( $array_one, $array_to_insert, $array_two );
01892 }break;
01893
01894
01895 case $this->RemoveName:
01896 {
01897 $array_one = array_slice( $operatorValue, 0, $namedParameters['offset'] );
01898 $array_two = array_slice( $operatorValue, $namedParameters['offset'] + $namedParameters['length'] );
01899
01900 $operatorValue = array_merge( $array_one, $array_two );
01901 }break;
01902
01903
01904 case $this->ReplaceName:
01905 {
01906 $array_one = array_slice( $operatorValue, 0, $namedParameters['offset'] );
01907 $array_two = array_slice( $operatorValue, $namedParameters['offset'] + $namedParameters['length'] );
01908 $array_mid = array();
01909
01910 for ( $i = 2; $i < count( $operatorParameters ); ++ $i )
01911 {
01912 $array_mid[] =& $tpl->elementValue( $operatorParameters[$i],
01913 $rootNamespace,
01914 $currentNamespace,
01915 $placement );
01916 }
01917
01918 $operatorValue = array_merge( $array_one, $array_mid, $array_two );
01919 } break;
01920
01921
01922 case $this->UniqueName:
01923 {
01924 $operatorValue = array_unique( $operatorValue );
01925 }break;
01926
01927
01928 default:
01929 {
01930 $tpl->warning( $operatorName, "Unknown operatorname: $operatorName", $placement );
01931 }
01932 break;
01933 }
01934 }
01935 else if ( is_string( $operatorValue ) )
01936 {
01937 switch( $operatorName )
01938 {
01939
01940 case $this->ArrayName:
01941 {
01942 $tpl->warning( $operatorName, "$operatorName works only with arrays.", $placement );
01943 }break;
01944
01945
01946 case $this->HashName:
01947 {
01948 $tpl->warning( $operatorName, "$operatorName works only with arrays.", $placement );
01949 }
01950 break;
01951
01952
01953 case $this->PrependName:
01954 {
01955 $operatorValue = $namedParameters['prepend_string'].$operatorValue;
01956 }break;
01957
01958
01959 case $this->AppendName:
01960 {
01961 for ( $i = 0; $i < count( $operatorParameters ); ++$i )
01962 {
01963 $operatorValue .= $tpl->elementValue( $operatorParameters[$i],
01964 $rootNamespace,
01965 $currentNamespace,
01966 $placement );
01967 }
01968
01969 }break;
01970
01971
01972 case $this->MergeName:
01973 {
01974 $tpl->warning( $operatorName, "$operatorName works only with arrays.", $placement );
01975 }break;
01976
01977
01978 case $this->ContainsName:
01979 {
01980 $operatorValue = ( strpos( $operatorValue, $namedParameters['match'] ) !== false );
01981 }
01982 break;
01983
01984
01985 case $this->CompareName:
01986 {
01987 if ( strcmp( $operatorValue, $namedParameters['compare'] ) === 0 )
01988 {
01989 $operatorValue = true;
01990 }
01991 else
01992 {
01993 $operatorValue = false;
01994 }
01995 }
01996 break;
01997
01998
01999 case $this->ExtractName:
02000 {
02001 if ( $namedParameters['extract_length'] === false )
02002 $operatorValue = substr( $operatorValue, $namedParameters['extract_start'] );
02003 else
02004 $operatorValue = substr( $operatorValue, $namedParameters['extract_start'], $namedParameters['extract_length'] );
02005 }
02006 break;
02007
02008
02009 case $this->ExtractLeftName:
02010 {
02011 $operatorValue = substr( $operatorValue, 0, $namedParameters['length'] );
02012 }break;
02013
02014
02015 case $this->ExtractRightName:
02016 {
02017 $offset = strlen( $operatorValue ) - $namedParameters['length'];
02018 $operatorValue = substr( $operatorValue, $offset );
02019 }break;
02020
02021
02022 case $this->BeginsWithName:
02023 {
02024 if ( strpos( $operatorValue, $namedParameters['match'] ) === 0 )
02025 {
02026 $operatorValue = true;
02027 }
02028 else
02029 {
02030 $operatorValue = false;
02031 }
02032 }break;
02033
02034
02035 case $this->EndsWithName:
02036 {
02037 $position = strlen( $operatorValue ) - strlen( $namedParameters['match'] );
02038
02039 if ( $position < 0 )
02040 {
02041 $operatorValue = false;
02042 }
02043 else
02044 {
02045 if ( substr( $operatorValue, $position ) === $namedParameters['match'] )
02046 {
02047 $operatorValue = true;
02048 }
02049 else
02050 {
02051 $operatorValue = false;
02052 }
02053 }
02054 }break;
02055
02056
02057 case $this->ImplodeName:
02058 {
02059 $tpl->warning( $operatorName, "$operatorName only works with arrays", $placement );
02060 }break;
02061
02062
02063 case $this->ExplodeName:
02064 {
02065 $operatorValue = explode( $namedParameters['explode_first'], $operatorValue );
02066 }break;
02067
02068
02069 case $this->RepeatName:
02070 {
02071 $operatorValue = str_repeat( $operatorValue, $namedParameters['repeat_times'] );
02072 }break;
02073
02074
02075 case $this->ReverseName:
02076 {
02077 $operatorValue = strrev( $operatorValue );
02078 }break;
02079
02080
02081 case $this->InsertName:
02082 {
02083 $first = substr( $operatorValue, 0, $namedParameters['insert_position'] );
02084 $second = substr( $operatorValue, $namedParameters['insert_position'] );
02085 $operatorValue = $first . $namedParameters['insert_string'] . $second;
02086 }break;
02087
02088
02089 case $this->RemoveName:
02090 {
02091 $first = substr( $operatorValue, 0, $namedParameters['offset'] );
02092 $second = substr( $operatorValue, $namedParameters['offset'] + $namedParameters['length'] );
02093 $operatorValue = $first . $second;
02094 }break;
02095
02096
02097 case $this->ReplaceName:
02098 {
02099 $first = substr( $operatorValue, 0, $namedParameters['offset'] );
02100 $second = substr( $operatorValue, $namedParameters['offset'] + $namedParameters['length'] );
02101 $mid = '';
02102
02103 for ( $i = 2; $i < count( $operatorParameters ); ++ $i )
02104 {
02105 $mid .= $tpl->elementValue( $operatorParameters[$i],
02106 $rootNamespace,
02107 $currentNamespace,
02108 $placement );
02109 }
02110
02111 $operatorValue = $first . $mid . $second;
02112 }break;
02113
02114
02115 case $this->UniqueName:
02116 {
02117 $tpl->warning( $operatorName, "$operatorName works only with arrays.", $placement );
02118 }break;
02119
02120
02121 default:
02122 {
02123 $tpl->warning( $operatorName, "Unknown operatorname: $operatorName", $placement );
02124 }
02125 break;
02126 }
02127 }
02128
02129 else
02130 {
02131 $operatorValue = array();
02132 for ( $i = 0; $i < count( $operatorParameters ); ++$i )
02133 {
02134 $operatorValue[] =& $tpl->elementValue( $operatorParameters[$i],
02135 $rootNamespace,
02136 $currentNamespace,
02137 $placement );
02138 }
02139 }
02140 }
02141
02142
02143 var $Operators;
02144 var $ArrayName;
02145 var $HashName;
02146 }
02147
02148 ?>