38 parent::__construct(
'clearWatchlistNotifications',
$title,
$params );
40 static $required = [
'userId',
'casTime' ];
41 $missing = implode(
', ', array_diff( $required, array_keys( $this->params ) ) );
42 if ( $missing !=
'' ) {
43 throw new InvalidArgumentException(
"Missing parameter(s) $missing" );
46 $this->removeDuplicates =
true;
49 public function run() {
50 $services = MediaWikiServices::getInstance();
51 $lbFactory =
$services->getDBLoadBalancerFactory();
52 $rowsPerQuery =
$services->getMainConfig()->get(
'UpdateRowsPerQuery' );
54 $dbw = $lbFactory->getMainLB()->getConnection(
DB_MASTER );
55 $ticket = $lbFactory->getEmptyTransactionTicket( __METHOD__ );
56 $timestamp = $this->params[
'timestamp'] ??
null;
57 if ( $timestamp ===
null ) {
58 $timestampCond =
'wl_notificationtimestamp IS NOT NULL';
60 $timestamp = $dbw->timestamp( $timestamp );
61 $timestampCond =
'wl_notificationtimestamp != ' . $dbw->addQuotes( $timestamp ) .
62 ' OR wl_notificationtimestamp IS NULL';
65 $casTimeCond =
'wl_notificationtimestamp < ' .
66 $dbw->addQuotes( $dbw->timestamp( $this->params[
'casTime'] ) ) .
67 ' OR wl_notificationtimestamp IS NULL';
71 $idsToUpdate = $dbw->selectFieldValues(
75 'wl_user' => $this->params[
'userId'],
80 [
'LIMIT' => $rowsPerQuery ]
85 [
'wl_notificationtimestamp' => $timestamp ],
87 'wl_id' => $idsToUpdate,
94 $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
98 }
while ( $idsToUpdate );