예제 #1
0
 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;
 }