mDb = $dbFactory->getEchoDb( DB_REPLICA ); parent::__construct( $context ); } public function formatRow( $row ) { // @phan-suppress-previous-line PhanPluginNeverReturnMethod LSP violation throw new LogicException( "This pager does not support row formatting. " . "Use 'getNotifications()' to get a list of Notification objects." ); } public function getQueryInfo() { $attributeManager = Services::getInstance()->getAttributeManager(); $eventTypes = $attributeManager->getUserEnabledEvents( $this->getUser(), 'web' ); return [ 'tables' => [ 'echo_notification', 'echo_event' ], 'fields' => Notification::selectFields(), 'conds' => [ 'notification_user' => $this->getUser()->getId(), 'event_type' => $eventTypes, 'event_deleted' => 0, ], 'options' => [], 'join_conds' => [ 'echo_event' => [ 'JOIN', 'notification_event=event_id', ], ], ]; } public function getNotifications() { if ( !$this->mQueryDone ) { $this->doQuery(); } $notifications = []; foreach ( $this->mResult as $row ) { $notifications[] = Notification::newFromRow( $row ); } // get rid of the overfetched if ( count( $notifications ) > $this->getLimit() ) { array_pop( $notifications ); } if ( $this->mIsBackwards ) { $notifications = array_reverse( $notifications ); } return $notifications; } public function getIndexField() { return 'notification_event'; } }