/**
  * {@inheritdoc}
  */
 public function addMessageToConversation(Conversation $conversation, array $details, $checkParticipants = true)
 {
     $details['message_parsed'] = $this->messageFormatter->parse($details['message'], [MessageFormatter::ME_USERNAME => $this->userRepository->find($details['author_id'])->name]);
     // TODO: Parser options...
     $message = $conversation->messages()->create($details);
     if ($message) {
         $conversation->update(['last_message_id' => $message->id]);
         if ($checkParticipants) {
             $users = $conversation->participants()->wherePivot('has_left', true)->get(['user_id'])->lists('user_id');
             $conversation->participants()->newPivotStatement()->where('conversation_id', $conversation->id)->whereIn('user_id', $users)->update(['has_left' => false]);
             // This would be the better query but only MySQL wants to run it, PgSQL and SQLite don't like it
             // $conversation->participants()->wherePivot('has_left', true)->update(['has_left' => false]);
         }
     }
     return $message;
 }
Пример #2
0
 /**
  * @param Conversation $conversation
  * @param User         $exceptUser
  */
 private function checkForDeletion(Conversation $conversation, User $exceptUser = null)
 {
     $participants = $conversation->participants;
     /** @var Collection $activeParticipants */
     $activeParticipants = $participants->whereLoose('pivot.has_left', false)->whereLoose('pivot.ignores', false);
     if ($exceptUser != null) {
         $activeParticipants = $activeParticipants->filter(function ($item) use($exceptUser) {
             return $item->id != $exceptUser->id;
         });
     }
     if ($activeParticipants->count() == 0) {
         // All participants either ignore or left this conversation so delete everything related to it
         $conversation->update(['last_message_id' => null]);
         // Calling sync with an empty array will delete all records
         $conversation->participants()->sync([]);
         $this->conversationMessageRepository->deleteMessagesFromConversation($conversation);
         $conversation->delete();
     }
 }