MediaWiki
REL1_20
|
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 }