protected function addMessageToConversation($uuid, $senderId, $message, $systemMessage = false) { if (empty($uuid) or !is_numeric($uuid)) { throw InvalidArgumentException("UUID have to be non zero integer."); } if (empty($senderId) or !is_numeric($senderId)) { throw new InvalidIntegerArgumentException("senderId have to be non zero integer."); } // Get Conversation $filter = new ConversationFilter(); $filter->setUUID($uuid); $filter->setUserId($senderId); $conversation = $this->getConversation($filter, true); // Insert new message into DB $qb = new QueryBuilder(); $qb->insert(Tbl::get('TBL_CONVERSATION_MESSAGES'))->values(array('uuid' => $uuid, 'sender_id' => $senderId, 'receiver_id' => $conversation->interlocutorId, 'message' => $message, 'system' => $systemMessage ? '1' : '0')); $this->query->exec($qb->getSQL()); $messageId = $this->query->getLastInsertId(); // Get Interlocutors Conversation $filter = new ConversationFilter(); $filter->setUUID($uuid); $filter->setUserId($conversation->interlocutorId); $interConv = $this->getConversation($filter, true); // Mark conversation as unread for interlocutor $this->markConversationAsUnread($interConv->userId, $uuid); // Increment unreads count for interlocutor $this->incrementConversationUnreadCount($interConv); // Restore conversation if it is trashed or deleted for user if ($conversation->trashed != self::STATUS_TRASHED_NOT_TRAHSED) { $this->restoreConversation($conversation->userId, $uuid); } // Restore conversation if it is trashed or deleted for interlocutor if ($interConv->trashed != self::STATUS_TRASHED_NOT_TRAHSED) { $this->restoreConversation($conversation->interlocutorId, $uuid); } // Update Conversation last message date $this->updateConversationLastMsgDate($uuid); return $messageId; }
protected function addMessageToConversation($uuid, $senderId, $message) { if (empty($uuid) or !is_numeric($uuid)) { throw InvalidArgumentException("UUID have to be non zero integer."); } if (empty($senderId) or !is_numeric($senderId)) { throw new InvalidIntegerArgumentException("senderId have to be non zero integer."); } // Get Conversation $filter = new ConversationFilter(); $filter->setUUID($uuid); $filter->setUserId($senderId); $conversation = $this->getConversation($filter, true); // Insert new message into DB $qb = new QueryBuilder(); $qb->insert(Tbl::get('TBL_CONVERSATION_MESSAGES'))->values(array('uuid' => $uuid, 'sender_id' => $senderId, 'receiver_id' => $conversation->interlocutorId, 'message' => $message)); $this->query->exec($qb->getSQL()); $messageId = $this->query->getLastInsertId(); // Mark conversation as unread for interlocutor $this->markConversationAsUnread($conversation->interlocutorId, $uuid); // Get Interlocutors Conversation $filter = new ConversationFilter(); $filter->setUUID($uuid); $filter->setUserId($conversation->interlocutorId); $interConv = $this->getConversation($filter, true); // Restore conversation if it is trashed or deleted if ($interConv->trashed != self::STATUS_TRASHED_NOT_TRAHSED) { $this->restoreConversation($conversation->interlocutorId, $uuid); } // Update Conversation last message date $qb = new QueryBuilder(); $qb->update(Tbl::get('TBL_CONVERSATIONS'))->set(new Field('last_msg_date'), new Literal((string) new Func("NOW")))->where($qb->expr()->equal(new Field('uuid'), $uuid)); $this->query->exec($qb->getSQL()); return $messageId; }