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