From: Kunal Mehta Date: Tue, 27 Oct 2015 21:49:51 +0000 (-0700) Subject: LinksUpdate: Keep track of the triggering User X-Git-Tag: 1.31.0-rc.0~9202 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/banques/?a=commitdiff_plain;h=c52e5a21f6e6d98524960bd63a294504c65153e3;p=lhc%2Fweb%2Fwiklou.git LinksUpdate: Keep track of the triggering User So extensions like Echo are able to attribute post-edit link updates to specific the users who triggered them. Bug: T116485 Change-Id: I083736a174b6bc15e3ce60b2b107c697d0ac13da --- diff --git a/includes/deferred/LinksUpdate.php b/includes/deferred/LinksUpdate.php index 93c75ee31f..9a24b96366 100644 --- a/includes/deferred/LinksUpdate.php +++ b/includes/deferred/LinksUpdate.php @@ -77,6 +77,11 @@ class LinksUpdate extends SqlDataUpdate implements EnqueueableDataUpdate { */ private $linkDeletions = null; + /** + * @var User|null + */ + private $user; + /** * Constructor * @@ -907,6 +912,24 @@ class LinksUpdate extends SqlDataUpdate implements EnqueueableDataUpdate { $this->mRevision = $revision; } + /** + * Set the User who triggered this LinksUpdate + * + * @since 1.27 + * @param User $user + */ + public function setTriggeringUser( User $user ) { + $this->user = $user; + } + + /** + * @since 1.27 + * @return null|User + */ + public function getTriggeringUser() { + return $this->user; + } + /** * Invalidate any necessary link lists related to page property changes * @param array $changed @@ -980,6 +1003,14 @@ class LinksUpdate extends SqlDataUpdate implements EnqueueableDataUpdate { } public function getAsJobSpecification() { + if ( $this->user ) { + $userInfo = array( + 'userId' => $this->user->getId(), + 'userName' => $this->user->getName(), + ); + } else { + $userInfo = false; + } return array( 'wiki' => $this->mDb->getWikiID(), 'job' => new JobSpecification( @@ -987,7 +1018,8 @@ class LinksUpdate extends SqlDataUpdate implements EnqueueableDataUpdate { array( // Reuse the parser cache if it was saved 'rootJobTimestamp' => $this->mParserOutput->getCacheTime(), - 'useRecursiveLinksUpdate' => $this->mRecursive + 'useRecursiveLinksUpdate' => $this->mRecursive, + 'triggeringUser' => $userInfo, ), array( 'removeDuplicates' => true ), $this->getTitle() diff --git a/includes/jobqueue/jobs/RefreshLinksJob.php b/includes/jobqueue/jobs/RefreshLinksJob.php index 915ee232fd..26f452067b 100644 --- a/includes/jobqueue/jobs/RefreshLinksJob.php +++ b/includes/jobqueue/jobs/RefreshLinksJob.php @@ -215,8 +215,20 @@ class RefreshLinksJob extends Job { $updates = $content->getSecondaryDataUpdates( $title, null, !empty( $this->params['useRecursiveLinksUpdate'] ), $parserOutput ); foreach ( $updates as $key => $update ) { - if ( $update instanceof LinksUpdate && isset( $this->params['triggeredRecursive'] ) ) { - $update->setTriggeredRecursive(); + if ( $update instanceof LinksUpdate ) { + if ( isset( $this->params['triggeredRecursive'] ) ) { + $update->setTriggeredRecursive(); + } + if ( isset( $this->params['triggeringUser'] ) && $this->params['triggeringUser'] ) { + $userInfo = $this->params['triggeringUser']; + if ( $userInfo['userId'] ) { + $user = User::newFromId( $userInfo['userId'] ); + } else { + // Anonymous, use the username + $user = User::newFromName( $userInfo['userName'], false ); + } + $update->setTriggeringUser( $user ); + } } } diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index 8b4980aa28..acf772ef82 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -2186,6 +2186,7 @@ class WikiPage implements Page, IDBAccessObject { foreach ( $updates as $update ) { if ( $update instanceof LinksUpdate ) { $update->setRevision( $revision ); + $update->setTriggeringUser( $user ); } DeferredUpdates::addUpdate( $update ); }