MediaWiki REL1_32
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:30
array $params
Array of job parameters.
Definition Job.php:35
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 e g db for database replication lag or jobqueue for job queue size converted to pseudo seconds It is possible to add more fields and they will be returned to the user in the API response 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:2335
The wiki should then use memcached to cache various data To use multiple just add more items to the array To increase the weight of a make its entry a array("192.168.0.1:11211", 2))
const DB_MASTER
Definition defines.php:26