From 537b6d6d2828bf8d2dc451bec980cf7ac32de56d Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Sun, 11 Jul 2010 14:17:17 +0000 Subject: [PATCH] Modified Special:Userlogout to subclass UnlistedSpecialPage --- includes/AutoLoader.php | 1 + includes/SpecialPage.php | 2 +- includes/specials/SpecialUserlogout.php | 55 ++++++++++++++----------- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/includes/AutoLoader.php b/includes/AutoLoader.php index f75d285fb5..251f3ba182 100644 --- a/includes/AutoLoader.php +++ b/includes/AutoLoader.php @@ -603,6 +603,7 @@ $wgAutoloadLocalClasses = array( 'SpecialTags' => 'includes/specials/SpecialTags.php', 'SpecialUnlockdb' => 'includes/specials/SpecialUnlockdb.php', 'SpecialUpload' => 'includes/specials/SpecialUpload.php', + 'SpecialUserlogout' => 'includes/specials/SpecialUserlogout.php', 'SpecialVersion' => 'includes/specials/SpecialVersion.php', 'SpecialWhatlinkshere' => 'includes/specials/SpecialWhatlinkshere.php', 'SpecialWhatLinksHere' => 'includes/specials/SpecialWhatlinkshere.php', diff --git a/includes/SpecialPage.php b/includes/SpecialPage.php index fec32b7e2e..22ed55a977 100644 --- a/includes/SpecialPage.php +++ b/includes/SpecialPage.php @@ -192,7 +192,7 @@ class SpecialPage { 'Revisiondelete' => 'SpecialRevisionDelete', 'RevisionMove' => 'SpecialRevisionMove', 'Specialpages' => 'SpecialSpecialpages', - 'Userlogout' => array( 'UnlistedSpecialPage', 'Userlogout' ), + 'Userlogout' => 'SpecialUserlogout', ); static public $mAliases; diff --git a/includes/specials/SpecialUserlogout.php b/includes/specials/SpecialUserlogout.php index 9e2c921169..b6b38cd1c9 100644 --- a/includes/specials/SpecialUserlogout.php +++ b/includes/specials/SpecialUserlogout.php @@ -18,34 +18,41 @@ */ /** - * @file + * Implements Special:Userlogout * @ingroup SpecialPage */ +class SpecialUserlogout extends UnlistedSpecialPage { -/** - * constructor - */ -function wfSpecialUserlogout() { - global $wgUser, $wgOut; - - /** - * Some satellite ISPs use broken precaching schemes that log people out straight after - * they're logged in (bug 17790). Luckily, there's a way to detect such requests. - */ - if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&' ) !== false ) { - wfDebug( "Special:Userlogout request {$_SERVER['REQUEST_URI']} looks suspicious, denying.\n" ); - wfHttpError( 400, wfMsg( 'loginerror' ), wfMsg( 'suspicious-userlogout' ) ); - return; + function __construct() { + parent::__construct( 'Userlogout' ); } - - $oldName = $wgUser->getName(); - $wgUser->logout(); - $wgOut->setRobotPolicy( 'noindex,nofollow' ); - // Hook. - $injected_html = ''; - wfRunHooks( 'UserLogoutComplete', array(&$wgUser, &$injected_html, $oldName) ); + function execute( $par ) { + global $wgUser, $wgOut; + + /** + * Some satellite ISPs use broken precaching schemes that log people out straight after + * they're logged in (bug 17790). Luckily, there's a way to detect such requests. + */ + if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&' ) !== false ) { + wfDebug( "Special:Userlogout request {$_SERVER['REQUEST_URI']} looks suspicious, denying.\n" ); + wfHttpError( 400, wfMsg( 'loginerror' ), wfMsg( 'suspicious-userlogout' ) ); + return; + } + + $this->setHeaders(); + $this->outputHeader(); - $wgOut->addHTML( wfMsgExt( 'logouttext', array( 'parse' ) ) . $injected_html ); - $wgOut->returnToMain(); + $oldName = $wgUser->getName(); + $wgUser->logout(); + + $wgOut->addWikiMsg( 'logouttext' ); + + // Hook. + $injected_html = ''; + wfRunHooks( 'UserLogoutComplete', array( &$wgUser, &$injected_html, $oldName ) ); + $wgOut->addHTML( $injected_html ); + + $wgOut->returnToMain(); + } } -- 2.20.1