/**
  * 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;
 }
 /**
  * @VirtualProperty
  * @Groups({"Device", "Message", "Conversation"})
  * @SerializedName("readtimestamp")
  * @XmlAttribute
  *
  * @return \DateTime
  */
 public function getReadTimestamp()
 {
     return parent::getReadTimestamp();
 }