Merge "I-2. Change the default number of Flow Messages in the flyout"

This commit is contained in:
jenkins-bot 2014-10-27 14:50:19 +00:00 committed by Gerrit Code Review
commit ffe55d81b4
2 changed files with 22 additions and 17 deletions

View file

@ -124,8 +124,7 @@ class ApiEchoNotifications extends ApiQueryBase {
$notifMapper = new EchoNotificationMapper();
// Unread notifications + possbile 3 read notification depending on result number
// We don't care about next offset in this case
// Prefer unread notifications. We don't care about next offset in this case
if ( $unreadFirst ) {
wfProfileIn( __METHOD__ . '-fetch-data-unread-first' );
$notifs = $notifMapper->fetchUnreadByUser( $user, $limit, $eventTypes );
@ -133,17 +132,17 @@ class ApiEchoNotifications extends ApiQueryBase {
// then fill the result with some read notifications
$count = count( $notifs );
if ( $count < $limit ) {
// We could add another function for "notification_read_timestamp is not null"
// but it's probably not good to add negation condition to a query
$mixedNotifs = $notifMapper->fetchByUser( $user, $count + 3, null, $eventTypes );
// Query planner should be smart enough that passing a short list of ids to exclude
// will only visit at most that number of extra rows.
$mixedNotifs = $notifMapper->fetchByUser(
$user,
$limit - $count,
null,
$eventTypes,
array_keys( $notifs )
);
foreach ( $mixedNotifs as $notif ) {
if ( !isset( $notifs[$notif->getEvent()->getId()] ) ) {
if ( $count >= $limit ) {
break;
}
$count++;
$notifs[$notif->getEvent()->getId()] = $notif;
}
$notifs[$notif->getEvent()->getId()] = $notif;
}
}
wfProfileOut( __METHOD__ . '-fetch-data-unread-first' );

View file

@ -118,13 +118,15 @@ class EchoNotificationMapper extends EchoAbstractMapper {
/**
* Get Notification by user in batch along with limit, offset etc
* @param User the user to get notifications for
* @param int The maximum number of notifications to return
* @param string Used for offset
* @param array Event types to load
*
* @param User $user the user to get notifications for
* @param int $limit The maximum number of notifications to return
* @param string $continue Used for offset
* @param array $eventTypes Event types to load
* @param array $excludeEventIds Event id's to exclude.
* @return EchoNotification[]
*/
public function fetchByUser( User $user, $limit, $continue, array $eventTypes = array() ) {
public function fetchByUser( User $user, $limit, $continue, array $eventTypes = array(), array $excludeEventIds = array() ) {
$dbr = $this->dbFactory->getEchoDb( DB_SLAVE );
if ( !$eventTypes ) {
@ -145,6 +147,10 @@ class EchoNotificationMapper extends EchoAbstractMapper {
'notification_bundle_base' => 1
);
if ( $excludeEventIds ) {
$conds[] = 'event_id NOT IN ( ' . $dbr->makeList( $excludeEventIds ) . ' ) ';
}
$offset = $this->extractQueryOffset( $continue );
// Start points are specified