Interner Namespace für Mediawiki: Unterschied zwischen den Versionen

Aus C3D2
Zur Navigation springen Zur Suche springen
Zeile 40: Zeile 40:
  }
  }
Index: includes/Revision.php
Index: includes/Revision.php
===================================================================
==LocalSettingsIntern.php==
--- includes/Revision.php      (revision 18244)
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.
+++ includes/Revision.php       (working copy)
<pre>
@@ -165,6 +165,8 @@
<?php
        * @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();


$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;
$wgFeedCacheTimeout = 0;
?>
</pre>
</pre>



Version vom 18. Dezember 2006, 20:44 Uhr

Patches

Patch um unbekannte Namespaces zu verstecken und das Cachen des Feeds zu verhindern wenn $wgFeedCacheTimeout gleich 0 ist.

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!

@@ -370,10 +372,11 @@
                rcDoOutputFeed( $rows, $feed );
                $cachedFeed = ob_get_contents();
                ob_end_flush();
-
-               $expire = 3600 * 24; # One day
-               $messageMemc->set( $key, $cachedFeed );
-               $messageMemc->set( $timekey, wfTimestamp( TS_MW ), $expire );
+               if ( $wgFeedCacheTimeout > 0 ) {
+                       $expire = 3600 * 24; # One day
+                       $messageMemc->set( $key, $cachedFeed );
+                       $messageMemc->set( $timekey, wfTimestamp( TS_MW ), $expire );
+               }
        }
        return true;
 }
Index: includes/Revision.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.
<pre>
<?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;

$wgFeedCacheTimeout = 0;

?>

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:

  1. Spezial:Internpages - Liste der Seiten im internen Namensraum
  2. 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]

Interwiki-Link

Damit auch im öffentlichen Teil des Wikis Links auf den internen Bereich gesetzt werden können, sollte man einen Interwiki-Link für den internen Bereich anlegen:

INSERT INTO interwiki(iw_prefix,iw_url,iw_local,iw_trans) VALUES ('intern', 'https://wiki.c3d2.de/Intern:$1', 0, 0);