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
00048
00049 include_once( "kernel/classes/ezpersistentobject.php" );
00050
00051 define( 'EZURLALIAS_CACHE_FUNCTION', 'eZURLAliasWilcardTranslate' );
00052
00053 define( 'EZ_URLALIAS_WILDCARD_TYPE_NONE', 0 );
00054 define( 'EZ_URLALIAS_WILDCARD_TYPE_FORWARD', 1 );
00055 define( 'EZ_URLALIAS_WILDCARD_TYPE_DIRECT', 2 );
00056
00057 class eZURLAlias extends eZPersistentObject
00058 {
00059
00060
00061
00062 function eZURLAlias( $row )
00063 {
00064 $this->eZPersistentObject( $row );
00065 }
00066
00067
00068
00069
00070 function definition()
00071 {
00072 return array( "fields" => array( "id" => array( 'name' => 'ID',
00073 'datatype' => 'integer',
00074 'default' => 0,
00075 'required' => true ),
00076 "source_url" => array( 'name' => "SourceURL",
00077 'datatype' => 'string',
00078 'default' => '',
00079 'required' => true ),
00080 "source_md5" => array( 'name' => "SourceMD5",
00081 'datatype' => 'string',
00082 'default' => '',
00083 'required' => true ),
00084 "destination_url" => array( 'name' => "DestinationURL",
00085 'datatype' => 'string',
00086 'default' => '',
00087 'required' => true ),
00088 "is_internal" => array( 'name' => "IsInternal",
00089 'datatype' => 'integer',
00090 'default' => '0',
00091 'required' => true ),
00092 "is_wildcard" => array( 'name' => "IsWildcard",
00093 'datatype' => 'integer',
00094 'default' => '0',
00095 'required' => true ),
00096 "forward_to_id" => array( 'name' => "ForwardToID",
00097 'datatype' => 'integer',
00098 'default' => '0',
00099 'required' => true ) ),
00100 "keys" => array( "id" ),
00101 'function_attributes' => array( 'forward_url' => 'forwardURL' ),
00102 "increment_key" => "id",
00103 "class_name" => "eZURLAlias",
00104 "name" => "ezurlalias" );
00105 }
00106
00107
00108
00109
00110 function asArray()
00111 {
00112 return array( 'id' => $this->attribute( 'id' ),
00113 'source_url' => $this->attribute( 'source_url' ),
00114 'source_md5' => $this->attribute( 'source_md5' ),
00115 'destination_url' => $this->attribute( 'destination_url' ),
00116 'is_internal' => $this->attribute( 'is_internal' ),
00117 'is_wildcard' => $this->attribute( 'is_wildcard' ),
00118 'forward_to_id' => $this->attribute( 'forward_to_id' ) );
00119 }
00120
00121
00122
00123
00124 function &forwardURL()
00125 {
00126 $url = null;
00127 if ( $this->attribute( 'forward_to_id' ) != 0 )
00128 $url = eZURLAlias::fetch( $this->attribute( 'forward_to_id' ) );
00129 else
00130 $url = null;
00131 return $url;
00132 }
00133
00134
00135
00136
00137
00138
00139
00140 function create( $sourceURL, $destinationURL, $isInternal = true, $forwardToID = false, $isWildcard = EZ_URLALIAS_WILDCARD_TYPE_NONE )
00141 {
00142 if ( !$forwardToID )
00143 $forwardToID = 0;
00144 $sourceURL = eZURLAlias::cleanURL( $sourceURL );
00145 $destinationURL = eZURLAlias::cleanURL( $destinationURL );
00146 $row = array( 'source_url' => $sourceURL,
00147 'destination_url' => $destinationURL,
00148 'is_internal' => $isInternal,
00149 'is_wildcard' => $isWildcard,
00150 'forward_to_id' => $forwardToID );
00151 $alias = new eZURLAlias( $row );
00152 return $alias;
00153 }
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 function &createForForwarding( $forwardURL )
00164 {
00165 $alias = eZURLAlias::create( $forwardURL, $this->attribute( 'destination_url' ),
00166 $this->attribute( 'is_internal' ), $this->attribute( 'id' ) );
00167 return $alias;
00168 }
00169
00170
00171
00172
00173
00174
00175 function store()
00176 {
00177 $this->SourceURL = eZURLAlias::cleanURL( $this->SourceURL );
00178 $this->DestinationURL = eZURLAlias::cleanURL( $this->DestinationURL );
00179 $this->SourceMD5 = md5( $this->SourceURL );
00180 eZPersistentObject::store();
00181 }
00182
00183
00184
00185
00186
00187
00188 function cleanup()
00189 {
00190 $id = $this->attribute( 'id' );
00191 $db =& eZDB::instance();
00192 $db->begin();
00193 $sql = "DELETE FROM ezurlalias WHERE forward_to_id = '" . $db->escapeString( $id ) . "'";
00194 $db->query( $sql );
00195 $this->remove();
00196 $db->commit();
00197 }
00198
00199
00200
00201
00202
00203
00204
00205
00206 function updateChildAliases( $newPathString, $oldPathString )
00207 {
00208 $oldPathStringLength = strlen( $oldPathString );
00209 $db =& eZDB::instance();
00210 $newPathStringText = $db->escapeString( $newPathString );
00211 $oldPathStringText = $db->escapeString( $oldPathString );
00212 $subStringQueryPart = $db->subString( 'source_url', $oldPathStringLength + 1 );
00213 $newPathStringQueryPart = $db->concatString( array( "'$newPathStringText'", $subStringQueryPart ) );
00214 $sql = "UPDATE ezurlalias
00215 SET
00216 source_url = $newPathStringQueryPart
00217 WHERE
00218 is_wildcard = 0 AND
00219 source_url LIKE '$oldPathStringText/%'";
00220
00221 $db->begin();
00222 $db->query( $sql );
00223
00224 $subStringQueryPart = $db->subString( 'source_url', $oldPathStringLength + 1 );
00225 $newPathStringQueryPart = $db->concatString( array( "'$newPathStringText'", $subStringQueryPart ) );
00226 $destSubStringQueryPart = $db->subString( 'destination_url', $oldPathStringLength + 1 );
00227 $newDestPathStringQueryPart = $db->concatString( array( "'$newPathStringText'", $destSubStringQueryPart ) );
00228 $sql = "UPDATE ezurlalias
00229 SET
00230 source_url = $newPathStringQueryPart, destination_url = $newDestPathStringQueryPart
00231 WHERE
00232 is_wildcard != 0 AND
00233 source_url LIKE '$oldPathStringText/%/*' AND
00234 destination_url LIKE '$oldPathStringText/%/{1}'";
00235
00236 $db->query( $sql );
00237
00238 $md5QueryPart = $db->md5( 'source_url' );
00239 $sql = "UPDATE ezurlalias
00240 SET
00241 source_md5 = $md5QueryPart
00242 WHERE
00243 source_url like '$newPathStringText%'";
00244
00245 $db->query( $sql );
00246 $db->commit();
00247 }
00248
00249
00250
00251
00252
00253
00254 function cleanupWildcards( $baseURL )
00255 {
00256 $db =& eZDB::instance();
00257 $baseURLText = $db->escapeString( $baseURL . "/*" );
00258 $sql = "DELETE FROM ezurlalias
00259 WHERE
00260 source_url = '$baseURLText' AND
00261 is_wildcard IN ( " . EZ_URLALIAS_WILDCARD_TYPE_FORWARD . ", " . EZ_URLALIAS_WILDCARD_TYPE_DIRECT . ")";
00262 $db->query( $sql );
00263 }
00264
00265
00266
00267
00268
00269
00270 function cleanupForwardingURLs( $oldURL )
00271 {
00272 $db =& eZDB::instance();
00273 $oldURLText = $db->escapeString( $oldURL );
00274 $sql = "DELETE FROM ezurlalias
00275 WHERE
00276 source_url = '$oldURLText' AND
00277 forward_to_id != 0";
00278 $db->query( $sql );
00279 }
00280
00281
00282
00283
00284
00285
00286
00287 function updateForwardID( $newForwardID, $oldForwardID )
00288 {
00289 $db =& eZDB::instance();
00290 $oldForwardIDText = $db->escapeString( $oldForwardID );
00291 $newForwardIDText = $db->escapeString( $newForwardID );
00292 $sql = "UPDATE ezurlalias
00293 SET
00294 forward_to_id = '$newForwardIDText'
00295 WHERE
00296 forward_to_id = '$oldForwardIDText'";
00297
00298 $db->query( $sql );
00299 }
00300
00301
00302
00303
00304
00305 function fetch( $id, $asObject = true )
00306 {
00307 return eZPersistentObject::fetchObject( eZURLAlias::definition(),
00308 null,
00309 array( "id" => $id ),
00310 $asObject );
00311 }
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321 function fetchBySourceURL( $url, $isInternal = true, $asObject = true, $noForwardID = true )
00322 {
00323 $url = eZURLAlias::cleanURL( $url );
00324 $conditions = array( "source_url" => $url,
00325 'is_wildcard' => 0,
00326 'is_internal' => ($isInternal ? 1 : 0) );
00327 if ( $noForwardID )
00328 $conditions['forward_to_id'] = 0;
00329 return eZPersistentObject::fetchObject( eZURLAlias::definition(),
00330 null,
00331 $conditions,
00332 $asObject );
00333 }
00334
00335
00336
00337
00338
00339
00340
00341 function fetchByDestinationURL( $url, $isInternal = true, $asObject = true )
00342 {
00343 $url = eZURLAlias::cleanURL( $url );
00344 return eZPersistentObject::fetchObject( eZURLAlias::definition(),
00345 null,
00346 array( "destination_url" => $url,
00347 'forward_to_id' => 0,
00348 'is_wildcard' => 0,
00349 'is_internal' => ($isInternal ? 1 : 0) ),
00350 $asObject );
00351 }
00352
00353
00354
00355
00356
00357 function fetchByOffset( $offset, $limit, $asObject = true )
00358 {
00359 return eZPersistentObject::fetchObjectList( eZURLAlias::definition(),
00360 null,
00361 array( "is_internal" => 0 ),
00362 null,
00363 array( 'offset' => $offset, 'length' => $limit ),
00364 $asObject );
00365 }
00366
00367
00368
00369
00370
00371 function fetchWildcards( $asObject = true )
00372 {
00373 return eZPersistentObject::fetchObjectList( eZURLAlias::definition(),
00374 null,
00375 array( "is_wildcard" => array( array( EZ_URLALIAS_WILDCARD_TYPE_FORWARD, EZ_URLALIAS_WILDCARD_TYPE_DIRECT ) ) ),
00376 null,
00377 null,
00378 $asObject );
00379 }
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390 function cacheInfo()
00391 {
00392 $cacheDir = eZSys::cacheDirectory();
00393 $ini =& eZINI::instance();
00394 $keys = array( 'implementation' => $ini->variable( 'DatabaseSettings', 'DatabaseImplementation' ),
00395 'server' => $ini->variable( 'DatabaseSettings', 'Server' ),
00396 'database' => $ini->variable( 'DatabaseSettings', 'Database' ) );
00397 $wildcardKey = md5( implode( "\n", $keys ) );
00398 $wildcardCacheDir = "$cacheDir/wildcard";
00399 $wildcardCacheFile = "wildcard_$wildcardKey.php";
00400 $wildcardCachePath = "$wildcardCacheDir/$wildcardCacheFile";
00401 return array( 'dir' => $wildcardCacheDir,
00402 'file' => $wildcardCacheFile,
00403 'path' => $wildcardCachePath,
00404 'keys' => $keys );
00405 }
00406
00407
00408
00409
00410
00411 function cacheInfoDirectories( &$wildcardCacheDir, &$wildcardCacheFile, &$wildcardCachePath, &$wildcardKeys )
00412 {
00413 $info = eZURLAlias::cacheInfo();
00414 $wildcardCacheDir = $info['dir'];
00415 $wildcardCacheFile = $info['file'];
00416 $wildcardCachePath = $info['path'];
00417 $wildcardKeys = $info['keys'];
00418 }
00419
00420
00421
00422
00423
00424 function createWildcardMatches()
00425 {
00426 eZURLAlias::cacheInfoDirectories( $wildcardCacheDir, $wildcardCacheFile, $wildcardCachePath, $wildcardKeys );
00427 if ( !file_exists( $wildcardCacheDir ) )
00428 {
00429 eZDir::mkdir( $wildcardCacheDir, eZDir::directoryPermission(), true );
00430 }
00431
00432
00433
00434 include_once( 'lib/ezutils/classes/ezphpcreator.php' );
00435 $phpCache = new eZPHPCreator( $wildcardCacheDir, $wildcardCacheFile, '', array( 'clustering' => 'wirldcard-cache' ) );
00436
00437 foreach ( $wildcardKeys as $wildcardKey => $wildcardKeyValue )
00438 {
00439 $phpCache->addComment( "$wildcardKey = $wildcardKeyValue" );
00440 }
00441 $phpCache->addSpace();
00442
00443 $phpCode = "function " . EZURLALIAS_CACHE_FUNCTION . "( &\$uri, &\$urlAlias )\n{\n";
00444
00445 $wildcards = eZURLAlias::fetchWildcards();
00446 $counter = 0;
00447 foreach ( $wildcards as $wildcard )
00448 {
00449 $matchWilcard = $wildcard->attribute( 'source_url' );
00450 $matchWilcardList = explode( "*", $matchWilcard );
00451 $matchWildcardCount = count( $matchWilcardList ) - 1;
00452 $regexpList = array();
00453 foreach ( $matchWilcardList as $matchWilcardItem )
00454 {
00455 $regexpList[] = preg_quote( $matchWilcardItem, '#' );
00456 }
00457 $matchRegexp = implode( '(.*)', $regexpList );
00458
00459 $replaceWildcard = $wildcard->attribute( 'destination_url' );
00460 $replaceWildcardList = preg_split( "#{([0-9]+)}#", $replaceWildcard, false, PREG_SPLIT_DELIM_CAPTURE );
00461 $regexpList = array();
00462 $replaceCounter = 0;
00463 $replaceCode = "\$uri = ";
00464 foreach ( $replaceWildcardList as $replaceWildcardItem )
00465 {
00466 if ( $replaceCounter > 0 )
00467 $replaceCode .= " . ";
00468 if ( ( $replaceCounter % 2 ) == 0 )
00469 {
00470 $replaceWildcardItemText = $phpCache->variableText( $replaceWildcardItem, 0 );
00471 $replaceCode .= "$replaceWildcardItemText";
00472 }
00473 else
00474 {
00475 $replaceCode .= "\$matches[$replaceWildcardItem]";
00476 }
00477 ++$replaceCounter;
00478 }
00479 $replaceRegexp = implode( '', $regexpList );
00480
00481 $wildcardArray = $wildcard->asArray();
00482
00483 $phpCode .= " ";
00484 $phpCode .= "if ( preg_match( \"#^$matchRegexp#\", \$uri, \$matches ) )\n {\n";
00485 $phpCode .= " $replaceCode;\n";
00486 $phpCode .= " \$urlAlias = " . $phpCache->variableText( $wildcardArray, 8 + 12, 0, false ) . ";\n";
00487 $phpCode .= " return true;\n";
00488 $phpCode .= " }\n";
00489
00490 ++$counter;
00491 }
00492 $phpCode .= " return false;\n";
00493
00494 $phpCode .= "}\n";
00495
00496 $phpCache->addCodePiece( $phpCode );
00497 $phpCache->store( true );
00498 }
00499
00500
00501
00502
00503 function &isWildcardExpired( $timestamp )
00504 {
00505 $retVal = false;
00506 include_once( 'lib/ezutils/classes/ezexpiryhandler.php' );
00507 $handler =& eZExpiryHandler::instance();
00508 if ( !$handler->hasTimestamp( 'urlalias-wildcard' ) )
00509 return $retVal;
00510 $expiryTime = $handler->timestamp( 'urlalias-wildcard' );
00511 if ( $expiryTime > $timestamp )
00512 $retVal = true;
00513 return $retVal;
00514 }
00515
00516
00517
00518
00519
00520 function expireWildcards()
00521 {
00522 include_once( 'lib/ezutils/classes/ezexpiryhandler.php' );
00523 $handler =& eZExpiryHandler::instance();
00524 $handler->setTimestamp( 'urlalias-wildcard', mktime() );
00525 $handler->store();
00526 }
00527
00528
00529
00530
00531
00532
00533
00534 function &translateByWildcard( &$uri, $reverse = false )
00535 {
00536 if ( get_class( $uri ) == "ezuri" )
00537 {
00538 $uriString = $uri->elements();
00539 }
00540 else
00541 {
00542 $uriString = $uri;
00543 }
00544 $uriString = eZURLAlias::cleanURL( $uriString );
00545
00546 $info = eZURLAlias::cacheInfo();
00547 $hasCache = false;
00548 $isExpired = true;
00549 $return = false;
00550
00551
00552
00553 require_once( 'kernel/classes/ezclusterfilehandler.php' );
00554 $cacheFile = eZClusterFileHandler::instance( $info['path'] );
00555
00556 if ( $cacheFile->exists() )
00557 {
00558 $timestamp = $cacheFile->mtime();
00559 $isExpired = eZURLAlias::isWildcardExpired( $timestamp );
00560 $hasCache = true;
00561 }
00562 if ( $isExpired )
00563 {
00564 eZURLAlias::createWildcardMatches();
00565 $hasCache = true;
00566 }
00567 if ( $hasCache )
00568 {
00569
00570
00571 $fetchedFilePath = $cacheFile->fetchUnique();
00572 include_once( $fetchedFilePath );
00573 $cacheFile->fileDeleteLocal( $fetchedFilePath );
00574
00575 $hasCache = false;
00576 if ( function_exists( EZURLALIAS_CACHE_FUNCTION ) )
00577 {
00578 $hasCache = true;
00579 $function = EZURLALIAS_CACHE_FUNCTION;
00580 $hasTranslated = false;
00581 $url = false;
00582 $ini =& eZINI::instance();
00583 $maxIterationCount = $ini->variable( 'URLTranslator', 'MaximumWildcardIterations' );
00584 $iteration = 0;
00585 while ( $function( $uriString, $urlAlias ) )
00586 {
00587 $hasTranslated = true;
00588 $url = eZURLAlias::fetchBySourceURL( $uriString, true, true, false );
00589 if ( $url )
00590 break;
00591 ++$iteration;
00592 if ( $iteration >= $maxIterationCount )
00593 break;
00594 }
00595 if ( $hasTranslated )
00596 {
00597 if ( $urlAlias['is_wildcard'] == EZ_URLALIAS_WILDCARD_TYPE_FORWARD )
00598 {
00599 if ( !$url )
00600 $url = eZURLAlias::fetchBySourceURL( $uriString, true, true, false );
00601 if ( $url and $url->attribute( 'forward_to_id' ) != 0 )
00602 {
00603
00604 $return = eZURLAlias::fetch( $url->attribute( 'forward_to_id' ) );
00605 $uriString = 'error/301';
00606 }
00607 else if ( $url )
00608 {
00609
00610 $return =& $url;
00611 $uriString = 'error/301';
00612 }
00613 }
00614 else if ( $urlAlias['is_wildcard'] == EZ_URLALIAS_WILDCARD_TYPE_DIRECT )
00615 {
00616 if ( !$url )
00617 $url = eZURLAlias::fetchBySourceURL( $uriString, true, true, false );
00618 if ( $url and $url->attribute( 'forward_to_id' ) != 0 )
00619 {
00620
00621 $url = eZURLAlias::fetch( $url->attribute( 'forward_to_id' ) );
00622 $uriString = $url->attribute( 'destination_url' );
00623 $return = true;
00624 }
00625 else if ( $url )
00626 {
00627
00628 $uriString = $url->attribute( 'destination_url' );
00629 $return = true;
00630 }
00631 }
00632 }
00633 }
00634 }
00635 if ( !$hasCache )
00636 {
00637 $return = false;
00638 return $return;
00639 }
00640
00641 if ( get_class( $uri ) == "ezuri" )
00642 {
00643 $uri->setURIString( $uriString, false );
00644 }
00645 else
00646 {
00647 $uri = $uriString;
00648 }
00649 return $return;
00650 }
00651
00652
00653
00654
00655
00656 function &totalCount( )
00657 {
00658 $db =& eZDB::instance();
00659 $query = "SELECT count(id) AS count
00660 FROM ezurlalias
00661 WHERE is_internal = 0";
00662 $res = $db->arrayQuery( $query );
00663 return $res[0]['count'];
00664 }
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681 function convertToAlias( $urlElement, $defaultValue = false )
00682 {
00683 include_once( 'lib/ezi18n/classes/ezchartransform.php' );
00684 $trans =& eZCharTransform::instance();
00685
00686 $urlElement = $trans->transformByGroup( $urlElement, 'urlalias' );
00687 if ( strlen( $urlElement ) == 0 )
00688 {
00689 if ( $defaultValue === false )
00690 $urlElement = '_1';
00691 else
00692 {
00693 $urlElement = $defaultValue;
00694 $urlElement = $trans->transformByGroup( $urlElement, 'urlalias' );
00695 }
00696 }
00697 return $urlElement;
00698 }
00699
00700
00701
00702
00703
00704
00705
00706
00707 function convertPathToAlias( $pathURL )
00708 {
00709 $result = array();
00710
00711 $elements = explode( '/', $pathURL );
00712
00713 foreach ( $elements as $element )
00714 {
00715 $element = eZURLAlias::convertToAlias( $element );
00716 $result[] = $element;
00717 }
00718
00719 return implode( '/', $result );
00720 }
00721
00722
00723
00724
00725
00726
00727
00728 function translate( &$uri, $reverse = false )
00729 {
00730 if ( get_class( $uri ) == "ezuri" )
00731 {
00732 $uriString = $uri->elements();
00733 }
00734 else
00735 {
00736 $uriString = $uri;
00737 }
00738 $uriString = eZURLAlias::cleanURL( $uriString );
00739 $internalURIString = $uriString;
00740
00741 if ( isset( $GLOBALS['eZURLAliasTranslate'][$uriString] ) )
00742 {
00743 $uri = $GLOBALS['eZURLAliasTranslate'][$uriString]['uri'];
00744 return $GLOBALS['eZURLAliasTranslate'][$uriString]['return'];
00745 }
00746
00747 $originalURIString = $uriString;
00748
00749 $ini =& eZIni::instance();
00750 if ( $ini->hasVariable( 'SiteAccessSettings', 'PathPrefix' ) &&
00751 $ini->variable( 'SiteAccessSettings', 'PathPrefix' ) != '' )
00752 {
00753 $prefix = $ini->variable( 'SiteAccessSettings', 'PathPrefix' );
00754
00755 if ( !preg_match( "#^$prefix(/.*)?$#", $uriString ) )
00756 {
00757 $exclude = $ini->hasVariable( 'SiteAccessSettings', 'PathPrefixExclude' )
00758 ? $ini->variable( 'SiteAccessSettings', 'PathPrefixExclude' )
00759 : false;
00760 $breakInternalURI = false;
00761 foreach ( $exclude as $item )
00762 {
00763 if ( preg_match( "#^$item(/.*)?$#", $uriString ) )
00764 {
00765 $breakInternalURI = true;
00766 break;
00767 }
00768 }
00769
00770
00771 $urlAliasObject = eZURLAlias::fetchBySourceURL( $uriString, false, false );
00772 if ( $urlAliasObject )
00773 $breakInternalURI = true;
00774
00775 if ( !$breakInternalURI )
00776 $internalURIString = eZUrlAlias::cleanURL( eZUrlAlias::cleanURL( $prefix ) . '/' . $uriString );
00777 }
00778 }
00779
00780 $db =& eZDB::instance();
00781 if ( $reverse )
00782 {
00783 $query = "SELECT source_url as destination_url, forward_to_id
00784 FROM ezurlalias
00785 WHERE destination_url = '" . $db->escapeString( $internalURIString ) . "' AND
00786 forward_to_id = 0 AND
00787 is_wildcard = 0
00788 ORDER BY forward_to_id ASC";
00789 }
00790 else
00791 {
00792 $query = "SELECT destination_url, forward_to_id
00793 FROM ezurlalias
00794 WHERE source_md5 = '" . md5( $internalURIString ) . "' AND
00795 is_wildcard = 0
00796 ORDER BY forward_to_id ASC, is_internal ASC";
00797 }
00798
00799 $return = false;
00800 $urlAliasArray = $db->arrayQuery( $query, array( 'limit' => 1 ) );
00801 if ( count( $urlAliasArray ) > 0 )
00802 {
00803 $uriString = $urlAliasArray[0]['destination_url'];
00804 if ( $uriString == '' )
00805 $uriString = '/';
00806
00807 if ( $urlAliasArray[0]['forward_to_id'] == -1 )
00808 {
00809 $uriString = 'error/301';
00810
00811 $return = $urlAliasArray[0]['destination_url'];
00812 }
00813 else if ( $urlAliasArray[0]['forward_to_id'] != 0 )
00814 {
00815 $uriString = 'error/301';
00816
00817 $return = eZURLAlias::fetch( $urlAliasArray[0]['forward_to_id'] );
00818 }
00819 else
00820 {
00821 $return = true;
00822 }
00823 }
00824
00825 if ( get_class( $uri ) == "ezuri" )
00826 {
00827 $uri->setURIString( $uriString, false );
00828 }
00829 else
00830 {
00831 $uri = $uriString;
00832 }
00833
00834 $GLOBALS['eZURLAliasTranslate'][$originalURIString] = array( 'return' => $return,
00835 'uri' => $uri );
00836
00837 return $return;
00838 }
00839
00840
00841
00842
00843
00844
00845 function cleanURL( $url )
00846 {
00847 return trim( $url, '/ ' );
00848 }
00849 }
00850
00851 ?>