Fix url params for multi-item deletion by converting to CVS
authorAaron Schulz <aaron@users.mediawiki.org>
Wed, 25 Mar 2009 17:52:40 +0000 (17:52 +0000)
committerAaron Schulz <aaron@users.mediawiki.org>
Wed, 25 Mar 2009 17:52:40 +0000 (17:52 +0000)
includes/ImagePage.php
includes/LogEventsList.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUndelete.php

index 99e2d28..4f3b859 100644 (file)
@@ -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' ),
index 8000d31..19900b4 100644 (file)
@@ -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 ) );
                }
index 7fdb3cc..7751741 100644 (file)
@@ -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( "<h2>" . htmlspecialchars( LogPage::logName( 'delete' ) ) . "</h2>\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( "<h2>" . htmlspecialchars( LogPage::logName( 'suppress' ) ) . "</h2>\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' ) )
                );
                
index c783710..c47f43a 100644 (file)
@@ -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 ) );
                        }