MediaWiki  REL1_20
WikiMap.php
Go to the documentation of this file.
00001 <?php
00026 class WikiMap {
00027 
00034         public static function getWiki( $wikiID ) {
00035                 global $wgConf;
00036 
00037                 $wgConf->loadFullData();
00038 
00039                 list( $major, $minor ) = $wgConf->siteFromDB( $wikiID );
00040                 if( $major === null ) {
00041                         return null;
00042                 }
00043                 $canonicalServer = $wgConf->get( 'wgCanonicalServer', $wikiID, $major,
00044                         array( 'lang' => $minor, 'site' => $major ) );
00045                 $server = $wgConf->get( 'wgServer', $wikiID, $major,
00046                         array( 'lang' => $minor, 'site' => $major ) );
00047                 $path = $wgConf->get( 'wgArticlePath', $wikiID, $major,
00048                         array( 'lang' => $minor, 'site' => $major ) );
00049                 return new WikiReference( $major, $minor, $canonicalServer, $path, $server );
00050         }
00051 
00059         public static function getWikiName( $wikiID ) {
00060                 $wiki = WikiMap::getWiki( $wikiID );
00061 
00062                 if ( $wiki ) {
00063                         return $wiki->getDisplayName();
00064                 }
00065                 return $wikiID;
00066         }
00067 
00076         public static function foreignUserLink( $wikiID, $user, $text=null ) {
00077                 return self::makeForeignLink( $wikiID, "User:$user", $text );
00078         }
00079 
00088         public static function makeForeignLink( $wikiID, $page, $text=null ) {
00089                 if ( !$text ) {
00090                         $text = $page;
00091                 }
00092 
00093                 $url = self::getForeignURL( $wikiID, $page );
00094                 if ( $url === false ) {
00095                         return false;
00096                 }
00097 
00098                 return Linker::makeExternalLink( $url, $text );
00099         }
00100 
00108         public static function getForeignURL( $wikiID, $page ) {
00109                 $wiki = WikiMap::getWiki( $wikiID );
00110 
00111                 if ( $wiki ) {
00112                         return $wiki->getFullUrl( $page );
00113                 }
00114 
00115                 return false;
00116         }
00117 }
00118 
00122 class WikiReference {
00123         private $mMinor; 
00124         private $mMajor; 
00125         private $mCanonicalServer; 
00126         private $mServer; 
00127         private $mPath;   
00128 
00136         public function __construct( $major, $minor, $canonicalServer, $path, $server = null ) {
00137                 $this->mMajor = $major;
00138                 $this->mMinor = $minor;
00139                 $this->mCanonicalServer = $canonicalServer;
00140                 $this->mPath = $path;
00141                 $this->mServer = $server === null ? $canonicalServer : $server;
00142         }
00143 
00148         public function getHostname() {
00149                 $prefixes = array( 'http://', 'https://' );
00150                 foreach ( $prefixes as $prefix ) {
00151                         if ( substr( $this->mCanonicalServer, 0, strlen( $prefix ) ) ) {
00152                                 return substr( $this->mCanonicalServer, strlen( $prefix ) );
00153                         }
00154                 }
00155                 throw new MWException( "Invalid hostname for wiki {$this->mMinor}.{$this->mMajor}" );
00156         }
00157 
00164         public function getDisplayName() {
00165                 $url = $this->getUrl( '' );
00166                 $parsed = wfParseUrl( $url );
00167                 if ( $parsed ) {
00168                         return $parsed['host'];
00169                 } else {
00170                         // Invalid URL. There's no sane thing to do here, so just return it
00171                         return $url;
00172                 }
00173         }
00174 
00182         private function getLocalUrl( $page ) {
00183                 return str_replace( '$1', wfUrlEncode( str_replace( ' ', '_', $page ) ), $this->mPath );
00184         }
00185 
00192         public function getCanonicalUrl( $page ) {
00193                 return $this->mCanonicalServer . $this->getLocalUrl( $page );
00194         }
00195 
00200         public function getCanonicalServer() {
00201                 return $this->mCanonicalServer;
00202         }
00203 
00209         public function getUrl( $page ) {
00210                 return $this->getCanonicalUrl( $page );
00211         }
00212 
00220         public function getFullUrl( $page ) {
00221                 return
00222                         $this->mServer .
00223                         $this->getLocalUrl( $page );
00224         }
00225 }