MediaWiki – Links in der Sidebar für Benutzergruppen hinzufügen oder entfernen

Wer beim MediaWiki Links in der Sidebar nur für bestimmte Benutzergruppen anzeigen oder ausblenden lassen will, wird mit den vorhandenen Bordmitteln nicht gerade weit kommen. Eine mögliche Lösung für das Dilemma ist das nachfolgende JavaScript, welches unter MediaWiki:Common.js (bspw. http://www.euermediawiki.de/wiki/MediaWiki:Common.js) hinzugefügt werden kann.

function ModifySidebar( action, section, name, link ) {
	try {
		switch ( section ) {
			case 'languages':
				var target = 'p-lang';
				break;
			case 'toolbox':
				var target = 'p-tb';
				break;
                        case 'print':
                                var target = 'p-coll-print_export';
                                break;
			case 'navigation':
				var target = 'p-navigation';
				break;
			default:
				var target = 'p-' + section;
				break;
		}

if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );

aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}

if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

var listelements = list.getElementsByTagName( 'li' );

for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}


} catch( e ) {
		// ignoriere was passiert ist
		return;
	}
}

function CustomizeModificationsOfSidebar() {
	// entferne von toolbox, print und navigation folgendes
        ModifySidebar( 'remove', 'toolbox', 'Links auf diese Seite', 'http://www.4gamez.de/mediawiki/Spezial:Linkliste' );
        ModifySidebar( 'remove', 'toolbox', 'Änderungen an verlinkten Seiten', 'http://www.4gamez.de/mediawiki/Spezial:Änderungen_an_verlinkten_Seiten' );
        ModifySidebar( 'remove', 'toolbox', 'Spezialseiten', 'http://www.4gamez.de/mediawiki/Spezial:Spezialseiten' );
        ModifySidebar( 'remove', 'toolbox', 'Seiten­informationen', 'http://www.4gamez.de/mediawiki/Startseite' );
        ModifySidebar( 'remove', 'print', 'Buch erstellen', 'http://www.4gamez.de/mediawiki/Spezial:Buch' );
        ModifySidebar( 'remove', 'navigation', 'Startseite', 'http://www.4gamez.de/mediawiki/Startseite' );
        // füge in navigation folgendes hinzu
        ModifySidebar( 'add', 'navigation', 'Kategorien', 'http://www.4gamez.de/mediawiki/Spezial:Kategorien' );
}

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'bureaucrat' ) !== -1 ) {
        jQuery( CustomizeModificationsOfSidebar );
} else {
        exit();
}

Weitere Kategorien einbinden

Unter switch ( section ) ist es möglich weitere Kategorien der Sidebar in das JavaScript einzubinden. Dazu muss lediglich die id der Kategorie über den Quelltext per Browser ausgelesen werden.

Links hinzufügen oder entfernen

Unter function CustomizeModificationsOfSidebar() lassen sich die einzelnen Links entfernen oder hinzufügen. Bspw. wird mit dem Befehl

ModifySidebar( 'remove', 'toolbox', 'Links auf diese Seite', 'http://www.4gamez.de/mediawiki/Spezial:Linkliste' );

der Link "Links auf dieser Seite" unter Werkzeuge entfernt. Es wird also übergeben

  • was mit dem Link geschehen soll (remove / add),
  • dann um welche Kategorie es sich in der Sidebar handelt,
  • anschließend die genaue Bezeichnung des Links und
  • zum Schluss noch die URL.

Hinweis: Auch wenn euch nicht die URL bekannt ist, sollte die Funktion grundsätzlich trotzdem funktionieren.

Anzeigen von Links für Benutzergruppen

Sollen die Links nur für bestimmte Benutzergruppen angezeigt werden, kann die Gruppe unter

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'bureaucrat' ) !== -1 ) {
        jQuery( CustomizeModificationsOfSidebar );
} else {
        exit();
}

eingestellt werden. In dem Fall werden die Formatierungen also bei der Benutzergruppe "Bürokraten" vorgenommen.

Soll die Formatierung stattdessen nur bei anonymen Nutzern stattfinden, hilft folgender Code:

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'user' ) === -1 ) {
        jQuery( CustomizeModificationsOfSidebar );
} else {
        exit();
}

Wenn alle Nutzer die vorgenommenen Anpassungen sehen sollen, reicht es aus den vorherigen Code durch

jQuery( CustomizeModificationsOfSidebar );

zu ersetzen.