Revision: 49226
Author:   aaron
Date:     2009-04-06 01:43:38 +0000 (Mon, 06 Apr 2009)

Log Message:
-----------
* (bug 17543) Allow partial hiding of top revision
* Fixed isCurrent() check
* Cleaned up/fixed some UI code duplication

Modified Paths:
--------------
    trunk/phase3/includes/PageHistory.php
    trunk/phase3/includes/specials/SpecialRevisiondelete.php
    trunk/phase3/languages/messages/MessagesEn.php
    trunk/phase3/maintenance/language/messages.inc

Modified: trunk/phase3/includes/PageHistory.php
===================================================================
--- trunk/phase3/includes/PageHistory.php       2009-04-05 20:18:02 UTC (rev 
49225)
+++ trunk/phase3/includes/PageHistory.php       2009-04-06 01:43:38 UTC (rev 
49226)
@@ -268,11 +268,7 @@
                $s = "($curlink) ($lastlink) $arbitrary";
 
                if( $wgUser->isAllowed( 'deleterevision' ) ) {
-                       if( $latest ) {
-                               // We don't currently handle well changing the 
top revision's settings
-                               $del = Xml::tags( 'span', array( 
'class'=>'mw-revdelundel-link' ), '('.
-                                       $this->message['rev-delundel'].')' );
-                       } else if( !$rev->userCan( Revision::DELETED_RESTRICTED 
) ) {
+                       if( !$rev->userCan( Revision::DELETED_RESTRICTED ) ) {
                                // If revision was hidden from sysops
                                $del = Xml::tags( 'span', array( 
'class'=>'mw-revdelundel-link' ), '('.
                                        $this->message['rev-delundel'].')' );

Modified: trunk/phase3/includes/specials/SpecialRevisiondelete.php
===================================================================
--- trunk/phase3/includes/specials/SpecialRevisiondelete.php    2009-04-05 
20:18:02 UTC (rev 49225)
+++ trunk/phase3/includes/specials/SpecialRevisiondelete.php    2009-04-06 
01:43:38 UTC (rev 49226)
@@ -267,11 +267,9 @@
                                $revObjs[$row->rev_id] = new Revision( $row );
                        }
                        foreach( $this->revisions as $revid ) {
-                               // Hiding top revisison is bad
-                               if( !isset($revObjs[$revid]) || 
$revObjs[$revid]->isCurrent() ) {
-                                       continue;
-                               } else if( 
!$revObjs[$revid]->userCan(Revision::DELETED_RESTRICTED) ) {
-                               // If a rev is hidden from sysops
+                               if( !isset($revObjs[$revid]) ) continue; // 
Must exist
+                               // Check if the revision was Oversighted
+                               if( 
!$revObjs[$revid]->userCan(Revision::DELETED_RESTRICTED) ) {
                                        if( !$this->wasPosted ) {
                                                $wgOut->permissionRequired( 
'suppressrevision' );
                                                return;
@@ -812,31 +810,26 @@
                        $wgOut->permissionRequired( 'suppressrevision' );
                        return false;
                }
-               # If the save went through, go to success message. Otherwise
-               # bounce back to form...
+               # If the save went through, go to success message...
                if( $this->save( $bitfield, $comment, $this->page ) ) {
                        $this->success();
-               } else if( $request->getCheck( 'oldid' ) || $request->getCheck( 
'artimestamp' ) ) {
-                       return $this->showRevs();
-               } else if( $request->getCheck( 'logid' ) ) {
-                       return $this->showLogs();
-               } else if( $request->getCheck( 'oldimage' ) || 
$request->getCheck( 'fileid' ) ) {
-                       return $this->showImages();
+                       return true;
+               # ...otherwise, bounce back to form...
+               } else {
+                       $this->failure();
                }
+               return false;
        }
 
        private function success() {
                global $wgOut;
-
                $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
-
                $wrap = '<span class="success">$1</span>';
-
                if( $this->deleteKey == 'logid' ) {
                        $wgOut->wrapWikiMsg( $wrap, 'logdelete-success' );
                        $this->showLogItems();
                } else if( $this->deleteKey == 'oldid' || $this->deleteKey == 
'artimestamp' ) {
-                               $wgOut->wrapWikiMsg( $wrap, 'revdelete-success' 
);
+                       $wgOut->wrapWikiMsg( $wrap, 'revdelete-success' );
                        $this->showRevs();
                } else if( $this->deleteKey == 'fileid' ) {
                        $wgOut->wrapWikiMsg( $wrap, 'revdelete-success' );
@@ -846,6 +839,24 @@
                        $this->showImages();
                }
        }
+       
+       private function failure() {
+               global $wgOut;
+               $wgOut->setPagetitle( wfMsg( 'actioncomplete' ) );
+               $wrap = '<span class="error">$1</span>';
+               if( $this->deleteKey == 'logid' ) {
+                       $this->showLogItems();
+               } else if( $this->deleteKey == 'oldid' || $this->deleteKey == 
'artimestamp' ) {
+                       $wgOut->wrapWikiMsg( $wrap, 'revdelete-failure' );
+                       $this->showRevs();
+               } else if( $this->deleteKey == 'fileid' ) {
+                       $wgOut->wrapWikiMsg( $wrap, 'revdelete-failure' );
+                       $this->showImages();
+               } else if( $this->deleteKey == 'oldimage' ) {
+                       $wgOut->wrapWikiMsg( $wrap, 'revdelete-failure' );
+                       $this->showImages();
+               }
+       }
 
        /**
         * Put together a rev_deleted bitfield from the submitted checkboxes
@@ -882,6 +893,7 @@
                } else if( isset($this->events) ) {
                        return $deleter->setEventVisibility( $title, 
$this->events, $bitfield, $reason );
                }
+               return false;
        }
 }
 
@@ -910,30 +922,32 @@
                foreach( $items as $revid ) {
                        $where[] = intval($revid);
                }
-               $result = $this->dbw->select( 'revision', '*',
-                       array(
-                               'rev_page' => $title->getArticleID(),
-                               'rev_id' => $where ),
-                       __METHOD__ );
+               $result = $this->dbw->select( array('revision','page'), '*',
+                       array( 'rev_page' => $title->getArticleID(),
+                               'rev_id' => $where, 'rev_page = page_id' ),
+                       __METHOD__
+               );
                while( $row = $this->dbw->fetchObject( $result ) ) {
                        $revObjs[$row->rev_id] = new Revision( $row );
                }
                // To work!
                foreach( $items as $revid ) {
-                       if( !isset($revObjs[$revid]) || 
$revObjs[$revid]->isCurrent() ) {
+                       if( !isset($revObjs[$revid]) ) {
                                $success = false;
                                continue; // Must exist
+                       } else if( $revObjs[$revid]->isCurrent() && ($bitfield 
& Revision::DELETED_TEXT) ) {
+                               $success = false;
+                               continue; // Cannot hide current version text
                        } else if( 
!$revObjs[$revid]->userCan(Revision::DELETED_RESTRICTED) ) {
-                       $userAllowedAll=false;
+                       $userAllowedAll = false;
                                continue;
                        }
                        // For logging, maintain a count of revisions
                        if( $revObjs[$revid]->mDeleted != $bitfield ) {
-                               $revCount++;
-                               $revIDs[]=$revid;
-
+                               $revIDs[] = $revid;
                                $this->updateRevision( $revObjs[$revid], 
$bitfield );
                                $this->updateRecentChangesEdits( 
$revObjs[$revid], $bitfield, false );
+                               $revCount++;
                        }
                }
                // Clear caches...

Modified: trunk/phase3/languages/messages/MessagesEn.php
===================================================================
--- trunk/phase3/languages/messages/MessagesEn.php      2009-04-05 20:18:02 UTC 
(rev 49225)
+++ trunk/phase3/languages/messages/MessagesEn.php      2009-04-06 01:43:38 UTC 
(rev 49226)
@@ -1340,6 +1340,7 @@
 'revdelete-logentry'             => 'changed revision visibility of [[$1]]',
 'logdelete-logentry'             => 'changed event visibility of [[$1]]',
 'revdelete-success'              => "'''Revision visibility successfully 
set.'''",
+'revdelete-failure'              => "'''Revision visibility could not be 
set.'''",
 'logdelete-success'              => "'''Log visibility successfully set.'''",
 'revdel-restore'                 => 'change visibility',
 'pagehist'                       => 'Page history',

Modified: trunk/phase3/maintenance/language/messages.inc
===================================================================
--- trunk/phase3/maintenance/language/messages.inc      2009-04-05 20:18:02 UTC 
(rev 49225)
+++ trunk/phase3/maintenance/language/messages.inc      2009-04-06 01:43:38 UTC 
(rev 49226)
@@ -674,6 +674,7 @@
                'revdelete-logaction',
                'logdelete-logaction',
                'revdelete-success',
+               'revdelete-failure',
                'logdelete-success',
                'revdel-restore',
                'pagehist',



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to