Interner Namespace für Mediawiki: Unterschied zwischen den Versionen

Aus C3D2
Zur Navigation springen Zur Suche springen
(+Interwiki-Link)
Zeile 1: Zeile 1:
[[Kategorie:Wissen]][[Kategorie:Mediawiki]]
[[Kategorie:Wissen]][[Kategorie:Mediawiki]]
==Patch um unbekannte Namespaces zu verstecken==
==Patches==
Patch um unbekannte Namespaces zu verstecken und das Cachen des Feeds zu verhindern wenn $wgFeedCacheTimeout gleich 0 ist.
<pre>
<pre>
Index: includes/SpecialRecentchanges.php
Index: includes/SpecialRecentchanges.php
Zeile 22: Zeile 23:
         // This is the big thing!
         // 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
Index: includes/Revision.php
===================================================================
===================================================================
Zeile 37: Zeile 54:


</pre>
</pre>
==Erstellen einer Kopie von index.php für den internen Bereich==
==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
In dieser Kopie fügt man lediglich ein require für die LocalSettings des internen Bereichs hinzu

Version vom 18. Dezember 2006, 20:43 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
===================================================================
--- 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:

  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);