Personal tools


Extension:NoViewSource.php

From OrganicDesign

Jump to: navigation, search
This code exhibits voodoo programming techniques. The most common of these is extending an instance's class at runtime after it has been instantiated, a technique that can be used to provide additional hooks into existing code without requiring modification of code-base files. For a list of all our scripts which exhibit voodoo, see Category:Code that uses voodoo.
<?php
# Extension:NoViewSource
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
# - Started: 2007-12-16
 
if (!defined('MEDIAWIKI')) die('Not an entry point.');
 
define('NOVIEWSOURCE_VERSION','1.0.2, 2007-12-18');
 
$wgExtensionFunctions[]        = 'wfSetupNoViewSource';
$wgExtensionCredits['other'][] = array(
	'name'        => 'NoViewSource',
	'author'      => '[http://www.organicdesign.co.nz/nad User:Nad]',
	'description' => 'Replaces the "view source" action with "edit" which links to login page.',
	'url'         => 'http://www.organicdesign.co.nz/Extension:NoViewSource.php',
	'version'     => NOVIEWSOURCE_VERSION
	);
 
function wfSetupNoViewSource() {
	global $wgHooks,$wgOut,$wgUser;
	if ($wgUser->isLoggedIn()) return;
 
	$wgHooks['SkinTemplateTabs'][] = 'wfNoViewSourceUpdateActions';
 
	# Create a new OutputPage class (Out2) which has its readOnlyPage (view source) method replaced with loginToUse
	class Out2 extends OutputPage {
		public function readOnlyPage( $source = null, $protected = false, $reasons = array() ) {
			parent::loginToUse();
			}
		}
 
	# Replace $wgOut with a sub-classed replica
	$oldOut = $wgOut;
	$wgOut  = new Out2();
	$vars   = get_class_vars('oldOut');
	if (is_array($vars)) foreach (array_keys($vars) as $k) $wgOut->$k = $oldOut->$k;
	}
 
function wfNoViewSourceUpdateActions(&$skin,&$actions) {
	if (isset($actions['viewsource'])) $actions['viewsource']['text'] = wfMsg('edit');
	return true;
	}