MediaWiki  master
DeleteLinksJob.php
Go to the documentation of this file.
1 <?php
27 
36 class DeleteLinksJob extends Job {
37  public function __construct( Title $title, array $params ) {
38  parent::__construct( 'deleteLinks', $title, $params );
39  $this->removeDuplicates = true;
40  }
41 
42  public function run() {
43  if ( $this->title === null ) {
44  $this->setLastError( "deleteLinks: Invalid title" );
45  return false;
46  }
47 
48  $pageId = $this->params['pageId'];
49 
50  // Serialize links updates by page ID so they see each others' changes
51  $scopedLock = LinksUpdate::acquirePageLock( wfGetDB( DB_PRIMARY ), $pageId, 'job' );
52  if ( $scopedLock === null ) {
53  $this->setLastError( 'LinksUpdate already running for this page, try again later.' );
54  return false;
55  }
56 
57  $services = MediaWikiServices::getInstance();
58  $wikiPageFactory = $services->getWikiPageFactory();
59  if ( $wikiPageFactory->newFromID( $pageId, WikiPage::READ_LATEST ) ) {
60  // The page was restored somehow or something went wrong
61  $this->setLastError( "deleteLinks: Page #$pageId exists" );
62  return false;
63  }
64 
65  $factory = $services->getDBLoadBalancerFactory();
66  $timestamp = $this->params['timestamp'] ?? null;
67  $page = $wikiPageFactory->newFromTitle( $this->title ); // title when deleted
68 
69  $update = new LinksDeletionUpdate( $page, $pageId, $timestamp );
70  $update->setTransactionTicket( $factory->getEmptyTransactionTicket( __METHOD__ ) );
71  $update->doUpdate();
72 
73  return true;
74  }
75 }
DeleteLinksJob
Job to prune link tables for pages that were deleted.
Definition: DeleteLinksJob.php:36
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:203
Job\$title
Title $title
Definition: Job.php:49
Job\$params
array $params
Array of job parameters.
Definition: Job.php:43
Job\setLastError
setLastError( $error)
Definition: Job.php:467
Job
Class to both describe a background job and handle jobs.
Definition: Job.php:38
wfGetDB
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Definition: GlobalFunctions.php:2186
MediaWiki\Deferred\LinksUpdate\LinksDeletionUpdate
Update object handling the cleanup of links tables after a page was deleted.
Definition: LinksDeletionUpdate.php:38
DB_PRIMARY
const DB_PRIMARY
Definition: defines.php:27
DeleteLinksJob\__construct
__construct(Title $title, array $params)
Definition: DeleteLinksJob.php:37
MediaWiki\Deferred\LinksUpdate\LinksUpdate
Class the manages updates of *_link tables as well as similar extension-managed tables.
Definition: LinksUpdate.php:55
Title
Represents a title within MediaWiki.
Definition: Title.php:47
DeleteLinksJob\run
run()
Run the job.
Definition: DeleteLinksJob.php:42