X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiSetNotificationTimestamp.php;h=5769ff6d3917335ca007988a70b35549203883ac;hb=22806b0a4509e97b56fb52b387e17e3c80fb7eb2;hp=a299e877971c2007c5215e342c742e4d669f77fd;hpb=e626da092fa3bd71529868cad5bc35389f98d2b1;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiSetNotificationTimestamp.php b/includes/api/ApiSetNotificationTimestamp.php index a299e87797..5769ff6d39 100644 --- a/includes/api/ApiSetNotificationTimestamp.php +++ b/includes/api/ApiSetNotificationTimestamp.php @@ -38,11 +38,9 @@ class ApiSetNotificationTimestamp extends ApiBase { $user = $this->getUser(); if ( $user->isAnon() ) { - $this->dieUsage( 'Anonymous users cannot use watchlist change notifications', 'notloggedin' ); - } - if ( !$user->isAllowed( 'editmywatchlist' ) ) { - $this->dieUsage( 'You don\'t have permission to edit your watchlist', 'permissiondenied' ); + $this->dieWithError( 'watchlistanontext', 'notloggedin' ); } + $this->checkUserRightsAny( 'editmywatchlist' ); $params = $this->extractRequestParams(); $this->requireMaxOneParameter( $params, 'timestamp', 'torevid', 'newerthanrevid' ); @@ -52,8 +50,12 @@ class ApiSetNotificationTimestamp extends ApiBase { $pageSet = $this->getPageSet(); if ( $params['entirewatchlist'] && $pageSet->getDataSource() !== null ) { - $this->dieUsage( - "Cannot use 'entirewatchlist' at the same time as '{$pageSet->getDataSource()}'", + $this->dieWithError( + [ + 'apierror-invalidparammix-cannotusewith', + $this->encodeParamName( 'entirewatchlist' ), + $pageSet->encodeParamName( $pageSet->getDataSource() ) + ], 'multisource' ); } @@ -71,7 +73,7 @@ class ApiSetNotificationTimestamp extends ApiBase { if ( isset( $params['torevid'] ) ) { if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) { - $this->dieUsage( 'torevid may only be used with a single page', 'multpages' ); + $this->dieWithError( [ 'apierror-multpages', $this->encodeParamName( 'torevid' ) ] ); } $title = reset( $pageSet->getGoodTitles() ); if ( $title ) { @@ -85,7 +87,7 @@ class ApiSetNotificationTimestamp extends ApiBase { } } elseif ( isset( $params['newerthanrevid'] ) ) { if ( $params['entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) { - $this->dieUsage( 'newerthanrevid may only be used with a single page', 'multpages' ); + $this->dieWithError( [ 'apierror-multpages', $this->encodeParamName( 'newerthanrevid' ) ] ); } $title = reset( $pageSet->getGoodTitles() ); if ( $title ) { @@ -142,17 +144,10 @@ class ApiSetNotificationTimestamp extends ApiBase { ); // Query the results of our update - $timestamps = []; - $lb = new LinkBatch( $pageSet->getTitles() ); - $res = $dbw->select( - 'watchlist', - [ 'wl_namespace', 'wl_title', 'wl_notificationtimestamp' ], - [ 'wl_user' => $user->getId(), $lb->constructSet( 'wl', $dbw ) ], - __METHOD__ + $timestamps = $watchedItemStore->getNotificationTimestampsBatch( + $user, + $pageSet->getTitles() ); - foreach ( $res as $row ) { - $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp; - } // Now, put the valid titles into the result /** @var $title Title */ @@ -165,6 +160,9 @@ class ApiSetNotificationTimestamp extends ApiBase { ]; if ( !$title->exists() ) { $r['missing'] = true; + if ( $title->isKnown() ) { + $r['known'] = true; + } } if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) { $r['notificationtimestamp'] = '';