39 if ( $user->isAnon() ) {
40 $this->
dieWithError(
'watchlistanontext',
'notloggedin' );
51 if ( $params[
'entirewatchlist'] && $pageSet->getDataSource() !==
null ) {
54 'apierror-invalidparammix-cannotusewith',
56 $pageSet->encodeParamName( $pageSet->getDataSource() )
65 if ( isset( $params[
'timestamp'] ) ) {
66 $timestamp = $dbw->timestamp( $params[
'timestamp'] );
69 if ( !$params[
'entirewatchlist'] ) {
73 if ( isset( $params[
'torevid'] ) ) {
74 if ( $params[
'entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
77 $titles = $pageSet->getGoodTitles();
81 $timestamp = MediaWikiServices::getInstance()->getRevisionStore()
82 ->getTimestampFromId( $params[
'torevid'], IDBAccessObject::READ_LATEST );
84 $timestamp = $dbw->timestamp( $timestamp );
89 } elseif ( isset( $params[
'newerthanrevid'] ) ) {
90 if ( $params[
'entirewatchlist'] || $pageSet->getGoodTitleCount() > 1 ) {
93 $titles = $pageSet->getGoodTitles();
97 $rl = MediaWikiServices::getInstance()->getRevisionLookup();
98 $currRev = $rl->getRevisionById( $params[
'newerthanrevid'], Title::READ_LATEST );
100 $nextRev = $rl->getNextRevision( $currRev, Title::READ_LATEST );
102 $timestamp = $dbw->timestamp( $nextRev->getTimestamp() );
108 $watchedItemStore = MediaWikiServices::getInstance()->getWatchedItemStore();
111 if ( $params[
'entirewatchlist'] ) {
113 $watchedItemStore->resetAllNotificationTimestampsForUser( $user, $timestamp );
115 $result[
'notificationtimestamp'] = is_null( $timestamp )
120 foreach ( $pageSet->getInvalidTitlesAndReasons() as $r ) {
121 $r[
'invalid'] =
true;
124 foreach ( $pageSet->getMissingPageIDs() as $p ) {
126 $page[
'pageid'] = $p;
127 $page[
'missing'] =
true;
128 $page[
'notwatched'] =
true;
131 foreach ( $pageSet->getMissingRevisionIDs() as $r ) {
134 $rev[
'missing'] =
true;
135 $rev[
'notwatched'] =
true;
139 if ( $pageSet->getTitles() ) {
141 $watchedItemStore->setNotificationTimestampsForUser(
144 $pageSet->getTitles()
148 $timestamps = $watchedItemStore->getNotificationTimestampsBatch(
150 $pageSet->getTitles()
155 foreach ( $pageSet->getTitles() as
$title ) {
156 $ns =
$title->getNamespace();
157 $dbkey =
$title->getDBkey();
160 'title' =>
$title->getPrefixedText(),
162 if ( !
$title->exists() ) {
163 $r[
'missing'] =
true;
164 if (
$title->isKnown() ) {
168 if ( isset( $timestamps[$ns] ) && array_key_exists( $dbkey, $timestamps[$ns] ) ) {
169 $r[
'notificationtimestamp'] =
'';
170 if ( $timestamps[$ns][$dbkey] !==
null ) {
171 $r[
'notificationtimestamp'] =
wfTimestamp( TS_ISO_8601, $timestamps[$ns][$dbkey] );
174 $r[
'notwatched'] =
true;
182 $apiResult->addValue(
null, $this->
getModuleName(), $result );
185 $continuationManager->setContinuationIntoResult( $apiResult );
193 if ( $this->mPageSet ===
null ) {
214 'entirewatchlist' => [
223 'newerthanrevid' => [
231 $result += $this->
getPageSet()->getFinalParams( $flags );
239 'action=setnotificationtimestamp&entirewatchlist=&token=123ABC'
240 =>
'apihelp-setnotificationtimestamp-example-all',
241 'action=setnotificationtimestamp&titles=Main_page&token=123ABC'
242 =>
'apihelp-setnotificationtimestamp-example-page',
243 'action=setnotificationtimestamp&titles=Main_page&' .
244 'timestamp=2012-01-01T00:00:00Z&token=123ABC'
245 =>
'apihelp-setnotificationtimestamp-example-pagetimestamp',
246 'action=setnotificationtimestamp&generator=allpages&gapnamespace=2&token=123ABC'
247 =>
'apihelp-setnotificationtimestamp-example-allpages',
252 return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:SetNotificationTimestamp';
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
This abstract class implements many basic API functions, and is the base of all API classes.
checkUserRightsAny( $rights, $user=null)
Helper function for permission-denied errors.
encodeParamName( $paramName)
This method mangles parameter name based on the prefix supplied to the constructor.
dieWithError( $msg, $code=null, $data=null, $httpCode=null)
Abort execution with an error.
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below.
setContinuationManager(ApiContinuationManager $manager=null)
Set the continuation manager.
getResult()
Get the result object.
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
requireMaxOneParameter( $params, $required)
Die if more than one of a certain set of parameters is set and not false.
const PARAM_HELP_MSG
(string|array|Message) Specify an alternative i18n documentation message for this parameter.
getModuleName()
Get the name of the module being executed by this instance.
This manages continuation state.
This class contains a list of pages that the client has requested.
static setIndexedTagName(array &$arr, $tag)
Set the tag name for numeric-keyed values in XML format.
API interface for setting the wl_notificationtimestamp field.
getExamplesMessages()
Returns usage examples for this module.
getPageSet()
Get a cached instance of an ApiPageSet object.
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
getAllowedParams( $flags=0)
getHelpUrls()
Return links to more detailed help pages about the module.
mustBePosted()
Indicates whether this module must be called with a POST request.
needsToken()
Returns the token type this module requires in order to execute.
isWriteMode()
Indicates whether this module requires write mode.
Represents a title within MediaWiki.