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
This commit is contained in:
Kunal Mehta 2015-10-27 14:49:51 -07:00
parent 47b1d9e05a
commit c52e5a21f6
3 changed files with 48 additions and 3 deletions

View file

@ -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()

View file

@ -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 );
}
}
}

View file

@ -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 );
}