mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-11-28 01:30:15 +00:00
8657ef5e90
Add a 'mark as unread' to all unread notifications and allow them to be marked unread. These notifications will no longer be automatically marked as read when the pages they refer to are visited. Bug: T73564 Change-Id: I677d3c0399e46fd7c35531df1cc0e61db2d4eb1b
112 lines
2.8 KiB
PHP
112 lines
2.8 KiB
PHP
<?php
|
|
|
|
class ApiEchoMarkRead extends ApiBase {
|
|
|
|
public function execute() {
|
|
// To avoid API warning, register the parameter used to bust browser cache
|
|
$this->getMain()->getVal( '_' );
|
|
|
|
$user = $this->getUser();
|
|
if ( $user->isAnon() ) {
|
|
$this->dieUsage( 'Login is required', 'login-required' );
|
|
}
|
|
|
|
$notifUser = MWEchoNotifUser::newFromUser( $user );
|
|
|
|
$params = $this->extractRequestParams();
|
|
|
|
// There is no need to trigger markRead if all notifications are read
|
|
if ( $notifUser->getNotificationCount() > 0 ) {
|
|
if ( count( $params['list'] ) ) {
|
|
// Make sure there is a limit to the update
|
|
$notifUser->markRead( array_slice( $params['list'], 0, ApiBase::LIMIT_SML2 ) );
|
|
// Mark all as read
|
|
} elseif ( $params['all'] ) {
|
|
$notifUser->markAllRead();
|
|
// Mark all as read for sections
|
|
} elseif ( $params['sections'] ) {
|
|
$notifUser->markAllRead( $params['sections'] );
|
|
}
|
|
}
|
|
|
|
// Mark as unread
|
|
if ( count( $params['unreadlist'] ) > 0 ) {
|
|
// Make sure there is a limit to the update
|
|
$notifUser->markUnRead( array_slice( $params['unreadlist'], 0, ApiBase::LIMIT_SML2 ) );
|
|
}
|
|
|
|
$result = array(
|
|
'result' => 'success'
|
|
);
|
|
$rawCount = 0;
|
|
foreach ( EchoAttributeManager::$sections as $section ) {
|
|
$rawSectionCount = $notifUser->getNotificationCount( /* $tryCache = */true, DB_SLAVE, $section );
|
|
$result[$section]['rawcount'] = $rawSectionCount;
|
|
$result[$section]['count'] = EchoNotificationController::formatNotificationCount( $rawSectionCount );
|
|
$rawCount += $rawSectionCount;
|
|
}
|
|
|
|
$result += array(
|
|
'rawcount' => $rawCount,
|
|
'count' => EchoNotificationController::formatNotificationCount( $rawCount ),
|
|
);
|
|
$this->getResult()->addValue( 'query', $this->getModuleName(), $result );
|
|
}
|
|
|
|
public function getAllowedParams() {
|
|
return array(
|
|
'list' => array(
|
|
ApiBase::PARAM_ISMULTI => true,
|
|
),
|
|
'unreadlist' => array(
|
|
ApiBase::PARAM_ISMULTI => true,
|
|
),
|
|
'all' => array(
|
|
ApiBase::PARAM_REQUIRED => false,
|
|
ApiBase::PARAM_TYPE => 'boolean'
|
|
),
|
|
'sections' => array(
|
|
ApiBase::PARAM_TYPE => EchoAttributeManager::$sections,
|
|
ApiBase::PARAM_ISMULTI => true,
|
|
),
|
|
'token' => array(
|
|
ApiBase::PARAM_REQUIRED => true,
|
|
),
|
|
);
|
|
}
|
|
|
|
public function needsToken() {
|
|
return 'csrf';
|
|
}
|
|
|
|
public function getTokenSalt() {
|
|
return '';
|
|
}
|
|
|
|
public function mustBePosted() {
|
|
return true;
|
|
}
|
|
|
|
public function isWriteMode() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @see ApiBase::getExamplesMessages()
|
|
*/
|
|
protected function getExamplesMessages() {
|
|
return array(
|
|
'action=echomarkread&list=8'
|
|
=> 'apihelp-echomarkread-example-1',
|
|
'action=echomarkread&all=true'
|
|
=> 'apihelp-echomarkread-example-2',
|
|
'action=echomarkread&unreadlist=1'
|
|
=> 'apihelp-echomarkread-example-3',
|
|
);
|
|
}
|
|
|
|
public function getHelpUrls() {
|
|
return 'https://www.mediawiki.org/wiki/Echo_(Notifications)/API';
|
|
}
|
|
}
|