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

Reply via email to