more Special:Interwiki cleanup:
authorAlex Z <mrzman@users.mediawiki.org>
Sat, 27 Dec 2008 20:02:37 +0000 (20:02 +0000)
committerAlex Z <mrzman@users.mediawiki.org>
Sat, 27 Dec 2008 20:02:37 +0000 (20:02 +0000)
* 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
languages/messages/MessagesEn.php
maintenance/language/messages.inc

index 17b8c28..56ef2ae 100644 (file)
@@ -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( '<div class="errorbox">$1</div>', array( 'interwiki_editerror', $prefix ) );
+                                       $this->error( wfMsg( 'interwiki_editerror', $prefix ) );
                                        return;
                                }
                                $prefix = '<tt>' . htmlspecialchars( $row->iw_prefix ) . '</tt>';
@@ -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( '<span class="error">' . wfMsg( 'interwiki_delfailed', $prefix ) . '</span>' );
+                               $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( '<span class="error">$1</span>', 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( '<div class="errorbox">$1</div>', 'interwiki_error' );
+                       $this->error( wfMsgWikiHtml( 'interwiki_error' ) );
                        return;
                }
                
@@ -259,4 +266,9 @@ class SpecialInterwiki extends SpecialPage {
                $out .= "</table><br />";
                $wgOut->addHTML( $out );
        }
+       
+       function error( $msg ) {
+               global $wgOut;
+               $wgOut->addHTML( Xml::element('p', array( 'class' => 'error' ), $msg ) );
+       }
 }
index 78e8a2d..74008b3 100644 (file)
@@ -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.',
index 1b8330e..1524ff7 100644 (file)
@@ -1471,6 +1471,7 @@ $wgMessageStructure = array(
                'interwiki_addfailed',
                'interwiki_addintro',
                'interwiki_addtext',
+               'interwiki-badprefix',
                'interwiki_defaultreason',
                'interwiki_defaulturl',
                'interwiki_deleted',