36 parent::__construct(
'clearWatchlistNotifications',
$title,
$params );
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" );
44 $this->removeDuplicates =
true;
47 public function run() {
48 $services = MediaWikiServices::getInstance();
49 $lbFactory =
$services->getDBLoadBalancerFactory();
50 $rowsPerQuery =
$services->getMainConfig()->get(
'UpdateRowsPerQuery' );
52 $dbw = $lbFactory->getMainLB()->getConnection(
DB_MASTER );
53 $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
55 $asOfTimes = array_unique( $dbw->selectFieldValues(
57 'wl_notificationtimestamp',
58 [
'wl_user' => $this->params[
'userId'],
'wl_notificationtimestamp IS NOT NULL' ],
60 [
'ORDER BY' =>
'wl_notificationtimestamp DESC' ]
63 foreach ( array_chunk( $asOfTimes, $rowsPerQuery )
as $asOfTimeBatch ) {
66 [
'wl_notificationtimestamp' =>
null ],
68 'wl_user' => $this->params[
'userId'],
69 'wl_notificationtimestamp' => $asOfTimeBatch,
71 'wl_notificationtimestamp < ' .
72 $dbw->addQuotes( $dbw->timestamp( $this->params[
'casTime'] ) )
76 $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );