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:
parent
47b1d9e05a
commit
c52e5a21f6
3 changed files with 48 additions and 3 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue