Made RecentChange defer the save() method via DeferredUpdates
authorAaron Schulz <aschulz@wikimedia.org>
Thu, 21 May 2015 07:21:03 +0000 (00:21 -0700)
committerpaladox <thomasmulhall410@yahoo.com>
Fri, 22 May 2015 20:00:29 +0000 (21:00 +0100)
* Also made it handle calling PatrolLog::record() itself

Bug: T100042
Change-Id: I58ef060e02b89a5f9dadc0dbc4edba667932beda

includes/changes/RecentChange.php
includes/page/WikiPage.php

index aa210e3..7ea6777 100644 (file)
@@ -517,8 +517,10 @@ class RecentChange {
         * @param int $patrol
         * @return RecentChange
         */
-       public static function notifyEdit( $timestamp, &$title, $minor, &$user, $comment, $oldId,
-               $lastTimestamp, $bot, $ip = '', $oldSize = 0, $newSize = 0, $newId = 0, $patrol = 0 ) {
+       public static function notifyEdit(
+               $timestamp, &$title, $minor, &$user, $comment, $oldId, $lastTimestamp,
+               $bot, $ip = '', $oldSize = 0, $newSize = 0, $newId = 0, $patrol = 0
+       ) {
                $rc = new RecentChange;
                $rc->mTitle = $title;
                $rc->mPerformer = $user;
@@ -555,7 +557,13 @@ class RecentChange {
                        'newSize' => $newSize,
                        'pageStatus' => 'changed'
                );
-               $rc->save();
+
+               DeferredUpdates::addCallableUpdate( function() use ( $rc ) {
+                       $rc->save();
+                       if ( $rc->mAttribs['rc_patrolled'] ) {
+                               PatrolLog::record( $rc, true, $rc->getPerformer() );
+                       }
+               } );
 
                return $rc;
        }
@@ -576,8 +584,10 @@ class RecentChange {
         * @param int $patrol
         * @return RecentChange
         */
-       public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot,
-               $ip = '', $size = 0, $newId = 0, $patrol = 0 ) {
+       public static function notifyNew(
+               $timestamp, &$title, $minor, &$user, $comment, $bot,
+               $ip = '', $size = 0, $newId = 0, $patrol = 0
+       ) {
                $rc = new RecentChange;
                $rc->mTitle = $title;
                $rc->mPerformer = $user;
@@ -614,7 +624,13 @@ class RecentChange {
                        'newSize' => $size,
                        'pageStatus' => 'created'
                );
-               $rc->save();
+
+               DeferredUpdates::addCallableUpdate( function() use ( $rc ) {
+                       $rc->save();
+                       if ( $rc->mAttribs['rc_patrolled'] ) {
+                               PatrolLog::record( $rc, true, $rc->getPerformer() );
+                       }
+               } );
 
                return $rc;
        }
index 71b3b79..5e4438a 100644 (file)
@@ -1835,18 +1835,13 @@ class WikiPage implements Page, IDBAccessObject {
                                if ( !( $flags & EDIT_SUPPRESS_RC ) ) {
                                        // Mark as patrolled if the user can do so
                                        $patrolled = $wgUseRCPatrol && !count(
-                                       $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
-
+                                               $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
                                        // Add RC row to the DB
-                                       $rc = RecentChange::notifyEdit( $now, $this->mTitle, $isminor, $user, $summary,
+                                       RecentChange::notifyEdit(
+                                               $now, $this->mTitle, $isminor, $user, $summary,
                                                $oldid, $this->getTimestamp(), $bot, '', $oldsize, $newsize,
                                                $revisionId, $patrolled
                                        );
-
-                                       // Log auto-patrolled edits
-                                       if ( $patrolled ) {
-                                               PatrolLog::record( $rc, true, $user );
-                                       }
                                }
 
                                $user->incEditCount();
@@ -1937,13 +1932,10 @@ class WikiPage implements Page, IDBAccessObject {
                                $patrolled = ( $wgUseRCPatrol || $wgUseNPPatrol ) && !count(
                                        $this->mTitle->getUserPermissionsErrors( 'autopatrol', $user ) );
                                // Add RC row to the DB
-                               $rc = RecentChange::notifyNew( $now, $this->mTitle, $isminor, $user, $summary, $bot,
-                                       '', $newsize, $revisionId, $patrolled );
-
-                               // Log auto-patrolled edits
-                               if ( $patrolled ) {
-                                       PatrolLog::record( $rc, true, $user );
-                               }
+                               RecentChange::notifyNew(
+                                       $now, $this->mTitle, $isminor, $user, $summary, $bot,
+                                       '', $newsize, $revisionId, $patrolled
+                               );
                        }
 
                        $user->incEditCount();