/** * Function: createMessage * * @param $messageText * @param \AppBundle\Entity\User $sender * @param \AppBundle\Entity\Conversation $conversation * @param null $creationDate * @param $message_guid * @param array $participantsIds * * @return \AppBundle\Entity\Message * * @author Stefanos Bozionelos */ private function createMessage($messageText, User $sender, Conversation $conversation, $creationDate = null, $message_guid, array $participantsIds) { $em = $this->getDoctrine()->getManager(); $userRepository = $em->getRepository('AppBundle:User'); $messageRepository = $em->getRepository('AppBundle:Message'); $userMessageRepository = $em->getRepository('AppBundle:UserMessage'); $message = $messageRepository->findOneBy(array('guid' => $message_guid, 'conversation' => $conversation->getId())); if ($message == null || !isset($message)) { $message = new Message(); } $message->setTimestamp((new DateTime())->setTimezone(new \DateTimeZone('UTC'))); if (!empty($creationDate)) { $message->setCreatedTimestamp(DateTime::createFromFormat(DateTime::ISO8601, $creationDate)); } else { $message->setCreatedTimestamp((new DateTime())->setTimezone(new \DateTimeZone('UTC'))); } $message->setMessage($messageText); $message->setSender($sender); $message->setConversation($conversation); $message->setGuid($message_guid); $em->persist($message); $em->flush(); foreach ($participantsIds as $receiverID) { $userMessage = $userMessageRepository->findOneBy(array('receiver' => $receiverID, 'message' => $message->getId())); if (!isset($userMessage)) { $receiverUser = $userRepository->find($receiverID); $userMessage = new UserMessage(); $userMessage->setReceiver($receiverUser); $userMessage->setMessage($message); if ($receiverID == $sender->getId()) { $userMessage->setDeliveredTimestamp((new DateTime())->setTimezone(new \DateTimeZone('UTC'))); $userMessage->setReadTimestamp((new DateTime())->setTimezone(new \DateTimeZone('UTC'))); $userMessage->setReadByReceiver(true); } $em->persist($userMessage); $em->flush(); $message->addReceiver($userMessage); } } return $message; }