Interner Namespace für Mediawiki
Patch um unbekannte Namespaces zu verstecken
Index: includes/SpecialRecentchanges.php =================================================================== --- includes/SpecialRecentchanges.php (revision 18244) +++ includes/SpecialRecentchanges.php (working copy) @@ -17,6 +17,7 @@ global $wgUser, $wgOut, $wgRequest, $wgUseRCPatrol; global $wgRCShowWatchingUsers, $wgShowUpdatedMarker; global $wgAllowCategorizedRecentChanges ; + global $wgCanonicalNamespaceNames; $fname = 'wfSpecialRecentchanges'; # Get query parameters @@ -155,6 +156,7 @@ # Namespace filtering $hidem .= is_null( $namespace ) ? '' : ' AND rc_namespace' . ($invert ? '!=' : '=') . $namespace; + $hidem .= ' AND rc_namespace IN (0,'.join( ',', array_map( 'intval', array_keys($wgCanonicalNamespaceNames) ) ).')'; // This is the big thing! Index: includes/Revision.php =================================================================== --- includes/Revision.php (revision 18244) +++ includes/Revision.php (working copy) @@ -165,6 +165,8 @@ * @static */ private static function loadFromConds( &$db, $conditions ) { + global $wgCanonicalNamespaceNames; + array_push( $conditions, 'page_namespace IN (0,'.join( ',', array_map( 'intval', array_keys($wgCanonicalNamespaceNames) ) ).')' ); $res = Revision::fetchFromConds( $db, $conditions ); if( $res ) { $row = $res->fetchObject();
Erstellen einer Kopie von index.php für den internen Bereich
In dieser Kopie fügt man lediglich ein require für die LocalSettings des internen Bereichs hinzu
--- index.php 2006-11-14 15:52:25.000000000 +0000 +++ index_intern.php 2006-11-23 22:32:14.000000000 +0000 @@ -2,6 +2,7 @@ # Initialise common code require_once( './includes/WebStart.php' ); +require_once( 'LocalSettingsIntern.php' ); # Initialize MediaWiki base class require_once( "includes/Wiki.php" );
LocalSettingsIntern.php
Das ist die Konfiguration des internen Bereiches. Da die normale LocalSettings.php auch includet wird, brauchen nur Sachen reingeschrieben werden die im internen Bereich anders sein sollen.
<?php $wgExtraNamespaces = array( 100 => 'Intern', 101 => 'Intern_talk' ); $wgGroupPermissions = array(); // Implicit group for all visitors $wgGroupPermissions['*' ]['createaccount'] = false; $wgGroupPermissions['*' ]['read'] = false; $wgGroupPermissions['*' ]['edit'] = false; $wgGroupPermissions['*' ]['createpage'] = false; $wgGroupPermissions['*' ]['createtalk'] = false; // Implicit group for all logged-in accounts $wgGroupPermissions['user' ]['move'] = false; $wgGroupPermissions['user' ]['read'] = false; $wgGroupPermissions['user' ]['edit'] = false; $wgGroupPermissions['user' ]['createpage'] = false; $wgGroupPermissions['user' ]['createtalk'] = false; $wgGroupPermissions['user' ]['upload'] = false; $wgGroupPermissions['user' ]['reupload'] = false; $wgGroupPermissions['user' ]['reupload-shared'] = false; $wgGroupPermissions['user' ]['minoredit'] = false; // Implicit group for accounts that pass $wgAutoConfirmAge $wgGroupPermissions['autoconfirmed']['autoconfirmed'] = false; // Implicit group for accounts with confirmed email addresses // This has little use when email address confirmation is off $wgGroupPermissions['emailconfirmed']['emailconfirmed'] = false; // Users with bot privilege can have their edits hidden // from various log pages by default $wgGroupPermissions['bot' ]['bot'] = false; $wgGroupPermissions['bot' ]['autoconfirmed'] = false; $wgGroupPermissions['bot' ]['nominornewtalk'] = false; // Most extra permission abilities go to this group $wgGroupPermissions['sysop']['block'] = true; $wgGroupPermissions['sysop']['createaccount'] = true; $wgGroupPermissions['sysop']['delete'] = true; $wgGroupPermissions['sysop']['deletedhistory'] = true; // can view deleted history entries, but not see or restore the text $wgGroupPermissions['sysop']['editinterface'] = true; $wgGroupPermissions['sysop']['import'] = true; $wgGroupPermissions['sysop']['importupload'] = true; $wgGroupPermissions['sysop']['move'] = true; $wgGroupPermissions['sysop']['patrol'] = true; $wgGroupPermissions['sysop']['protect'] = true; $wgGroupPermissions['sysop']['proxyunbannable'] = true; $wgGroupPermissions['sysop']['rollback'] = true; $wgGroupPermissions['sysop']['trackback'] = true; $wgGroupPermissions['sysop']['upload'] = true; $wgGroupPermissions['sysop']['reupload'] = true; $wgGroupPermissions['sysop']['reupload-shared'] = true; $wgGroupPermissions['sysop']['unwatchedpages'] = true; $wgGroupPermissions['sysop']['autoconfirmed'] = true; $wgGroupPermissions['sysop']['upload_by_url'] = true; // Implicit group for all logged-in accounts $wgGroupPermissions['hacker' ]['move'] = true; $wgGroupPermissions['hacker' ]['read'] = true; $wgGroupPermissions['hacker' ]['edit'] = true; $wgGroupPermissions['hacker' ]['createpage'] = true; $wgGroupPermissions['hacker' ]['createtalk'] = true; $wgGroupPermissions['hacker' ]['upload'] = true; $wgGroupPermissions['hacker' ]['reupload'] = true; $wgGroupPermissions['hacker' ]['reupload-shared'] = true; $wgGroupPermissions['hacker' ]['minoredit'] = true; // Permission to change users' group assignments $wgGroupPermissions['bureaucrat']['userrights'] = true; $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces; ?>
.htacces Rewrite-Rules
Die Hauptarbeit bei dieser Lösung wird von Rewrite-Rules erledigt. Alle Anfragen auf den internen Bereich werden auf index_intern.php umgeleitet. Zusätzlich werden noch 2 Special-Pages definiert:
- Spezial:Internpages - Liste der Seiten im internen Namensraum
- Spezial:Internchanges - RecentChanges nur für den internen Namensraum
Spezial:Log und Spezial:Movepage werden ebenfalls auf den internen Bereich umgeleitet, damit die Links im Log funktionieren bzw. damit man Seiten in den internen Namespace verschieben kann. Die Kategorie-Seiten werden ebenfalls auf die interne index.php umgeleitet damit die Links zu internen Artikeln in den Kategorien korrekt sind.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(Spe[cz]ial:Internpages)$ /mediawiki/index_intern.php?title=Special:Allpages&namespace=100 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(Spe[cz]ial:Internchanges)$ /mediawiki/index_intern.php?title=Spezial:Recentchanges&namespace=100 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(Spe[cz]ial:(Log|Movepage).*)$ /mediawiki/index_intern.php?title=$1 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^((Intern|Intern_talk|Kategorie):.*)$ /mediawiki/index_intern.php?title=$1 [QSA,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /mediawiki/index.php?title=$1 [QSA,L]