MediaWiki REL1_31
ClearWatchlistNotificationsJob.php
Go to the documentation of this file.
1<?php
23
35 function __construct( Title $title, array $params ) {
36 parent::__construct( 'clearWatchlistNotifications', $title, $params );
37
38 static $required = [ 'userId', 'casTime' ];
39 $missing = implode( ', ', array_diff( $required, array_keys( $this->params ) ) );
40 if ( $missing != '' ) {
41 throw new InvalidArgumentException( "Missing paramter(s) $missing" );
42 }
43
44 $this->removeDuplicates = true;
45 }
46
47 public function run() {
48 $services = MediaWikiServices::getInstance();
49 $lbFactory = $services->getDBLoadBalancerFactory();
50 $rowsPerQuery = $services->getMainConfig()->get( 'UpdateRowsPerQuery' );
51
52 $dbw = $lbFactory->getMainLB()->getConnection( DB_MASTER );
53 $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
54
55 $asOfTimes = array_unique( $dbw->selectFieldValues(
56 'watchlist',
57 'wl_notificationtimestamp',
58 [ 'wl_user' => $this->params['userId'], 'wl_notificationtimestamp IS NOT NULL' ],
59 __METHOD__,
60 [ 'ORDER BY' => 'wl_notificationtimestamp DESC' ]
61 ) );
62
63 foreach ( array_chunk( $asOfTimes, $rowsPerQuery ) as $asOfTimeBatch ) {
64 $dbw->update(
65 'watchlist',
66 [ 'wl_notificationtimestamp' => null ],
67 [
68 'wl_user' => $this->params['userId'],
69 'wl_notificationtimestamp' => $asOfTimeBatch,
70 // New notifications since the reset should not be cleared
71 'wl_notificationtimestamp < ' .
72 $dbw->addQuotes( $dbw->timestamp( $this->params['casTime'] ) )
73 ],
74 __METHOD__
75 );
76 $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
77 }
78 }
79}
Job for clearing all of the "last viewed" timestamps for a user's watchlist.
Class to both describe a background job and handle jobs.
Definition Job.php:31
array $params
Array of job parameters.
Definition Job.php:36
MediaWikiServices is the service locator for the application scope of MediaWiki.
Represents a title within MediaWiki.
Definition Title.php:39
static configuration should be added through ResourceLoaderGetConfigVars instead can be used to get the real title after the basic globals have been set but before ordinary actions take place or wrap services the preferred way to define a new service is the $wgServiceWiringFiles array $services
Definition hooks.txt:2273
const DB_MASTER
Definition defines.php:29