wiki.techinc.nl/extensions/SiteMatrix.php

102 lines
2.4 KiB
PHP

<?php
# Make an HTML table showing all the wikis on the site
# Not a valid entry point, skip unless MEDIAWIKI is defined
if (defined('MEDIAWIKI')) {
$wgExtensionFunctions[] = "wfSiteMatrix";
function wfSiteMatrix() {
global $IP;
require_once( "$IP/includes/SpecialPage.php" );
class SiteMatrixPage extends SpecialPage
{
function SiteMatrixPage() {
SpecialPage::SpecialPage("SiteMatrix");
}
function execute( $par ) {
global $wgRequest, $wgOut, $wgTitle, $wgLocalDatabases;
$this->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<br />w',
'wiktionary' => 'Wiktionary<br />wikt',
'wikibooks' => 'Wikibooks<br />b',
'wikiquote' => 'Wikiquote<br />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 = "<table><tr>";
foreach ( $names as $name ) {
$s .= "<td><strong>$name</strong></td>";
}
$s .= "</tr>\n";
# Bulk of table
foreach ( $langlist as $lang ) {
$s .= "<tr>";
foreach ( $names as $site => $name ) {
$url = "http://$lang." . $hosts[$site] . "/";
if ( empty( $matrix[$site][$lang] ) ) {
# Non-existent wiki
$s .= "<td><a href=\"$url\" class=\"new\">$lang</a></td>";
} else {
# Wiki exists
$s .= "<td><a href=\"$url\">$lang</a></td>";
}
}
$s .= "</tr>\n";
}
$s .= "</table>\n";
# Specials
$s .= "<ul>";
foreach ( $specials as $lang ) {
$s .= "<li><a href=\"http://$lang.wikipedia.org/\">$lang</a></li>\n";
}
$s .= "</ul>";
$wgOut->addHTML( $s );
}
}
SpecialPage::addPage( new SiteMatrixPage );
global $wgMessageCache;
$wgMessageCache->addMessage( "sitematrix", "List of Wikimedia wikis" );
} # End of extension function
} # End of invocation protection
?>