Revision: 48482
Author: aaron
Date: 2009-03-17 09:02:17 +0000 (Tue, 17 Mar 2009)
Log Message:
-----------
* [schema change] Added ability to restrict autoreview per page
* Minor stable version log summary fix for 'other'
* Improved a few messages
* Other minor fixes
Modified Paths:
--------------
trunk/extensions/FlaggedRevs/FlaggedRevs.class.php
trunk/extensions/FlaggedRevs/FlaggedRevs.hooks.php
trunk/extensions/FlaggedRevs/FlaggedRevs.php
trunk/extensions/FlaggedRevs/FlaggedRevs.sql
trunk/extensions/FlaggedRevs/language/Stabilization.i18n.php
trunk/extensions/FlaggedRevs/specialpages/Stabilization_body.php
Added Paths:
-----------
trunk/extensions/FlaggedRevs/archives/patch-fpc_level.sql
Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.class.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.class.php 2009-03-17 08:37:25 UTC
(rev 48481)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.class.php 2009-03-17 09:02:17 UTC
(rev 48482)
@@ -831,7 +831,7 @@
public static function getPageVisibilitySettings( &$title,
$forUpdate=false ) {
$db = $forUpdate ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
$row = $db->selectRow( 'flaggedpage_config',
- array( 'fpc_select', 'fpc_override', 'fpc_expiry' ),
+ array( 'fpc_select', 'fpc_override', 'fpc_level',
'fpc_expiry' ),
array( 'fpc_page_id' => $title->getArticleID() ),
__METHOD__
);
@@ -855,10 +855,11 @@
## 1 = quality -> stable
## 0 = none
$select = self::getPrecedence();
- return array( 'select' => $select, 'override' =>
$override, 'expiry' => 'infinity' );
+ return array( 'select' => $select, 'override' =>
$override,
+ 'autoreview' => '', 'expiry' => 'infinity' );
}
return array('select' => $row->fpc_select, 'override' =>
$row->fpc_override,
- 'expiry' => $row->fpc_expiry );
+ 'autoreview' => $row->fpc_level, 'expiry' =>
$row->fpc_expiry );
}
/**
Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.hooks.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.hooks.php 2009-03-17 08:37:25 UTC
(rev 48481)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.hooks.php 2009-03-17 09:02:17 UTC
(rev 48482)
@@ -718,7 +718,18 @@
$key = wfMemcKey( 'flaggedrevs', 'includesSynced',
$rev->getPage() );
global $wgMemc, $wgParserCacheExpireTime;
# Auto-reviewing must be enabled and user must have the
required permissions
- if( !$wgFlaggedRevsAutoReview ||
(!$user->isAllowed('autoreview') && !$user->isAllowed('bot')) ) {
+ if( !$wgFlaggedRevsAutoReview ||
!$user->isAllowed('autoreview') ) {
+ $isAllowed = false;
+ } else {
+ # Get autoreview restriction settings...
+ $config = FlaggedRevs::getPageVisibilitySettings(
$title, true );
+ # Convert Sysop -> protect
+ $right = ($config['autoreview'] === 'sysop') ?
'protect' : $config['autoreview'];
+ # Check if the user has the required right, if any
+ $isAllowed = !$right || $user->isAllowed($right);
+ }
+ # Auto-reviewing must be enabled and user must have the
required permissions
+ if( !$isAllowed ) {
$wgMemc->set( $key, FlaggedRevs::makeMemcObj('false'),
$wgParserCacheExpireTime );
return true; // done! edit pending!
}
@@ -894,8 +905,13 @@
*/
public static function checkAutoPromote( $user, &$promote ) {
global $wgFlaggedRevsAutopromote;
+ # Make sure bots always have autoreview
+ if( $user->isAllowed('bot') ) {
+ $promote[] = 'autoreview';
+ return true;
+ }
if( empty($wgFlaggedRevsAutopromote) || !$user->getId() ||
$user->isAllowed('autoreview') ) {
- return true; // not needed
+ return true; // not needed or $wgFlaggedRevsAutopromote
is off
}
# Check user email
if( $wgFlaggedRevsAutopromote['email'] &&
!$user->isEmailConfirmed() ) {
Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.php
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.php 2009-03-17 08:37:25 UTC
(rev 48481)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.php 2009-03-17 09:02:17 UTC
(rev 48482)
@@ -144,6 +144,9 @@
'style' => array( 'review' => 3 ),
);
+# Restriction levels for auto-review right at Stabilization page
+$wgFlaggedRevsRestrictionLevels = array( '', 'sysop' );
+
# Please set these as something different. Any text will do, though it probably
# shouldn't be very short (less secure) or very long (waste of resources).
# There must be two codes, and only the first two are checked.
@@ -549,6 +552,7 @@
$wgExtNewFields[] = array( 'flaggedpages', 'fp_pending_since',
"$base/archives/patch-fp_pending_since.sql" );
$wgExtNewFields[] = array( 'reader_feedback', 'rfb_timestamp',
"$base/archives/patch-rfb_timestamp.sql" );
$wgExtNewFields[] = array( 'reader_feedback', 'rfb_ratings',
"$base/archives/patch-rfb_ratings.sql" );
+ $wgExtNewFields[] = array( 'flaggedpage_config', 'fpc_level',
"$base/archives/patch-fpc_level.sql" );
} else if( $wgDBtype == 'postgres' ) {
$wgExtNewTables[] = array( 'flaggedrevs',
"$base/FlaggedRevs.pg.sql" ); // Initial install tables
$wgExtPGNewFields[] = array('flaggedpage_config', 'fpc_expiry',
"TIMESTAMPTZ NULL" );
@@ -559,6 +563,7 @@
$wgExtNewTables[] = array( 'reader_feedback',
"$base/postgres/patch-reader_feedback.sql" );
$wgExtNewTables[] = array( 'flaggedrevs_tracking',
"$base/postgres/patch-flaggedrevs_tracking.sql" );
$wgExtNewIndexes[] = array('flaggedpages', 'fp_pending_since',
"$base/postgres/patch-fp_pending_since.sql" );
+ $wgExtPGNewFields[] = array('flaggedpage_config', 'fpc_level',
"TEXT NULL" );
}
return true;
}
Modified: trunk/extensions/FlaggedRevs/FlaggedRevs.sql
===================================================================
--- trunk/extensions/FlaggedRevs/FlaggedRevs.sql 2009-03-17 08:37:25 UTC
(rev 48481)
+++ trunk/extensions/FlaggedRevs/FlaggedRevs.sql 2009-03-17 09:02:17 UTC
(rev 48482)
@@ -69,6 +69,8 @@
fpc_select integer NOT NULL,
-- Override the page?
fpc_override bool NOT NULL,
+ -- The protection level (Sysop, etc) for autoreview
+ fpc_level varbinary(60) NULL,
-- Field for time-limited settings
fpc_expiry varbinary(14) NOT NULL default 'infinity',
Added: trunk/extensions/FlaggedRevs/archives/patch-fpc_level.sql
===================================================================
--- trunk/extensions/FlaggedRevs/archives/patch-fpc_level.sql
(rev 0)
+++ trunk/extensions/FlaggedRevs/archives/patch-fpc_level.sql 2009-03-17
09:02:17 UTC (rev 48482)
@@ -0,0 +1,3 @@
+-- The protection level (Sysop, autoconfirmed, etc) for autoreview
+ALTER TABLE /*$wgDBprefix*/flaggedpage_config
+ ADD fpc_level varbinary(60) NULL;
Property changes on: trunk/extensions/FlaggedRevs/archives/patch-fpc_level.sql
___________________________________________________________________
Added: svn:eol-style
+ native
Modified: trunk/extensions/FlaggedRevs/language/Stabilization.i18n.php
===================================================================
--- trunk/extensions/FlaggedRevs/language/Stabilization.i18n.php
2009-03-17 08:37:25 UTC (rev 48481)
+++ trunk/extensions/FlaggedRevs/language/Stabilization.i18n.php
2009-03-17 09:02:17 UTC (rev 48482)
@@ -20,11 +20,13 @@
'stabilization-leg' => 'Confirm stable version settings',
'stabilization-select' => 'Stable version selection',
'stabilization-select1' => 'The latest quality revision; if not
present, then the latest sighted one',
- 'stabilization-select2' => 'The latest reviewed revision',
+ 'stabilization-select2' => 'The latest reviewed revision, regardless of
validation level',
'stabilization-select3' => 'The latest pristine revision; if not
present, then the latest quality or sighted one',
'stabilization-def' => 'Revision displayed on default page view',
'stabilization-def1' => 'The stable revision; if not present, then the
current one',
'stabilization-def2' => 'The current revision',
+ 'stabilization-restrict' => 'Auto-review restrictions',
+ 'stabilization-restrict-none' => 'No extra restrictions',
'stabilization-submit' => 'Confirm',
'stabilization-notexists' => 'There is no page called "[[:$1|$1]]".
No configuration is possible.',
@@ -41,6 +43,7 @@
'stabilization-def-short' => 'Default',
'stabilization-def-short-0' => 'Current',
'stabilization-def-short-1' => 'Stable',
+ 'stabilization-rest-short' => 'autoreview=$1',
'stabilize_expiry_invalid' => 'Invalid expiration date.',
'stabilize_expiry_old' => 'This expiration time has already passed.',
'stabilize-expiring' => 'expires $1 (UTC)',
Modified: trunk/extensions/FlaggedRevs/specialpages/Stabilization_body.php
===================================================================
--- trunk/extensions/FlaggedRevs/specialpages/Stabilization_body.php
2009-03-17 08:37:25 UTC (rev 48481)
+++ trunk/extensions/FlaggedRevs/specialpages/Stabilization_body.php
2009-03-17 09:02:17 UTC (rev 48482)
@@ -64,6 +64,8 @@
$this->config = FlaggedRevs::getPageVisibilitySettings(
$this->page, true );
$this->select = $this->config['select'];
$this->override = $this->config['override'];
+ # Get autoreview restrictions...
+ $this->autoreview = $this->config['autoreview'];
# Make user readable date for GET requests
$this->oldExpiry = $this->config['expiry'] !== 'infinity' ?
wfTimestamp( TS_RFC2822, $this->config['expiry'] ) :
'infinite';
@@ -71,11 +73,14 @@
if( $wgRequest->wasPosted() ) {
$this->select = $wgRequest->getInt(
'wpStableconfig-select' );
$this->override = intval( $wgRequest->getBool(
'wpStableconfig-override' ) );
+ # Get autoreview restrictions...
+ $this->autoreview = $wgRequest->getVal(
'mwProtect-level-autoreview' );
// Custom expiry takes precedence
$this->expiry = strlen($this->expiry) ? $this->expiry :
$this->expirySelection;
if( $this->expiry == 'existing' ) $this->expiry =
$this->oldExpiry;
// Custom reason takes precedence
- $this->reason = strlen($this->reason) ? $this->reason :
$this->reasonSelection;
+ $this->reason = strlen($this->reason) ||
$this->reasonSelection == 'other' ?
+ $this->reason : $this->reasonSelection;
// Validate precedence setting
$allowed =
array(FLAGGED_VIS_QUALITY,FLAGGED_VIS_LATEST,FLAGGED_VIS_PRISTINE);
if( $this->select && !in_array( $this->select, $allowed
) ) {
@@ -175,6 +180,10 @@
Xml::radioLabel( wfMsg( 'stabilization-select2' ),
'wpStableconfig-select', FLAGGED_VIS_LATEST,
'stable-select2', FLAGGED_VIS_LATEST ==
$this->select, $this->disabledAttrib ) . '<br />' . "\n" .
Xml::closeElement( 'fieldset' ) .
+
+ Xml::fieldset( wfMsg( 'stabilization-restrict' ), false
) .
+ $this->buildSelector( $this->autoreview ) .
+ Xml::closeElement( 'fieldset' ) .
Xml::fieldset( wfMsg( 'stabilization-leg' ), false ) .
Xml::openElement( 'table' );
@@ -256,18 +265,68 @@
$wgOut->addHTML( Xml::element( 'h2', NULL, htmlspecialchars(
LogPage::logName( 'stable' ) ) ) );
LogEventsList::showLogExtract( $wgOut, 'stable',
$this->page->getPrefixedText() );
}
+
+ protected function buildSelector( $selected ) {
+ global $wgUser, $wgFlaggedRevsRestrictionLevels;
+ $levels = array();
+ foreach( $wgFlaggedRevsRestrictionLevels as $key ) {
+ # Don't let them choose levels above their own (aka so
they can still unprotect and edit the page).
+ # but only when the form isn't disabled
+ if( $key == 'sysop' ) {
+ // special case, rewrite sysop to protect and
editprotected
+ if( !$wgUser->isAllowed('protect') &&
!$wgUser->isAllowed('editprotected') && $this->isAllowed )
+ continue;
+ } else {
+ if( !$wgUser->isAllowed($key) &&
$this->isAllowed )
+ continue;
+ }
+ $levels[] = $key;
+ }
+ $id = 'mwProtect-level-autoreview';
+ $attribs = array(
+ 'id' => $id,
+ 'name' => $id,
+ 'size' => count( $levels ),
+ ) + $this->disabledAttrib;
+ $out = Xml::openElement( 'select', $attribs );
+ foreach( $levels as $key ) {
+ $out .= Xml::option( $this->getOptionLabel( $key ),
$key, $key == $selected );
+ }
+ $out .= Xml::closeElement( 'select' );
+ return $out;
+ }
+
+ /**
+ * Prepare the label for a protection selector option
+ *
+ * @param string $permission Permission required
+ * @return string
+ */
+ protected function getOptionLabel( $permission ) {
+ if( $permission == '' ) {
+ return wfMsg( 'stabilization-restrict-none' );
+ } else {
+ $key = "protect-level-{$permission}";
+ $msg = wfMsg( $key );
+ if( wfEmptyMsg( $key, $msg ) )
+ $msg = wfMsg( 'protect-fallback', $permission );
+ return $msg;
+ }
+ }
+
protected function submit() {
- global $wgOut, $wgUser, $wgParser, $wgFlaggedRevsOverride;
+ global $wgOut, $wgUser, $wgParser;
$changed = $reset = false;
$defaultPrecedence = FlaggedRevs::getPrecedence();
- if( $this->select == $defaultPrecedence && $this->override ==
$wgFlaggedRevsOverride ) {
+ $defaultOverride = FlaggedRevs::showStableByDefault();
+ if( $this->select == $defaultPrecedence && $this->override ==
$defaultOverride && !$this->autoreview ) {
$reset = true; // we are going back to site defaults
}
# Take this opportunity to purge out expired configurations
FlaggedRevs::purgeExpiredConfigurations();
-
+ # Parse expiry time given...
if( $reset || $this->expiry == 'infinite' || $this->expiry ==
'indefinite' ) {
$expiry = Block::infinity();
} else {
@@ -287,9 +346,10 @@
$dbw = wfGetDB( DB_MASTER );
# Get current config
$row = $dbw->selectRow( 'flaggedpage_config',
- array( 'fpc_select', 'fpc_override', 'fpc_expiry' ),
+ array( 'fpc_select', 'fpc_override', 'fpc_level',
'fpc_expiry' ),
array( 'fpc_page_id' => $this->page->getArticleID() ),
- __METHOD__ );
+ __METHOD__
+ );
# If setting to site default values, erase the row if there is
one...
if( $row && $reset ) {
$dbw->delete( 'flaggedpage_config',
@@ -297,14 +357,17 @@
__METHOD__ );
$changed = ($dbw->affectedRows() != 0); // did this do
anything?
# Otherwise, add a row unless we are just setting it as the
site default, or it is the same the current one...
- } else if( $this->select !=0 || $this->override !=
$wgFlaggedRevsOverride ) {
- if( !$row || $row->fpc_select != $this->select ||
$row->fpc_override != $this->override || $row->fpc_expiry != $expiry ) {
+ } else if( !$reset ) {
+ if( !$row || $row->fpc_select != $this->select ||
$row->fpc_override != $this->override
+ || $row->fpc_level != $this->autoreview ||
$row->fpc_expiry != $expiry )
+ {
$changed = true;
$dbw->replace( 'flaggedpage_config',
array( 'PRIMARY' ),
array( 'fpc_page_id' =>
$this->page->getArticleID(),
'fpc_select' => $this->select,
'fpc_override' =>
$this->override,
+ 'fpc_level' =>
$this->autoreview,
'fpc_expiry' => $expiry ),
__METHOD__ );
}
@@ -321,6 +384,9 @@
wfMsgForContent("stabilization-sel-short-{$this->select}");
$set[] = wfMsgForContent( "stabilization-def-short" ) .
wfMsgForContent( 'colon-separator' ) .
wfMsgForContent("stabilization-def-short-{$this->override}");
+ if( strlen($this->autoreview) ) {
+ $set[] = "autoreview={$this->autoreview}";
+ }
$settings = '[' . implode(', ',$set). ']';
$reason = '';
@@ -373,7 +439,7 @@
# Take the user to the diff to make sure an outdated version
isn't
# being set at the default. This is really an issue with configs
# that only let certain pages be reviewed.
- if( $this->select != FLAGGED_VIS_LATEST ) {
+ if( $changed && $this->select != FLAGGED_VIS_LATEST ) {
$frev = FlaggedRevision::newFromStable( $this->page,
FR_MASTER );
if( $frev && $frev->getRevId() != $latest ) {
$query =
"oldid={$frev->getRevId()}&diff=cur&diffonly=0"; // override diff-only
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs