Beispiel #1
0
 private function markAsRead($chat, $user)
 {
     $deliverState = false;
     foreach ($chat->getMembersTokens(true) as $token) {
         MessageUnread::whereRaw('chat_id = ' . $chat->id)->get()->each(function ($unread) use($chat, $user, $deliverState) {
             if ($unread->user_id == $user->id) {
                 $unread->delete();
                 Message::where('chat_id', $chat->id)->whereNull('delivered_at')->get()->map(function ($message) use($chat, $user, $deliverState) {
                     if (!$message->delivered_at) {
                         $message->delivered_at = Carbon::now();
                     }
                     if (!$message->viewed_at) {
                         $message->viewed_at = Carbon::now();
                     }
                     $message->save();
                 });
             }
         });
         $state = new StateSender($token);
         if ($deliverState) {
             $state->setChatAsDelivered($chat->id, $user->id);
         }
         $state->setChatAsRead($chat->id, $user->id);
         $state->send();
     }
     $this->updateCounts($chat);
     return $this;
 }