Difference between revisions of "Extension:WikiaInfo.php"

From Organic Design wiki
m (sortkey)
(move to svn)
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
<?php
+
{{svn|extensions|WikiaInfo/WikiaInfo.php}}
# Extension:WikiaInfo{{Category:Extensions|WikiaInfo}}{{php}}{{Category:Extensions created with Template:SpecialPage|WikiaInfo}}{{Category:OD2}}
 
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
 
# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
 
# - Started: 2007-08-27
 
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
 
 
define('WIKIAINFO_VERSION','1.0.3, 2007-09-26');
 
 
$wgExtensionFunctions[] = 'wfSetupWikiaInfo';
 
 
$wgExtensionCredits['specialpage'][] = array(
 
'name'        => 'Special:WikiaInfo',
 
'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
 
'description' => 'List the currently running wikia and the domains pointing to them',
 
'url'        => 'http://www.organicdesign.co.nz/Extension:WikiaInfo.php',
 
'version'    => WIKIAINFO_VERSION
 
);
 
 
require_once "$IP/includes/SpecialPage.php";
 
 
# Define a new class based on the SpecialPage class
 
class SpecialWikiaInfo extends SpecialPage {
 
 
# Constructor
 
function SpecialWikiaInfo() {
 
SpecialPage::SpecialPage('WikiaInfo','sysop',true,false,false,false);
 
}
 
 
# Override SpecialPage::execute()
 
function execute() {
 
global $wgOut;
 
$this->setHeaders();
 
$wgOut->addWikiText("=== Currently Installed Wikia ===\n");
 
 
 
# Get the inode numbers of the mediawiki code-bases
 
$codebases = array();
 
$handle  = opendir('/var/www');
 
while (false !== ($codebase = readdir($handle))) {
 
if (ereg('^mediawiki-(.+)$',$codebase,$ver)) {
 
$stat = stat("/var/www/$codebase");
 
$codebases[$stat[1]] = $ver[1];
 
}
 
}
 
closedir($handle);
 
 
 
# Get list of domain symlinks by inode
 
$domains = array();
 
$dir    = $GLOBALS['domains'];
 
$handle  = opendir($dir);
 
while (false !== ($link = readdir($handle))) {
 
if (!ereg('^\\.',$link)) {
 
$stat  = stat("$dir/$link");
 
$inode = $stat[1];
 
if (is_array($domains[$inode])) $domains[$inode][] = $link;
 
else $domains[$inode] = array($link);
 
}
 
}
 
closedir($handle);
 
 
 
# Loop through settings files associating with domains
 
$wikia  = array();
 
$dir    = $GLOBALS['settings'];
 
$handle = opendir($dir);
 
while (false !== ($file = readdir($handle))) {
 
$stat  = stat("$dir/$file");
 
$inode = $stat[1];
 
if (!ereg('^\\.',$file)) $wikia[$file] = $domains[$inode];
 
}
 
closedir($handle);
 
ksort($wikia);
 
 
 
# Render the list (don't show naked domains if a www also exists)
 
$table = "{{#tree:openlevels=1\n";
 
foreach ($wikia as $file => $domains) {
 
if (is_array($domains)) {
 
$stat  = stat("$dir/$file/wiki");
 
$ver    = $codebases[$stat[1]];
 
$table .= "*'''$file''' ($ver)\n";
 
$table .= "**[[$file/LocalSettings.php|LocalSettings.php]]\n";
 
sort($domains);
 
foreach ($domains as $domain) if (!in_array("www.$domain",$domains)) {
 
$wiki = "http://$domain/wiki/index.php?title";
 
$table .= "**[http://$domain $domain]\n";
 
$table .= "***[$wiki=Special:Recentchanges Recent changes]\n";
 
$table .= "***[$wiki=Special:Version Version]\n";
 
$table .= "***[$wiki=Special:Statistics Statistics]\n";
 
}
 
}
 
}
 
$table .= "}}\n";
 
$wgOut->addWikiText($table);
 
 
 
}
 
 
}
 
 
# Called from $wgExtensionFunctions array when initialising extensions
 
function wfSetupWikiaInfo() {
 
global $wgLanguageCode,$wgMessageCache;
 
$wgMessageCache->addMessages(array('wikiainfo' => 'Current Wikia Information'));
 
SpecialPage::addPage(new SpecialWikiaInfo());
 
}
 
?>
 

Latest revision as of 03:27, 12 September 2009

Info.svg This code is in our Git repository here.

Note: If there is no information in this page about this code and it's a MediaWiki extension, there may be something at mediawiki.org.