From: Alexandre Emsenhuber Date: Sat, 27 Dec 2008 13:35:55 +0000 (+0000) Subject: Tweaks to Special:Interwiki: X-Git-Tag: 1.31.0-rc.0~43746 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/bilan.php?a=commitdiff_plain;h=c05f2b86e96f629b093feb6d589db392a032dcbc;p=lhc%2Fweb%2Fwiklou.git Tweaks to Special:Interwiki: * Splitted SpecialInterwiki::execute() in multiple functions * using OutputPage::addWikiMsg() and OutputPage::wrapWikiMsg() when possible * using $res->fetchObject() and $res->free() rather than $dbr->fetchObject() and $dbr->freeResult() * Removed 'interwiki' restrict passed to parent::__construct() so that it appears in Special:SpecialPages for everybody * Added missing 'interwiki' entry to User::$mCoreRights --- diff --git a/includes/User.php b/includes/User.php index 3ae85b1477..e3e59d04a7 100644 --- a/includes/User.php +++ b/includes/User.php @@ -146,6 +146,7 @@ class User { 'editusercssjs', 'import', 'importupload', + 'interwiki', 'ipblock-exempt', 'markbotedits', 'minoredit', diff --git a/includes/specials/SpecialInterwiki.php b/includes/specials/SpecialInterwiki.php index 6a3cb2c79e..17b8c28351 100644 --- a/includes/specials/SpecialInterwiki.php +++ b/includes/specials/SpecialInterwiki.php @@ -7,14 +7,16 @@ class SpecialInterwiki extends SpecialPage { function __construct() { - parent::__construct( 'Interwiki', 'interwiki' ); + parent::__construct( 'Interwiki' ); } function execute( $par ) { global $wgRequest, $wgOut, $wgUser; $this->setHeaders(); - $admin = $this->userCanExecute( $wgUser ); + $this->outputHeader(); + + $admin = $wgUser->isAllowed( 'interwiki' ); if ( $admin ) { $wgOut->setPagetitle( wfMsg( 'interwiki' ) ); } else { @@ -22,40 +24,60 @@ class SpecialInterwiki extends SpecialPage { } $action = $wgRequest->getVal( 'action', $par ); - // checking - $selfTitle = $this->getTitle(); - - // Protect administrative actions against malicious requests - $safePost = $wgRequest->wasPosted() && - $wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ); - switch( $action ){ case "delete": + case "edit" : + case "add" : if( !$admin ){ - $wgOut->permissionRequired('interwiki'); + $wgOut->permissionRequired( 'interwiki' ); + return; + } + $this->showForm( $action ); + break; + case "submit": + if( !$admin ){ + $wgOut->permissionRequired( 'interwiki' ); + return; + } + if( !$wgRequest->wasPosted() || !$wgUser->matchEditToken( $wgRequest->getVal( 'wpEditToken' ) ) ) { + $wgOut->addWikiMsg( 'sessionfailure' ); return; } + $this->doSubmit(); + break; + default: + $this->showList( $admin ); + break; + } + } + + function showForm( $action ) { + global $wgRequest, $wgUser, $wgOut; + + $actionUrl = $this->getTitle()->getLocalURL( 'action=submit' ); + $token = $wgUser->editToken(); + $defaultreason = wfMsgForContent( 'interwiki_defaultreason' ); + + switch( $action ){ + case "delete": $prefix = $wgRequest->getVal( 'prefix' ); - $actionUrl = $selfTitle->getLocalURL( "action=submit" ); $button = wfMsg( 'delete' ); - $topmessage = wfMsg( 'interwiki_delquestion', $encPrefix ); - $deletingmessage = wfMsgHtml( 'interwiki_deleting', $encPrefix ); + $topmessage = wfMsg( 'interwiki_delquestion', $prefix ); + $deletingmessage = wfMsgExt( 'interwiki_deleting', array( 'parseinline' ), $prefix ); $reasonmessage = wfMsg( 'deletecomment' ); - $defaultreason = wfMsgForContent( 'interwiki_defaultreason' ); - $token = $wgUser->editToken(); $wgOut->addHTML( Xml::openElement( 'fieldset' ) . Xml::element( 'legend', null, $topmessage ) . - Xml::openElement( 'form', array('id'=> 'mw-interwiki-deleteform', 'method'=> 'post', 'action'=>$actionUrl) ) . + Xml::openElement( 'form', array('id'=> 'mw-interwiki-deleteform', 'method'=> 'post', 'action' => $actionUrl ) ) . Xml::openElement( 'table' ) . "$deletingmessage". '' . Xml::label( $reasonmessage, 'mw-interwiki-deletereason') . '' . '' . - Xml::input( 'wpInterwikiReason', 60, $defaultreason, array('tabindex'=>'1', 'id'=>'mw-interwiki-deletereason', 'maxlength'=>'200') ) . + Xml::input( 'wpInterwikiReason', 60, $defaultreason, array( 'tabindex' => '1', 'id' => 'mw-interwiki-deletereason', 'maxlength' => '200' ) ) . '' . - '' . Xml::submitButton( $button, array('id'=>'mw-interwiki-submit') ) . + '' . Xml::submitButton( $button, array( 'id' => 'mw-interwiki-submit' ) ) . Xml::hidden( 'wpInterwikiPrefix', $prefix ) . Xml::hidden( 'wpInterwikiAction', $action ) . Xml::hidden( 'wpEditToken', $token ) . @@ -67,10 +89,6 @@ class SpecialInterwiki extends SpecialPage { break; case "edit" : case "add" : - if( !$admin ){ - $wgOut->permissionRequired( 'interwiki' ); - return; - } if( $action == "edit" ){ $prefix = $wgRequest->getVal( 'prefix' ); $dbr = wfGetDB( DB_SLAVE ); @@ -84,27 +102,25 @@ class SpecialInterwiki extends SpecialPage { $trans = $row->iw_trans; $local = $row->iw_local; $old = Xml::hidden( 'wpInterwikiPrefix', $row->iw_prefix ); - $topmessage = wfMsgExt( 'interwiki_edittext', array('parseinline') ); - $intromessage = wfMsgExt( 'interwiki_editintro', array('parseinline') ); + $topmessage = wfMsgExt( 'interwiki_edittext', array( 'parseinline' ) ); + $intromessage = wfMsgExt( 'interwiki_editintro', array( 'parseinline' ) ); $button = wfMsg( 'edit' ); } else { - $prefix = Xml::input( 'wpInterwikiPrefix', 20, false, array( 'tabindex'=>'1', 'id'=>'mw-interwiki-prefix', 'maxlength'=>'20') ); + $prefix = Xml::input( 'wpInterwikiPrefix', 20, false, array( 'tabindex'=>'1', 'id'=>'mw-interwiki-prefix', 'maxlength'=>'20' ) ); $local = false; $trans = false; $old = ''; $defaulturl = wfMsg( 'interwiki_defaulturl' ); - $topmessage = wfMsgExt( 'interwiki_addtext', array('parseinline') ); - $intromessage = wfMsgExt( 'interwiki_addintro', array('parseinline') ); + $topmessage = wfMsgExt( 'interwiki_addtext', array( 'parseinline' ) ); + $intromessage = wfMsgExt( 'interwiki_addintro', array( 'parseinline' ) ); $button = wfMsg( 'interwiki_addbutton' ); } - $actionUrl = $selfTitle->getLocalURL( 'action=submit' ); $prefixmessage = wfMsgHtml( 'interwiki_prefix' ); $localmessage = wfMsg( 'interwiki_local' ); $transmessage = wfMsg( 'interwiki_trans' ); $reasonmessage = wfMsg( 'interwiki_reasonfield' ); $urlmessage = wfMsg( 'interwiki_url' ); - $token = $wgUser->editToken(); $defaultreason = wfMsgForContent( 'interwiki_defaultreason' ); $wgOut->addHTML( @@ -126,123 +142,121 @@ class SpecialInterwiki extends SpecialPage { $old . Xml::hidden( 'wpEditToken', $token ) . '' . - '' . Xml::submitButton( $button, array('id'=>'mw-interwiki-submit') ) . '' . + '' . Xml::submitButton( $button, array( 'id'=>'mw-interwiki-submit' ) ) . '' . Xml::closeElement( 'table' ) . Xml::closeElement( 'form' ) . Xml::closeElement( 'fieldset' ) ); break; - case "submit": - if( !$admin ){ - $wgOut->permissionRequired('interwiki'); - return; - } - if( !$safePost ){ - $wgOut->addWikiText( wfMsg('sessionfailure') ); - return; - } + } + } - $prefix = $wgRequest->getVal( 'wpInterwikiPrefix' ); - $reason = $wgRequest->getText( 'wpInterwikiReason' ); - $do = $wgRequest->getVal( 'wpInterwikiAction' ); - $dbw = wfGetDB( DB_MASTER ); - switch( $do ){ - case "delete": - $dbw->delete( 'interwiki', array( 'iw_prefix' => $prefix ), __METHOD__ ); - - if ($dbw->affectedRows() == 0) { - $wgOut->addWikiText( '' . wfMsg( 'interwiki_delfailed', $prefix ) . '' ); - } else { - $wgOut->addWikiText( wfMsg( 'interwiki_deleted', $prefix )); - $wgOut->returnToMain( false, $selfTitle ); - $log = new LogPage( 'interwiki' ); - $log->addEntry( 'iw_delete', $selfTitle, $reason, array( $prefix ) ); - } - break; - case "edit": - case "add": - $theurl = $wgRequest->getVal( 'wpInterwikiURL' ); - $local = $wgRequest->getCheck( 'wpInterwikiLocal' ) ? 1 : 0; - $trans = $wgRequest->getCheck( 'wpInterwikiTrans' ) ? 1 : 0; - $data = array( 'iw_prefix' => $prefix, 'iw_url' => $theurl, - 'iw_local' => $local, 'iw_trans' => $trans ); - - if( $do == 'add' ){ - $dbw->insert( 'interwiki', $data, __METHOD__, 'IGNORE' ); - } else { - $dbw->update( 'interwiki', $data, array( 'iw_prefix' => $prefix ), __METHOD__, 'IGNORE' ); - } + function doSubmit() { + global $wgRequest, $wgOut; + $prefix = $wgRequest->getVal( 'wpInterwikiPrefix' ); + $reason = $wgRequest->getText( 'wpInterwikiReason' ); + $do = $wgRequest->getVal( 'wpInterwikiAction' ); + $selfTitle = $this->getTitle(); + $dbw = wfGetDB( DB_MASTER ); + switch( $do ){ + case "delete": + $dbw->delete( 'interwiki', array( 'iw_prefix' => $prefix ), __METHOD__ ); - if( $dbw->affectedRows() == 0 ) { - $wgOut->addWikiText( '' . wfMsg( "interwiki_{$do}failed", $prefix ) . '' ); - } else { - $wgOut->addWikiText( wfMsg( "interwiki_{$do}ed", $prefix )); - $wgOut->returnToMain( false, $selfTitle ); - $log = new LogPage( 'interwiki' ); - $log->addEntry( 'iw_'.$do, $selfTitle, $reason, array( $prefix, $theurl, $trans, $local ) ); - } - break; + if ( $dbw->affectedRows() == 0 ) { + $wgOut->addWikiText( '' . wfMsg( 'interwiki_delfailed', $prefix ) . '' ); + } else { + $wgOut->addWikiText( wfMsg( 'interwiki_deleted', $prefix )); + $wgOut->returnToMain( false, $selfTitle ); + $log = new LogPage( 'interwiki' ); + $log->addEntry( 'iw_delete', $selfTitle, $reason, array( $prefix ) ); } break; - default: - $prefixmessage = wfMsgHtml( 'interwiki_prefix' ); - $urlmessage = wfMsgHtml( 'interwiki_url' ); - $localmessage = wfMsgHtml( 'interwiki_local' ); - $transmessage = wfMsgHtml( 'interwiki_trans' ); - - $wgOut->addWikiText( wfMsg( 'interwiki_intro' ) ); + case "edit": + case "add": + $theurl = $wgRequest->getVal( 'wpInterwikiURL' ); + $local = $wgRequest->getCheck( 'wpInterwikiLocal' ) ? 1 : 0; + $trans = $wgRequest->getCheck( 'wpInterwikiTrans' ) ? 1 : 0; + $data = array( 'iw_prefix' => $prefix, 'iw_url' => $theurl, + 'iw_local' => $local, 'iw_trans' => $trans ); - if ($admin) { - $skin = $wgUser->getSkin(); - $addtext = wfMsgHtml( 'interwiki_addtext' ); - $addlink = $skin->makeLinkObj( $selfTitle, $addtext, 'action=add' ); - $wgOut->addHTML( '' ); + if( $do == 'add' ){ + $dbw->insert( 'interwiki', $data, __METHOD__, 'IGNORE' ); + } else { + $dbw->update( 'interwiki', $data, array( 'iw_prefix' => $prefix ), __METHOD__, 'IGNORE' ); } - $out = " -
- - "; - if( $admin ) { - $deletemessage = wfMsgHtml( 'delete' ); - $editmessage = wfMsgHtml( 'edit' ); - $out .= ""; + if( $dbw->affectedRows() == 0 ) { + $wgOut->wrapWikiMsg( '$1', array( "interwiki_{$do}failed", $prefix ) ); + } else { + $wgOut->addWikiMsg( "interwiki_{$do}ed", $prefix ); + $wgOut->returnToMain( false, $selfTitle ); + $log = new LogPage( 'interwiki' ); + $log->addEntry( 'iw_'.$do, $selfTitle, $reason, array( $prefix, $theurl, $trans, $local ) ); } + break; + } + } - $out .= "\n"; + function showList( $admin ) { + global $wgUser, $wgOut; + $prefixmessage = wfMsgHtml( 'interwiki_prefix' ); + $urlmessage = wfMsgHtml( 'interwiki_url' ); + $localmessage = wfMsgHtml( 'interwiki_local' ); + $transmessage = wfMsgHtml( 'interwiki_trans' ); - $dbr = wfGetDB( DB_SLAVE ); - $res = $dbr->select( 'interwiki', '*' ); - $numrows = $dbr->numRows( $res ); - if ($numrows == 0) { - $errormessage = wfMsgHtml('interwiki_error'); - $out .= "
$errormessage

"; - } - while( $s = $dbr->fetchObject( $res ) ) { - $prefix = htmlspecialchars( $s->iw_prefix ); - $url = htmlspecialchars( $s->iw_url ); - $trans = htmlspecialchars( $s->iw_trans ); - $local = htmlspecialchars( $s->iw_local ); - $out .= " - - - - "; - if( $admin ) { - $out .= ''; - } + $wgOut->addWikiMsg( 'interwiki_intro' ); + $selfTitle = $this->getTitle(); - $out .= "\n\n"; + if ( $admin ) { + $skin = $wgUser->getSkin(); + $addtext = wfMsgHtml( 'interwiki_addtext' ); + $addlink = $skin->link( $selfTitle, $addtext, array(), array( 'action' => 'add' ) ); + $wgOut->addHTML( '' ); + } + + $dbr = wfGetDB( DB_SLAVE ); + $res = $dbr->select( 'interwiki', '*' ); + $numrows = $res->numRows(); + if ( $numrows == 0 ) { + $wgOut->wrapWikiMsg( '
$1
', 'interwiki_error' ); + return; + } + + $out = " +
+
$prefixmessage $urlmessage $localmessage $transmessage$editmessage
$prefix$url$local$trans'; - $out .= $skin->makeLinkObj( $selfTitle, $editmessage, - 'action=edit&prefix=' . urlencode( $s->iw_prefix ) ); - $out .= ', '; - $out .= $skin->makeLinkObj( $selfTitle, $deletemessage, - 'action=delete&prefix=' . urlencode( $s->iw_prefix ) ); - $out .= '
+ "; + if( $admin ) { + $deletemessage = wfMsgHtml( 'delete' ); + $editmessage = wfMsgHtml( 'edit' ); + $out .= ""; + } + $out .= "\n"; + + while( $s = $res->fetchObject() ) { + $prefix = htmlspecialchars( $s->iw_prefix ); + $url = htmlspecialchars( $s->iw_url ); + $trans = htmlspecialchars( $s->iw_trans ); + $local = htmlspecialchars( $s->iw_local ); + $out .= " + + + + "; + if( $admin ) { + $out .= ''; } - $dbr->freeResult( $res ); - $out .= "
$prefixmessage $urlmessage $localmessage $transmessage$editmessage
$prefix$url$local$trans'; + $out .= $skin->link( $selfTitle, $editmessage, array(), + array( 'action' => 'edit', 'prefix' => $s->iw_prefix ) ); + $out .= ', '; + $out .= $skin->link( $selfTitle, $deletemessage, array(), + array( 'action' => 'delete', 'prefix' => $s->iw_prefix ) ); + $out .= '

"; - $wgOut->addHTML($out); + + $out .= "\n\n"; } + $res->free(); + $out .= "
"; + $wgOut->addHTML( $out ); } }