setHeaders(); $langlist = array_map( 'trim', file( '/home/wikipedia/common/langlist' ) ); sort( $langlist ); $xLanglist = array_flip( $langlist ); $sites = array( 'wiki', 'wiktionary', 'wikibooks', 'wikiquote' ); $names = array( 'wiki' => 'Wikipedia
w', 'wiktionary' => 'Wiktionary
wikt', 'wikibooks' => 'Wikibooks
b', 'wikiquote' => 'Wikiquote
q' ); $hosts = array( 'wiki' => 'wikipedia.org', 'wiktionary' => 'wiktionary.org', 'wikibooks' => 'wikibooks.org', 'wikiquote' => 'wikiquote.org' ); # Tabulate the matrix $specials = array(); $matrix = array(); foreach( $wgLocalDatabases as $db ) { # Find suffix foreach ( $sites as $site ) { if ( preg_match( "/(.*)$site\$/", $db, $m ) ) { $lang = $m[1]; if ( empty( $xLanglist[$lang] ) && $site == 'wiki' ) { $specials[] = $lang; } else { $matrix[$site][$lang] = 1; } break; } } } # Construct the HTML # Header row $s = ""; foreach ( $names as $name ) { $s .= ""; } $s .= "\n"; # Bulk of table foreach ( $langlist as $lang ) { $s .= ""; foreach ( $names as $site => $name ) { $url = "http://$lang." . $hosts[$site] . "/"; if ( empty( $matrix[$site][$lang] ) ) { # Non-existent wiki $s .= ""; } else { # Wiki exists $s .= ""; } } $s .= "\n"; } $s .= "
$name
$lang$lang
\n"; # Specials $s .= ""; $wgOut->addHTML( $s ); } } SpecialPage::addPage( new SiteMatrixPage ); global $wgMessageCache; $wgMessageCache->addMessage( "sitematrix", "List of Wikimedia wikis" ); } # End of extension function ?>