From OrganicDesign Wiki
(Redirected from
Wikia.php)
<?php
#
if (!defined('MEDIAWIKI')) die('Not an entry point.');
ini_set('memory_limit', '64M');
# Constants
define('WIKIA_VERSION', '0.0.6, 2008-10-17');
define('NS_TREE', 100);
define('NS_EXTENSION', 1000);
define('NS_PUBLICREVISION', 1002);
define('NS_CONFIG', 1004);
define('NS_QUERY', 1006);
define('NS_WORKFLOW', 1008);
define('NS_PORTAL', 1010);
define('NS_CREATE', 1014);
define('NS_SYSOP', 1016);
define('NS_MEMBER', 1018);
# Namespaces
$wgExtraNamespaces[NS_EXTENSION] = 'Extension';
$wgExtraNamespaces[NS_EXTENSION+1] = 'Extension_talk';
$wgExtraNamespaces[NS_CONFIG] = 'Config';
$wgExtraNamespaces[NS_CONFIG+1] = 'Config_talk';
$wgExtraNamespaces[NS_QUERY] = 'Query';
$wgExtraNamespaces[NS_QUERY+1] = 'Query_talk';
$wgExtraNamespaces[NS_WORKFLOW] = 'Workflow';
$wgExtraNamespaces[NS_WORKFLOW+1] = 'Workflow_talk';
$wgExtraNamespaces[NS_PORTAL] = 'Portal';
$wgExtraNamespaces[NS_PORTAL+1] = 'Portal_talk';
$wgExtraNamespaces[NS_TREE] = 'Tree';
$wgExtraNamespaces[NS_TREE+1] = 'Tree_talk';
$wgExtraNamespaces[NS_CREATE] = 'Create';
$wgExtraNamespaces[NS_CREATE+1] = 'Create_talk';
$wgExtraNamespaces[NS_SYSOP] = 'Admin';
$wgExtraNamespaces[NS_SYSOP+1] = 'Admin_talk';
$wgExtraNamespaces[NS_MEMBER] = 'Member';
$wgExtraNamespaces[NS_MEMBER+1] = 'Member_talk';
# Default globals defined before specific LocalSettings inclusion
$wgArticlePath = '/$1';
$wgScriptPath = '/wiki';
$wgUseDatabaseMessages = true;
$wgAllowDisplayTitle = true;
$wgAllowPageInfo = true;
$wgDBuser = '******';
$wgDBpassword = '******';
$wgTruncatedCommentLength = 50;
$wgVerifyMimeType = false;
$wgUseSiteJs = true;
$wgUseTeX = true;
$wgSVGConverter = 'rsvg';
$wgRewriteRule = 'Friendly'; # rewrite.pl URL transformation function name
$wgSiteDown = false;
# File upload settings
$wgEnableUploads = true;
$wgAllowCopyUploads = true;
$wgUploadPath = '/files';
$wgFileExtensions = array('jpeg', 'jpg', 'png', 'gif', 'svg', 'swf', 'pdf', 'zip', '7z', 'xls', 'ods', 'doc', 'mm');
$wgGroupPermissions['sysop']['upload_by_url'] = true;
# Global wikia configuration
$settings = '/var/www/wikis';
$domains = '/var/www/domains';
$extensions = dirname(__FILE__);
# Check if the request is from command line for running maintenance scripts
if ($wgCommandLineMode) {
$admin = file_get_contents("$IP/AdminSettings.php");
if (preg_match('/^\\s*\\$domain\\s*=\\s*[\'"](.+?)["\'];/m',$admin,$m)) $domain = $m[1];
$root = "$domains/$domain";
}
else {
$domain = ereg_replace('^(www\\.|wiki\\.)','',$_SERVER['SERVER_NAME']);
$root = $_SERVER['DOCUMENT_ROOT'] = $_SERVER['DOCUMENT_ROOT']."/$domain";
$domain = $_SERVER['SERVER_NAME'];
}
# Add google analytics code
$wgExtensionFunctions[] = 'wfGoogleAnalytics';
$wgGoogleTrackingCodes = array();
function wfGoogleAnalytics() {
global $wgOut, $wgGoogleTrackingCodes;
foreach ($wgGoogleTrackingCodes as $code) $wgOut->addScript('<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
</script><script type="text/javascript">
var pageTracker = _gat._getTracker("'.$code.'");
pageTracker._trackPageview();</script>');
}
# Include the LocalSettings file for the domain
$wgUploadDirectory = "$root$wgUploadPath";
include("$root/LocalSettings.php");
# Display a maintenance page if $wgSiteDown set (unless request is from command line)
if ($wgSiteDown && !$wgCommandLineMode) {
while(@ob_end_clean());
$msg = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>Down for maintenance</title></head>
<body bgcolor="white"><table width="100%"><tr><td align="center">
<img border="0" src="http://www.organicdesign.co.nz/files/9/9c/Cone.png" style="padding-top:100px"/><br>
<div style="font-family:sans;font-weight:bold;color:#89a;font-size:16pt;padding-top:25px">
'.$wgSitename.' is temporarily down for maintenance,<br><br><small>please try again soon.</small>
</div></td></tr></table></body></html>';
if (in_array('Content-Encoding: gzip', headers_list())) $msg = gzencode($msg);
echo $msg;
die;
}
# Post LocalSettings globals
$wgUploadDirectory = $_SERVER['DOCUMENT_ROOT']."$wgUploadPath"; # allows wiki's settings to change images location
$wgLocalInterwiki = $wgSitename;
# Include a special page for listing current wikia and their domains
if (ereg('organicdesign.co.nz', $domain)) include('extensions/SpecialWikiaInfo.php');
# Map naked URL to different articles depending on domain
function domainRedirect($list) {
if (basename($_SERVER['SCRIPT_FILENAME']) !== 'index.php') return;
$d = $_SERVER['SERVER_NAME'];
$t = $_REQUEST['title'];
if (empty($t)) $t = ereg_replace('^/', '', $_SERVER['PATH_INFO']);
if (empty($t) || $t == 'Main_Page')
foreach ($list as $regexp => $title)
if (ereg($regexp, $d)) header("Location: $wgServer/$title") && die;
}
# Block problem users, bots and requests
$wgExtensionFunctions[] = 'LogActivity';
function LogActivity() {
global $wgUser, $wgShortName, $wgRequest;
$user = $wgUser->getUserPage()->getText();
$sesh = ereg('_session=([0-9a-z]+)', isset($_SERVER['HTTP_COOKIE']) ? $_SERVER['HTTP_COOKIE'] : '', $m) ? $m[1] : '';
if ($sesh) $user .= ":$sesh";
if (!$wgUser->isAnon()) $user .= ':'.$_SERVER['REMOTE_ADDR'];
$url = $_SERVER['REQUEST_URI'];
if ($wgRequest->wasPosted()) {
$post = array();
foreach ($wgRequest->getValues() as $k => $v) {
if (strlen($v) > 10) $v = substr($v, 0, 10).'...';
$v = urlencode($v);
$post[] = "$k=$v";
}
$post = join(',', $post);
$url = '/'.$wgRequest->getText('title')." (POST:$post)";
}
$block = '';
# IP/User based blocks
$list = array( # nslookup on ipaddresses;
'148.243.232.98', # Bot attempting shell hacks
);
foreach($list as $i) if ($block == '' and ereg($i, $user)) $block .= '(ip-block)';
# Session-based blocks
if (
$sesh == '2297d58013571cb3a6adddb9c5e3c36f'
|| $sesh == '0bbf7493262a75e3258c8da11a303296'
) $block .= '(sesh-block)';
# Silently block requests
if (eregi('(favicon|robots.txt|action=rawxxx)', $url)) return;
# Write log entry
$handle = fopen("/var/www/activity.log", "a");
fwrite($handle,date('Y-m-d H:i:s')." ($wgShortName)($user)$block: $url\n");
#if ($block) { sleep(1); die; }
}