From cff9e4dbbb4f661c1648375a23adf7e2145e40ca Mon Sep 17 00:00:00 2001 From: Alex Z Date: Sat, 27 Dec 2008 20:02:37 +0000 Subject: [PATCH] more Special:Interwiki cleanup: * standardize the error message display * show the form after an edit/delete error and preload the fields with the previous input * quick filter for bad characters --- includes/specials/SpecialInterwiki.php | 34 +++++++++++++++++--------- languages/messages/MessagesEn.php | 1 + maintenance/language/messages.inc | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/includes/specials/SpecialInterwiki.php b/includes/specials/SpecialInterwiki.php index 17b8c28351..56ef2ae54f 100644 --- a/includes/specials/SpecialInterwiki.php +++ b/includes/specials/SpecialInterwiki.php @@ -56,7 +56,7 @@ class SpecialInterwiki extends SpecialPage { $actionUrl = $this->getTitle()->getLocalURL( 'action=submit' ); $token = $wgUser->editToken(); - $defaultreason = wfMsgForContent( 'interwiki_defaultreason' ); + $defaultreason = $wgRequest->getVal( 'wpInterwikiReason' ) ? $wgRequest->getVal( 'wpInterwikiReason' ) : wfMsgForContent( 'interwiki_defaultreason' ); switch( $action ){ case "delete": @@ -94,7 +94,7 @@ class SpecialInterwiki extends SpecialPage { $dbr = wfGetDB( DB_SLAVE ); $row = $dbr->selectRow( 'interwiki', '*', array( 'iw_prefix' => $prefix ) ); if( !$row ){ - $wgOut->wrapWikiMsg( '
$1
', array( 'interwiki_editerror', $prefix ) ); + $this->error( wfMsg( 'interwiki_editerror', $prefix ) ); return; } $prefix = '' . htmlspecialchars( $row->iw_prefix ) . ''; @@ -106,11 +106,12 @@ class SpecialInterwiki extends SpecialPage { $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' ) ); - $local = false; - $trans = false; + $prefix = $wgRequest->getVal( 'wpInterwikiPrefix' ) ? $wgRequest->getVal( 'wpInterwikiPrefix' ) : $wgRequest->getVal( 'prefix' ); + $prefix = Xml::input( 'wpInterwikiPrefix', 20, $prefix, array( 'tabindex'=>'1', 'id'=>'mw-interwiki-prefix', 'maxlength'=>'20' ) ); + $local = $wgRequest->getCheck( 'wpInterwikiLocal' ); + $trans = $wgRequest->getCheck( 'wpInterwikiTrans' ); $old = ''; - $defaulturl = wfMsg( 'interwiki_defaulturl' ); + $defaulturl = $wgRequest->getVal( 'wpInterwikiURL' ) ? $wgRequest->getVal( 'wpInterwikiURL' ) : wfMsg( 'interwiki_defaulturl' ); $topmessage = wfMsgExt( 'interwiki_addtext', array( 'parseinline' ) ); $intromessage = wfMsgExt( 'interwiki_addintro', array( 'parseinline' ) ); $button = wfMsg( 'interwiki_addbutton' ); @@ -121,7 +122,6 @@ class SpecialInterwiki extends SpecialPage { $transmessage = wfMsg( 'interwiki_trans' ); $reasonmessage = wfMsg( 'interwiki_reasonfield' ); $urlmessage = wfMsg( 'interwiki_url' ); - $defaultreason = wfMsgForContent( 'interwiki_defaultreason' ); $wgOut->addHTML( Xml::openElement( 'fieldset' ) . @@ -154,8 +154,13 @@ class SpecialInterwiki extends SpecialPage { function doSubmit() { global $wgRequest, $wgOut; $prefix = $wgRequest->getVal( 'wpInterwikiPrefix' ); - $reason = $wgRequest->getText( 'wpInterwikiReason' ); $do = $wgRequest->getVal( 'wpInterwikiAction' ); + if( preg_match( '/[\s:&=]/', $prefix ) ) { + $this->error( wfMsg( 'interwiki-badprefix', $prefix ) ); + $this->showForm( $do ); + return; + } + $reason = $wgRequest->getText( 'wpInterwikiReason' ); $selfTitle = $this->getTitle(); $dbw = wfGetDB( DB_MASTER ); switch( $do ){ @@ -163,7 +168,8 @@ class SpecialInterwiki extends SpecialPage { $dbw->delete( 'interwiki', array( 'iw_prefix' => $prefix ), __METHOD__ ); if ( $dbw->affectedRows() == 0 ) { - $wgOut->addWikiText( '' . wfMsg( 'interwiki_delfailed', $prefix ) . '' ); + $this->error( wfMsg( 'interwiki_delfailed', $prefix ) ); + $this->showForm( $do ); } else { $wgOut->addWikiText( wfMsg( 'interwiki_deleted', $prefix )); $wgOut->returnToMain( false, $selfTitle ); @@ -186,7 +192,8 @@ class SpecialInterwiki extends SpecialPage { } if( $dbw->affectedRows() == 0 ) { - $wgOut->wrapWikiMsg( '$1', array( "interwiki_{$do}failed", $prefix ) ); + $this->error( wfMsg( "interwiki_{$do}failed", $prefix ) ); + $this->showForm( $do ); } else { $wgOut->addWikiMsg( "interwiki_{$do}ed", $prefix ); $wgOut->returnToMain( false, $selfTitle ); @@ -218,7 +225,7 @@ class SpecialInterwiki extends SpecialPage { $res = $dbr->select( 'interwiki', '*' ); $numrows = $res->numRows(); if ( $numrows == 0 ) { - $wgOut->wrapWikiMsg( '
$1
', 'interwiki_error' ); + $this->error( wfMsgWikiHtml( 'interwiki_error' ) ); return; } @@ -259,4 +266,9 @@ class SpecialInterwiki extends SpecialPage { $out .= "
"; $wgOut->addHTML( $out ); } + + function error( $msg ) { + global $wgOut; + $wgOut->addHTML( Xml::element('p', array( 'class' => 'error' ), $msg ) ); + } } diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 78e8a2d960..74008b391b 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -2196,6 +2196,7 @@ Possibly it already exists in the interwiki table.', 'interwiki_addintro' => 'You are adding a new interwiki prefix. Remember that it cannot contain spaces ( ), colons (:), ampersands (&), or equal signs (=).', 'interwiki_addtext' => 'Add an interwiki prefix', +'interwiki-badprefix' => '"$1" contains invalid characters', 'interwiki_defaultreason' => 'no reason given', 'interwiki_defaulturl' => 'http://www.example.com/$1', # only translate this message to other languages if you have to change it 'interwiki_deleted' => 'Prefix "$1" was successfully removed from the interwiki table.', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 1b8330e24e..1524ff79a1 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -1471,6 +1471,7 @@ $wgMessageStructure = array( 'interwiki_addfailed', 'interwiki_addintro', 'interwiki_addtext', + 'interwiki-badprefix', 'interwiki_defaultreason', 'interwiki_defaulturl', 'interwiki_deleted', -- 2.20.1