https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114756

Revision: 114756
Author:   bsitu
Date:     2012-04-06 01:02:35 +0000 (Fri, 06 Apr 2012)
Log Message:
-----------
sync patrol and pagetriage queue

Modified Paths:
--------------
    trunk/extensions/PageTriage/PageTriage.hooks.php
    trunk/extensions/PageTriage/PageTriage.php
    trunk/extensions/PageTriage/includes/PageTriage.php

Modified: trunk/extensions/PageTriage/PageTriage.hooks.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-06 00:45:51 UTC 
(rev 114755)
+++ trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-06 01:02:35 UTC 
(rev 114756)
@@ -158,4 +158,26 @@
 
                return true;
        }
+       
+       /**
+        * Sync records from patrol queue to triage queue 
+        *
+        * 'MarkPatrolledComplete': after an edit is marked patrolled
+        * $rcid: ID of the revision marked as patrolled
+        * $user: user (object) who marked the edit patrolled
+        * $wcOnlySysopsCanPatrol: config setting indicating whether the user
+        * must be a sysop to patrol the edit
+        */
+       public static function onMarkPatrolledComplete( $rcid, &$user, 
$wcOnlySysopsCanPatrol ) {
+               $rc = RecentChange::newFromId( $rcid );
+
+               if ( $rc ) {
+                       $pt = new PageTriage( $rc->getAttribute( 'rc_cur_id' ) 
);
+                       if ( $pt->addToPageTriageQueue() ) {
+                               $pt->setTriageStatus( '1', $user, true );       
+                       }
+               }
+
+               return true;
+       }
 }

Modified: trunk/extensions/PageTriage/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.php  2012-04-06 00:45:51 UTC (rev 
114755)
+++ trunk/extensions/PageTriage/PageTriage.php  2012-04-06 01:02:35 UTC (rev 
114756)
@@ -86,6 +86,7 @@
 $wgHooks['GetPreferences'][] = 'PageTriageHooks::onGetPreferences';
 $wgHooks['ArticleViewHeader'][] = 'PageTriageHooks::onArticleViewHeader';
 $wgHooks['ArticleDeleteComplete'][] = 
'PageTriageHooks::onArticleDeleteComplete';
+$wgHooks['MarkPatrolledComplete'][] = 
'PageTriageHooks::onMarkPatrolledComplete';
 
 $wgPageTriageMarkPatrolledLinkExpiry = 3600 * 24 * 30; // 30 days
 

Modified: trunk/extensions/PageTriage/includes/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/includes/PageTriage.php 2012-04-06 00:45:51 UTC 
(rev 114755)
+++ trunk/extensions/PageTriage/includes/PageTriage.php 2012-04-06 01:02:35 UTC 
(rev 114756)
@@ -9,12 +9,14 @@
 
        // additional property
        protected $mMetadata;
+       protected $mLoaded;
 
        /**
         * @param $pageId int
         */
        public function __construct( $pageId ) {
                $this->mPageId = intval( $pageId );
+               $this->mLoaded = false;
        }
 
        /**
@@ -22,9 +24,16 @@
         * @return bool
         */
        public function addToPageTriageQueue() {
+               if ( $this->retrieve() ) {
+                       if ( $this->mReviewed ) {
+                               $this->setTriageStatus( '0' );
+                       }
+                       return true;
+               }
+
                $dbr = wfGetDB( DB_SLAVE );
                $dbw = wfGetDB( DB_MASTER );
-               
+
                // Pull page creation date from database
                $res = $dbr->selectRow(
                        'revision',
@@ -32,19 +41,19 @@
                        array( 'rev_page' => $this->mPageId ),
                        __METHOD__
                );
-               
+
                if ( !$res ) {
                        return false;
                }
-               
+
                $row = array(
                        'ptrp_page_id' => $this->mPageId,
                        'ptrp_reviewed' => '0',
                        'ptrp_timestamp' => $res->creation_date
                );
+               
+               $dbw->insert( 'pagetriage_page', $row, __METHOD__, array( 
'IGNORE' ) );
 
-               $dbw->replace( 'pagetriage_page', array( 'ptrp_page_id' ), 
$row, __METHOD__ );
-
                return true;
        }
        
@@ -52,27 +61,39 @@
         * set the triage status of an article in pagetriage queue
         * @param $reviewed string - '1'/'0'
         * @param $user User
+        * @param $fromRc bool
         */
-       public function setTriageStatus( $reviewed, User $user = null ) {
-               $dbw = wfGetDB( DB_MASTER );
+       public function setTriageStatus( $reviewed, User $user = null, $fromRc 
= false ) {
+
+               if ( !in_array( $reviewed, array( '1', '0') ) ) {
+                       $reviewed = '0';
+               }
                
-               $row = array();
-               if ( $reviewed === '1' ) {
-                       $row['ptrp_reviewed'] = '1';
-               } else {
-                       $row['ptrp_reviewed'] = '0';
+               if ( !$this->retrieve() || $this->mReviewed == $reviewed ) {
+                       return;
                }
 
-               $this->mReviewed = $row['ptrp_reviewed'];
+               $dbw = wfGetDB( DB_MASTER );
 
+               $row = array( 'ptrp_reviewed' => $reviewed );
+               $this->mReviewed = $reviewed;
+
                $dbw->begin();
+               //@Todo - case for marking a page as untriaged and make sure 
this logic is correct
+               if ( !$fromRc && $this->mReviewed && !is_null( $user ) ) {
+                       $rc = RecentChange::newFromConds( array( 'rc_cur_id' => 
$this->mPageId, 'rc_new' => '1' ) );
+                       if ( $rc && !$rc->getAttribute('rc_patrolled') ) {
+                               $rc->reallyMarkPatrolled();
+                               PatrolLog::record( $rc, false, $user );
+                       }       
+               }
+
                $dbw->update( 'pagetriage_page', $row, array( 'ptrp_page_id' => 
$this->mPageId ), __METHOD__ );
-               
                // Log it if set by user
                if ( $dbw->affectedRows() > 0 && !is_null( $user ) && 
!$user->isAnon() ) {
                        $this->logUserTriageAction( $user );
                }
-               $dbw->commit();
+               $dbw->commit(); 
        }
        
        /**
@@ -80,6 +101,10 @@
         * @return bool
         */
        public function retrieve() {
+               if ( $this->mLoaded ) {
+                       return true;
+               }
+
                $dbr = wfGetDB( DB_SLAVE );
                
                $res = $dbr->selectRow(
@@ -88,13 +113,14 @@
                        array( 'ptrp_page_id' => $this->mPageId ),
                        __METHOD__
                );
-               
+
                if ( !$res ) {
                        return false;
                }
-               
+
                $this->mReviewed = $res->ptrp_reviewed;
                $this->mTimestamp = $res->ptrp_timestamp;
+               $this->mLoaded = true;
                return true;
        }
        


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

Reply via email to