From 1046aee39ec3c4abc581abf7a5866f33e24839d7 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 25 Mar 2009 17:52:40 +0000 Subject: [PATCH] Fix url params for multi-item deletion by converting to CVS --- includes/ImagePage.php | 2 +- includes/LogEventsList.php | 22 ++++---- includes/specials/SpecialRevisiondelete.php | 56 ++++++++++----------- includes/specials/SpecialUndelete.php | 5 +- 4 files changed, 41 insertions(+), 44 deletions(-) diff --git a/includes/ImagePage.php b/includes/ImagePage.php index 99e2d28f8f..4f3b859a2b 100644 --- a/includes/ImagePage.php +++ b/includes/ImagePage.php @@ -789,7 +789,7 @@ class ImageHistoryList { $q = array(); $q[] = 'action=delete'; if( !$iscur ) - $q[] = 'oldimage[]=' . urlencode( $img ); + $q[] = 'oldimage=' . urlencode( $img ); $row .= $this->skin->makeKnownLinkObj( $this->title, wfMsgHtml( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' ), diff --git a/includes/LogEventsList.php b/includes/LogEventsList.php index 8000d31cc9..19900b4102 100644 --- a/includes/LogEventsList.php +++ b/includes/LogEventsList.php @@ -286,12 +286,9 @@ class LogEventsList { $revdel = SpecialPage::getTitleFor( 'Revisiondelete' ); // Different revision types use different URL params... $key = $paramArray[0]; - // Link to each hidden object ID, $paramArray[1] is the url param + // $paramArray[1] is a CVS of the IDs $Ids = explode( ',', $paramArray[1] ); - $revParams = ''; - foreach( $Ids as $n => $id ) { - $revParams .= '&' . urlencode($key) . '[]=' . urlencode($id); - } + $query = urlencode($paramArray[1]); $revert = array(); // Diff link for single rev deletions if( $key === 'oldid' && count($Ids) == 1 ) { @@ -300,22 +297,21 @@ class LogEventsList { 'diff='.intval($Ids[0])."&unhide=1&token=$token" ); } // View/modify link... - $revert[] = $this->skin->makeKnownLinkObj( $revdel, $this->message['revdel-restore'], - 'target=' . $title->getPrefixedUrl() . $revParams ); + $revert[] = $this->skin->makeKnownLinkObj( $revdel, + $this->message['revdel-restore'], "$key=$query" ); + // Pipe links $revert = '(' . implode(' | ',$revert) . ')'; } // Hidden log items, give review link } else if( self::typeAction($row,array('delete','suppress'),'event','deleterevision') ) { if( count($paramArray) == 1 ) { $revdel = SpecialPage::getTitleFor( 'Revisiondelete' ); + // $paramArray[1] is a CVS of the IDs $Ids = explode( ',', $paramArray[0] ); + $query = urlencode($paramArray[0]); // Link to each hidden object ID, $paramArray[1] is the url param - $logParams = ''; - foreach( $Ids as $n => $id ) { - $logParams .= '&logid[]=' . intval($id); - } $revert = '(' . $this->skin->makeKnownLinkObj( $revdel, $this->message['revdel-restore'], - 'target=' . $title->getPrefixedUrl() . $logParams ) . ')'; + 'target='.$title->getPrefixedUrl()."&logid=$query" ) . ')'; } // Self-created users } else if( self::typeAction($row,'newusers','create2') ) { @@ -370,7 +366,7 @@ class LogEventsList { } else { $target = SpecialPage::getTitleFor( 'Log', $row->log_type ); $query = array( 'target' => $target->getPrefixedDBkey(), - 'logid[]' => $row->log_id + 'logid' => $row->log_id ); $del = $this->skin->revDeleteLink( $query, self::isDeleted( $row, LogPage::DELETED_RESTRICTED ) ); } diff --git a/includes/specials/SpecialRevisiondelete.php b/includes/specials/SpecialRevisiondelete.php index 7fdb3cc4dc..7751741687 100644 --- a/includes/specials/SpecialRevisiondelete.php +++ b/includes/specials/SpecialRevisiondelete.php @@ -25,17 +25,18 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { return; } $this->skin =& $wgUser->getSkin(); - # Set title and such $this->setHeaders(); $this->outputHeader(); $this->wasPosted = $wgRequest->wasPosted(); - # Handle our many different possible input types + # Set title and such $this->target = $wgRequest->getText( 'target' ); - $this->oldids = $wgRequest->getArray( 'oldid' ); - $this->artimestamps = $wgRequest->getArray( 'artimestamp' ); - $this->logids = $wgRequest->getArray( 'logid' ); - $this->oldimgs = $wgRequest->getArray( 'oldimage' ); - $this->fileids = $wgRequest->getArray( 'fileid' ); + # Handle our many different possible input types. + # Use CVS, since the cgi handling will break on arrays. + $this->oldids = array_filter( explode( ',', $wgRequest->getVal('oldid') ) ); + $this->artimestamps = array_filter( explode( ',', $wgRequest->getVal('artimestamp') ) ); + $this->logids = array_filter( explode( ',', $wgRequest->getVal('logid') ) ); + $this->oldimgs = array_filter( explode( ',', $wgRequest->getVal('oldimage') ) ); + $this->fileids = array_filter( explode( ',', $wgRequest->getVal('fileid') ) ); # For reviewing deleted files... $this->file = $wgRequest->getVal( 'file' ); # Only one target set at a time please! @@ -112,11 +113,11 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { } else if( $this->deleteKey == 'logid' ) { $this->showLogItems(); } - # Show relevant lines from the deletion log. This will show even if said ID - # does not exist...might be helpful + # Show relevant lines from the deletion log $wgOut->addHTML( "

" . htmlspecialchars( LogPage::logName( 'delete' ) ) . "

\n" ); LogEventsList::showLogExtract( $wgOut, 'delete', $this->page->getPrefixedText() ); - if( $wgUser->isAllowed( 'suppressionlog' ) ){ + # Show relevant lines from the suppression log + if( $wgUser->isAllowed( 'suppressionlog' ) ) { $wgOut->addHTML( "

" . htmlspecialchars( LogPage::logName( 'suppress' ) ) . "

\n" ); LogEventsList::showLogExtract( $wgOut, 'suppress', $this->page->getPrefixedText() ); } @@ -155,7 +156,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { array( 'revdelete-hide-user', 'wpHideUser', Revision::DELETED_USER ) ); if( $wgUser->isAllowed('suppressrevision') ) { - $this->checks[] = array( 'revdelete-hide-restricted', 'wpHideRestricted', Revision::DELETED_RESTRICTED ); + $this->checks[] = array( 'revdelete-hide-restricted', + 'wpHideRestricted', Revision::DELETED_RESTRICTED ); } } @@ -292,15 +294,14 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { Xml::hidden( 'type', $this->deleteKey ) ); if( $this->deleteKey=='oldid' ) { - foreach( $revObjs as $rev ) - $hidden[] = Xml::hidden( 'oldid[]', $rev->getId() ); + $hidden[] = Xml::hidden( 'oldid', implode(',',$this->oldids) ); } else { - foreach( $revObjs as $rev ) - $hidden[] = Xml::hidden( 'artimestamp[]', $rev->getTimestamp() ); + $hidden[] = Xml::hidden( 'artimestamp', implode(',',$this->artimestamps) ); } $special = SpecialPage::getTitleFor( 'Revisiondelete' ); $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $special->getLocalUrl( 'action=submit' ), + Xml::openElement( 'form', array( 'method' => 'post', + 'action' => $special->getLocalUrl( 'action=submit' ), 'id' => 'mw-revdel-form-revisions' ) ) . Xml::openElement( 'fieldset' ) . xml::element( 'legend', null, wfMsg( 'revdelete-legend' ) ) @@ -423,16 +424,16 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { Xml::hidden( 'type', $this->deleteKey ) ); if( $this->deleteKey=='oldimage' ) { - foreach( $this->ofiles as $filename ) - $hidden[] = Xml::hidden( 'oldimage[]', $filename ); + $hidden[] = Xml::hidden( 'oldimage', implode(',',$this->oldimgs) ); } else { - foreach( $this->afiles as $fileid ) - $hidden[] = Xml::hidden( 'fileid[]', $fileid ); + $hidden[] = Xml::hidden( 'fileid', implode(',',$this->fileids) ); } $special = SpecialPage::getTitleFor( 'Revisiondelete' ); $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $special->getLocalUrl( 'action=submit' ), - 'id' => 'mw-revdel-form-filerevisions' ) ) . + Xml::openElement( 'form', array( 'method' => 'post', + 'action' => $special->getLocalUrl( 'action=submit' ), + 'id' => 'mw-revdel-form-filerevisions' ) + ) . Xml::fieldset( wfMsg( 'revdelete-legend' ) ) ); @@ -512,15 +513,14 @@ class SpecialRevisionDelete extends UnlistedSpecialPage { $hidden = array( Xml::hidden( 'wpEditToken', $wgUser->editToken() ), Xml::hidden( 'target', $this->page->getPrefixedText() ), - Xml::hidden( 'type', $this->deleteKey ) ); - foreach( $this->events as $logid ) { - $hidden[] = Xml::hidden( 'logid[]', $logid ); - } + Xml::hidden( 'type', $this->deleteKey ), + Xml::hidden( 'logid', implode(',',$this->logids) ) + ); $special = SpecialPage::getTitleFor( 'Revisiondelete' ); $wgOut->addHTML( - Xml::openElement( 'form', array( 'method' => 'post', 'action' => $special->getLocalUrl( 'action=submit' ), - 'id' => 'mw-revdel-form-logs' ) ) . + Xml::openElement( 'form', array( 'method' => 'post', + 'action' => $special->getLocalUrl( 'action=submit' ), 'id' => 'mw-revdel-form-logs' ) ) . Xml::fieldset( wfMsg( 'revdelete-legend' ) ) ); diff --git a/includes/specials/SpecialUndelete.php b/includes/specials/SpecialUndelete.php index c783710ecf..c47f43a0ee 100644 --- a/includes/specials/SpecialUndelete.php +++ b/includes/specials/SpecialUndelete.php @@ -1139,10 +1139,11 @@ class UndeleteForm { if( $wgUser->isAllowed( 'deleterevision' ) ) { if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) { // If revision was hidden from sysops - $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), '('.wfMsgHtml('rev-delundel').')' ); + $revdlink = Xml::tags( 'span', array( 'class'=>'mw-revdelundel-link' ), + '('.wfMsgHtml('rev-delundel').')' ); } else { $query = array( 'target' => $this->mTargetObj->getPrefixedUrl(), - 'artimestamp[]' => $ts + 'artimestamp' => $ts ); $revdlink = $sk->revDeleteLink( $query, $rev->isDeleted( Revision::DELETED_RESTRICTED ) ); } -- 2.20.1