diff options
Diffstat (limited to 'Echo/includes/DeferredMarkAsReadUpdate.php')
-rw-r--r-- | Echo/includes/DeferredMarkAsReadUpdate.php | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Echo/includes/DeferredMarkAsReadUpdate.php b/Echo/includes/DeferredMarkAsReadUpdate.php new file mode 100644 index 00000000..9b02e8cc --- /dev/null +++ b/Echo/includes/DeferredMarkAsReadUpdate.php @@ -0,0 +1,39 @@ +<?php + +/** + * Mark event notifications as read at the end of a request. Used to queue up + * individual events to mark due to formatting failures or other uses. + */ +class EchoDeferredMarkAsReadUpdate implements DeferrableUpdate { + /** + * @var array + */ + protected $events = array(); + + /** + * @param EchoEvent $event + * @param User $user + */ + public function add( EchoEvent $event, User $user ) { + $uid = $user->getId(); + if ( isset( $this->events[$uid] ) ) { + $this->events[$uid]['eventIds'][] = $event->getId(); + } else { + $this->events[$uid] = array( + 'user' => $user, + 'eventIds' => array( $event->getId() ), + ); + } + } + + /** + * Mark's all queue'd notifications as read. + * Satisfies DeferrableUpdate interface + */ + public function doUpdate() { + foreach ( $this->events as $data ) { + MWEchoNotifUser::newFromUser( $data['user'] )->markRead( $data['eventIds'] ); + } + $this->events = array(); + } +} |