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 {
}
$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' ) .
"<tr><td>$deletingmessage</td></tr>".
'<tr><td class="mw-label">' . Xml::label( $reasonmessage, 'mw-interwiki-deletereason') . '</td>' .
'<td class="mw-input">' .
- 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' ) ) .
'</td></tr>' .
- '<tr><td class="mw-submit">' . Xml::submitButton( $button, array('id'=>'mw-interwiki-submit') ) .
+ '<tr><td class="mw-submit">' . Xml::submitButton( $button, array( 'id' => 'mw-interwiki-submit' ) ) .
Xml::hidden( 'wpInterwikiPrefix', $prefix ) .
Xml::hidden( 'wpInterwikiAction', $action ) .
Xml::hidden( 'wpEditToken', $token ) .
break;
case "edit" :
case "add" :
- if( !$admin ){
- $wgOut->permissionRequired( 'interwiki' );
- return;
- }
if( $action == "edit" ){
$prefix = $wgRequest->getVal( 'prefix' );
$dbr = wfGetDB( DB_SLAVE );
$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(
$old .
Xml::hidden( 'wpEditToken', $token ) .
'</td></tr>' .
- '<tr><td class="mw-submit">' . Xml::submitButton( $button, array('id'=>'mw-interwiki-submit') ) . '</td></tr>' .
+ '<tr><td class="mw-submit">' . Xml::submitButton( $button, array( 'id'=>'mw-interwiki-submit' ) ) . '</td></tr>' .
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( '<span class="error">' . wfMsg( 'interwiki_delfailed', $prefix ) . '</span>' );
- } 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( '<span class="error">' . wfMsg( "interwiki_{$do}failed", $prefix ) . '</span>' );
- } 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( '<span class="error">' . wfMsg( 'interwiki_delfailed', $prefix ) . '</span>' );
+ } 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( '<ul>' . '<li>' . $addlink . '</li>' . '</ul>' );
+ if( $do == 'add' ){
+ $dbw->insert( 'interwiki', $data, __METHOD__, 'IGNORE' );
+ } else {
+ $dbw->update( 'interwiki', $data, array( 'iw_prefix' => $prefix ), __METHOD__, 'IGNORE' );
}
- $out = "
- <br />
- <table width='100%' border='2' id='interwikitable'>
- <tr id='interwikitable-header'><th>$prefixmessage</th> <th>$urlmessage</th> <th>$localmessage</th> <th>$transmessage</th>";
- if( $admin ) {
- $deletemessage = wfMsgHtml( 'delete' );
- $editmessage = wfMsgHtml( 'edit' );
- $out .= "<th>$editmessage</th>";
+ if( $dbw->affectedRows() == 0 ) {
+ $wgOut->wrapWikiMsg( '<span class="error">$1</span>', 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 .= "</tr>\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 .= "<br /><div class=\"error\">$errormessage</div><br />";
- }
- 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 .= "<tr class='mw-interwikitable-row'>
- <td class='mw-interwikitable-prefix'>$prefix</td>
- <td class='mw-interwikitable-url'>$url</td>
- <td class='mw-interwikitable-local'>$local</td>
- <td class='mw-interwikitable-trans'>$trans</td>";
- if( $admin ) {
- $out .= '<td class="mw-interwikitable-modify">';
- $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 .= '</td>';
- }
+ $wgOut->addWikiMsg( 'interwiki_intro' );
+ $selfTitle = $this->getTitle();
- $out .= "\n</tr>\n";
+ if ( $admin ) {
+ $skin = $wgUser->getSkin();
+ $addtext = wfMsgHtml( 'interwiki_addtext' );
+ $addlink = $skin->link( $selfTitle, $addtext, array(), array( 'action' => 'add' ) );
+ $wgOut->addHTML( '<ul>' . '<li>' . $addlink . '</li>' . '</ul>' );
+ }
+
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( 'interwiki', '*' );
+ $numrows = $res->numRows();
+ if ( $numrows == 0 ) {
+ $wgOut->wrapWikiMsg( '<div class="errorbox">$1</div>', 'interwiki_error' );
+ return;
+ }
+
+ $out = "
+ <br />
+ <table width='100%' border='2' id='interwikitable'>
+ <tr id='interwikitable-header'><th>$prefixmessage</th> <th>$urlmessage</th> <th>$localmessage</th> <th>$transmessage</th>";
+ if( $admin ) {
+ $deletemessage = wfMsgHtml( 'delete' );
+ $editmessage = wfMsgHtml( 'edit' );
+ $out .= "<th>$editmessage</th>";
+ }
+ $out .= "</tr>\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 .= "<tr class='mw-interwikitable-row'>
+ <td class='mw-interwikitable-prefix'>$prefix</td>
+ <td class='mw-interwikitable-url'>$url</td>
+ <td class='mw-interwikitable-local'>$local</td>
+ <td class='mw-interwikitable-trans'>$trans</td>";
+ if( $admin ) {
+ $out .= '<td class="mw-interwikitable-modify">';
+ $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 .= '</td>';
}
- $dbr->freeResult( $res );
- $out .= "</table><br />";
- $wgOut->addHTML($out);
+
+ $out .= "\n</tr>\n";
}
+ $res->free();
+ $out .= "</table><br />";
+ $wgOut->addHTML( $out );
}
}