/** @var bool Whether to queue jobs for recursive updates */
public $mRecursive;
- /** @var bool Whether this job was triggered by a recursive update job */
- private $mTriggeredRecursive;
-
/** @var Revision Revision for which this update has been triggered */
private $mRevision;
*/
private $linkDeletions = null;
+ /**
+ * @var User|null
+ */
+ private $user;
+
/**
* Constructor
*
public function doUpdate() {
Hooks::run( 'LinksUpdate', array( &$this ) );
$this->doIncrementalUpdate();
- Hooks::run( 'LinksUpdateComplete', array( &$this ) );
+
+ $that = $this;
+ $this->mDb->onTransactionIdle( function() use ( $that ) {
+ Hooks::run( 'LinksUpdateComplete', array( &$that ) );
+ } );
}
protected function doIncrementalUpdate() {
- global $wgRCWatchCategoryMembership;
-
# Page links
$existing = $this->getExistingLinks();
$this->linkDeletions = $this->getLinkDeletions( $existing );
$this->invalidateCategories( $categoryUpdates );
$this->updateCategoryCounts( $categoryInserts, $categoryDeletes );
- # Category membership changes
- if (
- $wgRCWatchCategoryMembership &&
- !$this->mTriggeredRecursive && ( $categoryInserts || $categoryDeletes )
- ) {
- $this->triggerCategoryChanges( $categoryInserts, $categoryDeletes );
- }
-
# Page properties
$existing = $this->getExistingProperties();
}
- private function triggerCategoryChanges( $categoryInserts, $categoryDeletes ) {
- $catMembChange = new CategoryMembershipChange( $this->mTitle, $this->mRevision );
-
- if ( $this->mRecursive ) {
- $catMembChange->checkTemplateLinks();
- }
-
- foreach ( $categoryInserts as $categoryName => $value ) {
- $categoryTitle = Title::newFromText( $categoryName, NS_CATEGORY );
- $catMembChange->triggerCategoryAddedNotification( $categoryTitle );
- }
-
- foreach ( $categoryDeletes as $categoryName => $value ) {
- $categoryTitle = Title::newFromText( $categoryName, NS_CATEGORY );
- $catMembChange->triggerCategoryRemovedNotification( $categoryTitle );
- }
- }
-
/**
* Queue recursive jobs for this page
*
// Which ever runs first generally no-ops the other one.
$jobs = array();
foreach ( $bc->getCascadeProtectedLinks() as $title ) {
- $jobs[] = new RefreshLinksJob( $title, array( 'prioritize' => true ) );
+ $jobs[] = RefreshLinksJob::newPrioritized( $title, array() );
}
JobQueueGroup::singleton()->push( $jobs );
}
}
/**
- * Set this object as being triggered by a recursive LinksUpdate
+ * Set the revision corresponding to this LinksUpdate
*
* @since 1.27
+ *
+ * @param Revision $revision
*/
- public function setTriggeredRecursive() {
- $this->mTriggeredRecursive = true;
+ public function setRevision( Revision $revision ) {
+ $this->mRevision = $revision;
}
/**
- * Set the revision corresponding to this LinksUpdate
+ * Set the User who triggered this LinksUpdate
*
* @since 1.27
- *
- * @param Revision $revision
+ * @param User $user
*/
- public function setRevision( Revision $revision ) {
- $this->mRevision = $revision;
+ public function setTriggeringUser( User $user ) {
+ $this->user = $user;
+ }
+
+ /**
+ * @since 1.27
+ * @return null|User
+ */
+ public function getTriggeringUser() {
+ return $this->user;
}
/**
$inv = array( $inv );
}
foreach ( $inv as $table ) {
- $update = new HTMLCacheUpdate( $this->mTitle, $table );
- $update->doUpdate();
+ DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, $table ) );
}
}
}
}
public function getAsJobSpecification() {
+ if ( $this->user ) {
+ $userInfo = array(
+ 'userId' => $this->user->getId(),
+ 'userName' => $this->user->getName(),
+ );
+ } else {
+ $userInfo = false;
+ }
+
+ if ( $this->mRevision ) {
+ $triggeringRevisionId = $this->mRevision->getId();
+ } else {
+ $triggeringRevisionId = false;
+ }
+
return array(
'wiki' => $this->mDb->getWikiID(),
'job' => new JobSpecification(
'refreshLinksPrioritized',
array(
- 'prioritize' => true,
// Reuse the parser cache if it was saved
'rootJobTimestamp' => $this->mParserOutput->getCacheTime(),
- 'useRecursiveLinksUpdate' => $this->mRecursive
+ 'useRecursiveLinksUpdate' => $this->mRecursive,
+ 'triggeringUser' => $userInfo,
+ 'triggeringRevisionId' => $triggeringRevisionId,
),
array( 'removeDuplicates' => true ),
$this->getTitle()