http://www.mediawiki.org/wiki/Special:Code/MediaWiki/97886

Revision: 97886
Author:   aaron
Date:     2011-09-23 03:38:14 +0000 (Fri, 23 Sep 2011)
Log Message:
-----------
* Made "under review" notices require the user's consent (bug 31093)
* Added 'cancel' button to review form
* Tweaked JS "back" links to fall through to the link when there is no prior url
* Toned down revreview-update-includes font (too much bold on the form)

Modified Paths:
--------------
    trunk/extensions/FlaggedRevs/FlaggedRevs.php
    trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
    trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.hooks.php
    trunk/extensions/FlaggedRevs/presentation/RejectConfirmationFormUI.php
    trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
    trunk/extensions/FlaggedRevs/presentation/language/RevisionReview.i18n.php
    trunk/extensions/FlaggedRevs/presentation/modules/review.js

Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-09-23 03:21:29 UTC 
(rev 97885)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php        2011-09-23 03:38:14 UTC 
(rev 97886)
@@ -388,7 +388,10 @@
                'revreview-submitedit', 'revreview-submitedit-title',
                'revreview-submit-review', 'revreview-submit-unreview',
                'revreview-submit-reviewed', 'revreview-submit-unreviewed',
-               'revreview-submitting', 'actioncomplete', 'actionfailed'
+               'revreview-submitting', 'actioncomplete', 'actionfailed',
+               'revreview-adv-reviewing-p', 'revreview-adv-reviewing-c',
+               'revreview-sadv-reviewing-p', 'revreview-sadv-reviewing-c',
+               'revreview-advertise-start', 'revreview-advertise-stop'
        ),
        'dependencies'  => array( 'mediawiki.util' ),
        'localBasePath' => $localModulePath,
@@ -500,9 +503,6 @@
 # Implicit autoreview rights group
 $wgHooks['AutopromoteCondition'][] = 'FlaggedRevsHooks::checkAutoPromoteCond';
 
-# Check if a page is currently being reviewed
-$wgHooks['MediaWikiPerformAction'][] = 
'FlaggedRevsUIHooks::onMediaWikiPerformAction';
-
 # Actually register special pages
 $wgHooks['SpecialPage_initList'][] = 'FlaggedRevsUIHooks::defineSpecialPages';
 

Modified: trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php       
2011-09-23 03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/FlaggedPageView.php       
2011-09-23 03:38:14 UTC (rev 97886)
@@ -1416,9 +1416,6 @@
                                $changeDiv = '';
                                # If the user can review then prompt them to 
review them...
                                if ( $wgUser->isAllowed( 'review' ) ) {
-                                       # Set a key to note that someone is 
viewing this
-                                       FRUserActivity::setUserReviewingDiff(
-                                               $wgUser, $oldRev->getId(), 
$newRev->getId() );
                                        // Reviewer just edited...
                                        if ( $wgRequest->getInt( 'shownotice' )
                                                && $newRev->isCurrent()

Modified: trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.hooks.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.hooks.php   
2011-09-23 03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/FlaggedRevsUI.hooks.php   
2011-09-23 03:38:14 UTC (rev 97886)
@@ -119,30 +119,6 @@
                return true;
        }
 
-       public static function onMediaWikiPerformAction(
-               $output, $article, Title $title, $user, $request
-       ) {
-               $fa = FlaggedPage::getTitleInstance( $title );
-               self::maybeMarkUnderReview( $fa, $request );
-               return true;
-       }
-
-       // Mark when an unreviewed page is being reviewed
-       protected static function maybeMarkUnderReview( FlaggedPage $fa, 
WebRequest $request ) {
-               global $wgUser;
-               if ( !$request->getInt( 'reviewing' ) && !$request->getInt( 
'rcid' ) ) {
-                       return true; // not implied by URL
-               }
-               # Set a key to note when someone is reviewing this.
-               # NOTE: diff-to-stable views already handled elsewhere.
-               if ( $fa->isReviewable() && !$fa->getStable() // not reviewed 
yet
-                       && $fa->getTitle()->userCan( 'review' ) )
-               {
-                       FRUserActivity::setUserReviewingPage( $wgUser, 
$fa->getID() );
-               }
-               return true;
-       }
-
        /** Add user preferences */
        public static function onGetPreferences( $user, array &$preferences ) {
                // Box or bar UI

Modified: trunk/extensions/FlaggedRevs/presentation/RejectConfirmationFormUI.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/RejectConfirmationFormUI.php      
2011-09-23 03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/RejectConfirmationFormUI.php      
2011-09-23 03:38:14 UTC (rev 97886)
@@ -147,7 +147,7 @@
                $form .= Html::input( 'wpSubmit', wfMsg( 
'revreview-reject-confirm' ), 'submit' );
                $form .= ' ';
                $form .= $skin->link( $this->form->getPage(), wfMsg( 
'revreview-reject-cancel' ),
-                       array( 'onClick' => 'history.back(); return false;' ),
+                       array( 'onClick' => 'history.back(); return 
!history.length;' ),
                        array( 'oldid' => $this->form->getRefId(), 'diff' => 
$this->form->getOldId() ) );
                $form .= Xml::closeElement( 'form' );
 

Modified: trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php  
2011-09-23 03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/RevisionReviewFormUI.php  
2011-09-23 03:38:14 UTC (rev 97886)
@@ -124,15 +124,18 @@
                $form .= Xml::closeElement( 'legend' ) . "\n";
                # Show explanatory text
                $form .= $this->topNotice;
-               # Show possible conflict warning msg...
+
+               # Check if anyone is reviewing this already and
+               # show a conflict warning message as needed...
                if ( $priorRevId ) {
                        list( $u, $ts ) =
                                FRUserActivity::getUserReviewingDiff( 
$priorRevId, $this->rev->getId() );
                } else {
                        list( $u, $ts ) = FRUserActivity::getUserReviewingPage( 
$this->rev->getPage() );
                }
+               $form .= "<p>";
                if ( $u !== null ) { // page under review...
-                       $form .= '<p><span class="fr-under-review">';
+                       $form .= '<span class="fr-under-review">';
                        if ( $u != $this->user->getName() ) { // by another 
user...
                                $msg = $priorRevId
                                        ? 'revreview-poss-conflict-c'
@@ -143,11 +146,19 @@
                                $msg = $priorRevId
                                        ? 'revreview-adv-reviewing-c'
                                        : 'revreview-adv-reviewing-p';
-                               $form .= wfMsgExt( $msg, 'parseinline',
-                                       $wgLang->date( $ts, true ), 
$wgLang->time( $ts, true ) );
+                               $form .= wfMsgHtml( $msg );
                        }
-                       $form .= "</span></p>\n";
+                       $form .= "</span>";
+               } else { // page not under review; add JS button
+                       $form .= '<span id="mw-fr-reviewing-status" 
style="display:none;"></span>';
                }
+               # Let user toggle advertising that they are reviewing this
+               if ( $u === null || $u === $this->user->getName()  ) {
+                       $form .= '<span id="mw-fr-reviewing-toggle" 
style="display:none;">';
+                       $form .= ' (<a href="javascript:void()"></a>)'; // JS 
activated
+                       $form .= '</span>';
+               }
+               $form .= "</p>\n";
 
                if ( $disabled ) {
                        $form .= Xml::openElement( 'div', array( 'class' => 
'fr-rating-controls-disabled',
@@ -185,11 +196,14 @@
                }
                # Determine if there will be reject button
                $rejectId = $this->rejectRefRevId();
+
                # Add the submit buttons
                $form .= self::submitButtons( $rejectId, $frev, 
(bool)$disabled, $reviewIncludes );
-               # Untoggle "reviewing" status on exit
-               $form .= '<script type="text/javascript">var jsReviewingStatus 
= ' .
-                       (int)( $u == $this->user->getName() ) . "</script>\n";
+               # Add "cancel" link
+               $form .= Linker::link( $article->getTitle(),
+                       wfMsg( 'revreview-cancel' ),
+                       array( 'onClick' => 'history.back(); return 
!history.length;' ) );
+
                # Show stability log if there is anything interesting...
                if ( $article->isPageLocked() ) {
                        $form .= ' ' . FlaggedRevsXML::logToggle( 
'revreview-log-toggle-show' );
@@ -208,7 +222,9 @@
                $form .= Html::hidden( 'oldid', $revId, array( 'id' => 
'mw-fr-input-oldid' ) ) . "\n";
                $form .= Html::hidden( 'wpEditToken', $this->user->editToken() 
) . "\n";
                $form .= Html::hidden( 'changetime', $reviewTime,
-                       array( 'id' => 'mw-fr-input-changetime' ) ) . "\n";; // 
id for JS
+                       array( 'id' => 'mw-fr-input-changetime' ) ) . "\n"; // 
id for JS
+               $form .= Html::hidden( 'userreviewing', (int)($u === 
$this->user->getName()),
+                       array( 'id' => 'mw-fr-user-reviewing' ) ) . "\n"; // id 
for JS
                # Add review parameters
                $form .= Html::hidden( 'templateParams', $templateParams ) . 
"\n";
                $form .= Html::hidden( 'imageParams', $imageParams ) . "\n";

Modified: 
trunk/extensions/FlaggedRevs/presentation/language/RevisionReview.i18n.php
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/language/RevisionReview.i18n.php  
2011-09-23 03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/language/RevisionReview.i18n.php  
2011-09-23 03:38:14 UTC (rev 97886)
@@ -53,6 +53,7 @@
 See the [[Special:Unreviewedpages|list of unreviewed pages]].',
        'revreview-stable1'            => 'You may want to view 
[{{fullurl:$1|stableid=$2}} this flagged version] and see if it is now the 
[{{fullurl:$1|stable=1}} stable version] of this page.',
        'revreview-stable2'            => 'You may want to view the 
[{{fullurl:$1|stable=1}} stable version] of this page.',
+       'revreview-cancel'             => 'Cancel',
        'revreview-submit'             => 'Submit',
        'revreview-submitting'         => 'Submitting...',
        'revreview-submit-review'      => 'Accept revision',
@@ -64,8 +65,12 @@
        'revreview-successful2'        => '\'\'\'Revision of [[:$1|$1]] 
successfully unflagged.\'\'\'',
        'revreview-poss-conflict-p'    => '\'\'\'Warning: [[User:$1|$1]] 
started reviewing this page on $2 at $3.\'\'\'',
        'revreview-poss-conflict-c'    => '\'\'\'Warning: [[User:$1|$1]] 
started reviewing these changes on $2 at $3.\'\'\'',
-       'revreview-adv-reviewing-p'    => '\'\'\'Notice: You are being 
advertised as having started reviewing this page on $1 at $2.\'\'\'',
-       'revreview-adv-reviewing-c'    => '\'\'\'Notice: You are being 
advertised as having started reviewing these changes on $1 at $2.\'\'\'',
+       'revreview-adv-reviewing-p'    => 'Notice: Other reviewers can see that 
you are reviewing this page.',
+       'revreview-adv-reviewing-c'    => 'Notice: Other reviewers can see that 
you are reviewing these changes.',
+       'revreview-sadv-reviewing-p'   => 'Notice: Please advertise yourself as 
reviewing this page.',
+       'revreview-sadv-reviewing-c'   => 'Notice: Please advertise yourself as 
reviewing these changes.',
+       'revreview-advertise-start'    => 'Advertise',
+       'revreview-advertise-stop'     => 'De-advertise',
        'revreview-toolow'             => '\'\'\'You must rate each of the 
attributes higher than "inadequate" in order for a revision to be considered 
reviewed.\'\'\'
 
 To remove the review status of a revision, click "unaccept".
@@ -78,7 +83,7 @@
        'revreview-update-edited-prev'  => '<span 
class="flaggedrevs_important">Your changes are not yet in the stable version. 
There are previous changes pending review.</span>
 
 Please review all the changes shown below to make your edits appear in the 
stable version.',
-       'revreview-update-includes'    => '\'\'\'Templates/files updated 
(unreviewed pages in bold):\'\'\'',
+       'revreview-update-includes'    => 'Templates/files updated (unreviewed 
pages in bold):',
 
        'revreview-reject-header'      => 'Reject changes for $1',
        'revreview-reject-text-list'   => 'By completing this action you will 
be \'\'\'rejecting\'\'\' the source text changes from the following 
{{PLURAL:$1|revision|revisions}} of [[:$2|$2]]:',

Modified: trunk/extensions/FlaggedRevs/presentation/modules/review.js
===================================================================
--- trunk/extensions/FlaggedRevs/presentation/modules/review.js 2011-09-23 
03:21:29 UTC (rev 97885)
+++ trunk/extensions/FlaggedRevs/presentation/modules/review.js 2011-09-23 
03:38:14 UTC (rev 97886)
@@ -5,6 +5,7 @@
  */
 
 window.FlaggedRevsReview = {
+       'isUserReviewing': 0, // user reviewing this page?
        /*
        * Updates for radios/checkboxes on patch by Daniel Arnold (bug 13744).
        * Visually update the revision rating form on change.
@@ -322,17 +323,79 @@
        },
        
        /*
+       * Enable AJAX-based functionality to set that a user is reviewing a 
page/diff
+       */
+       'enableAjaxReviewActivity': function() {
+               // User is already reviewing in another tab...
+               if ( $('#mw-fr-user-reviewing').val() == 1 ) {
+                       var msgkey = $('#mw-fr-input-refid')
+                               ? 'revreview-adv-reviewing-c'
+                               : 'revreview-adv-reviewing-p';
+                       $('#mw-fr-reviewing-status').html(
+                               mw.msg( msgkey, [mw.config.get('wgUserName')] ) 
// advertised notice
+                       );
+                       $('#mw-fr-reviewing-toggle a').html(
+                               mw.msg('revreview-advertise-stop')
+                       ).click( FlaggedRevsReview.deadvertiseReviewing );
+               // User is not already reviewing this....
+               } else {
+                       var msgkey = $('#mw-fr-input-refid')
+                               ? 'revreview-sadv-reviewing-c'
+                               : 'revreview-sadv-reviewing-p';
+                       $('#mw-fr-reviewing-status').html(
+                               mw.msg( msgkey, [mw.config.get('wgUserName')] ) 
// suggest to advertise
+                       );
+                       
+                       $('#mw-fr-reviewing-toggle a').html(
+                               mw.msg('revreview-advertise-start')
+                       ).click( FlaggedRevsReview.advertiseReviewing );
+               }
+               $('#mw-fr-reviewing-status').addClass('fr-under-review').show();
+               $('#mw-fr-reviewing-toggle').show();
+       },
+       
+       /*
+       * Flag users as "now reviewing"
+       */
+       'advertiseReviewing': function() {
+               FlaggedRevsReview.setReviewingStatus( 1 );
+               var msgkey = $('#mw-fr-input-refid')
+                       ? 'revreview-adv-reviewing-c' // diff
+                       : 'revreview-adv-reviewing-p' // page
+               $('#mw-fr-reviewing-status').html(
+                       mw.msg( msgkey, [mw.config.get('wgUserName')] )
+               );
+               // Invert toggle text/function...
+               $('#mw-fr-reviewing-toggle a').html(
+                       mw.msg('revreview-advertise-stop')
+               ).unbind('click').click( FlaggedRevsReview.deadvertiseReviewing 
);
+       },
+       
+       /*
        * Flag users as "no longer reviewing"
        */
        'deadvertiseReviewing': function() {
-               var form = document.getElementById('mw-fr-reviewform');
-               if( form && jsReviewingStatus ) {
-                       var oRevId = 
document.getElementById('mw-fr-input-refid').value;
-                       var nRevId = 
document.getElementById('mw-fr-input-oldid').value;
-               } else if( location.href.indexOf('&reviewing=1') != -1 ) {
-                       var oRevId = 0;
-                       var nRevId = mw.config.get('wgCurRevisionId');
-               }
+               FlaggedRevsReview.setReviewingStatus( 0 );
+               var msgkey = $('#mw-fr-input-refid')
+                       ? 'revreview-sadv-reviewing-c' // diff
+                       : 'revreview-sadv-reviewing-p' // page
+               $('#mw-fr-reviewing-status').html(
+                       mw.msg( msgkey, [mw.config.get('wgUserName')] )
+               );
+               // Invert toggle text/function...
+               $('#mw-fr-reviewing-toggle a').html(
+                       mw.msg('revreview-advertise-start')
+               ).unbind('click').click( FlaggedRevsReview.advertiseReviewing );
+       },
+       
+       /*
+       * Set reviewing status for this page/diff
+       */
+       'setReviewingStatus': function( value ) {
+               // Get {previd,oldid} array for this page view.
+               // The previd value will be 0 if this is not a diff view.
+               var oRevId = $('#mw-fr-input-refid') ? 
$('#mw-fr-input-refid').val() : 0;
+               var nRevId = $('#mw-fr-input-oldid') ? 
$('#mw-fr-input-oldid').val() : 0;
                if ( nRevId > 0 ) {
                        // Send GET request via AJAX!
                        var call = jQuery.ajax({
@@ -341,15 +404,16 @@
                                        action          : 'reviewactivity',
                                        previd          : oRevId,
                                        oldid           : nRevId,
-                                       reviewing       : 0
+                                       reviewing       : value
                                },
                                type    : "POST",
                                dataType: "html", // response type
-                               timeout : 2000, // don't delay user exiting
+                               timeout : 1700, // don't delay user exiting
                                async   : false
                        });
                }
-               return;
+               FlaggedRevsReview.isUserReviewing = value;
+               return ( call.status == 200 );
        }
 };
 
@@ -357,6 +421,11 @@
 FlaggedRevsReview.maybeDisableAcceptButton();
 FlaggedRevsReview.updateRatingFormColors();
 FlaggedRevsReview.enableAjaxReview();
+FlaggedRevsReview.enableAjaxReviewActivity();
 
 // Flag users as "no longer reviewing" on navigate-away
-window.onbeforeunload = FlaggedRevsReview.deadvertiseReviewing;
+window.onbeforeunload = function( e ) {
+       if ( FlaggedRevsReview.isUserReviewing == 1 ) {
+               FlaggedRevsReview.deadvertiseReviewing;
+       }
+};


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to