diff --git a/Container/LinkContainer.php b/Container/LinkContainer.php index d9e4b94..ca1b599 100644 --- a/Container/LinkContainer.php +++ b/Container/LinkContainer.php @@ -110,7 +110,7 @@ private function getAccount() ]; $links[] = [ - 'url' => $this->router->generate('zikulaintercommodule_messages_preferences'), + 'url' => $this->router->generate('zikulaintercommodule_user_preferences'), 'text' => $this->translator->__('Messages settings'), 'title' => $this->translator->__('Private messaging settings'), 'icon' => 'wrench', @@ -181,7 +181,6 @@ private function getUser() return $links; } -// //if ($this->variableApi->get('mode') == 0) { $links[] = [ 'url' => $this->router->generate('zikulaintercommodule_messages_getmessages', ['box' => 'inbox']), 'text' => $this->translator->__('Inbox'), @@ -191,7 +190,7 @@ private function getUser() $links[] = [ 'url' => $this->router->generate('zikulaintercommodule_messages_getmessages', ['box' => 'sent']), 'text' => $this->translator->__('Sent'), - 'title' => $this->translator->__('Messages send by you'), + 'title' => $this->translator->__('Messages sent by you'), 'icon' => 'envelope', ]; $links[] = [ @@ -217,7 +216,7 @@ private function getUser() $labelsLinks = []; foreach ($defaultLabels as $dLabel) { $labelsLinks[] = [ - 'url' => $this->router->generate('zikulaintercommodule_messages_newmessage'), + 'url' => $this->router->generate('zikulaintercommodule_messages_getmessages', ['box' => 'labels', 'label' => $dLabel->getUrlName()]), 'text' => $this->translator->__($dLabel->getName()), 'icon' => 'tag', ]; @@ -230,7 +229,7 @@ private function getUser() 'links' => $labelsLinks, ]; $links[] = [ - 'url' => $this->router->generate('zikulaintercommodule_messages_preferences'), + 'url' => $this->router->generate('zikulaintercommodule_user_preferences'), 'text' => $this->translator->__('Settings'), 'title' => $this->translator->__('Private messaging settings'), 'icon' => 'wrench', @@ -241,33 +240,6 @@ private function getUser() 'title' => $this->translator->__('Click here to compose new message'), 'icon' => 'file', ]; -// // } -// if ($this->variableApi->get('mode') == 1) { -// $links[] = array( -// 'url' => $this->router->generate('zikulaintercommodule_conversations_list'), -// 'text' => $this->translator->__('Conversations'), -// 'title' => $this->translator->__('See all of your conversations'), -// 'icon' => 'coffee' -// ); -// $links[] = array( -// 'url' => $this->router->generate('zikulaintercommodule_archive_list'), -// 'text' => $this->translator->__('Archive'), -// 'title' => $this->translator->__('Your saved conversations'), -// 'icon' => 'archive' -// ); -// $links[] = array( -// 'url' => $this->router->generate('zikulaintercommodule_user_preferences'), -// 'text' => $this->translator->__('Display messages settings'), -// 'title' => $this->translator->__('Private messaging settings'), -// 'icon' => 'wrench' -// ); -// $links[] = array( -// 'url' => $this->router->generate('zikulaintercommodule_conversations_list'), -// 'text' => $this->translator->__('Start new conversation'), -// 'title' => $this->translator->__('New conversation'), -// 'icon' => 'file' -// ); -// } return $links; } diff --git a/Controller/MessagesController.php b/Controller/MessagesController.php index 83658fe..4be3c4b 100644 --- a/Controller/MessagesController.php +++ b/Controller/MessagesController.php @@ -15,6 +15,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Zikula\Core\Controller\AbstractController; +use Zikula\IntercomModule\Form\Type\MessageType; +use Zikula\IntercomModule\Form\Type\ReplyType; /** * @Route("/messages") @@ -22,13 +24,13 @@ class MessagesController extends AbstractController { /** - * @Route("/preferences") + * @Route("/new" , options={"expose"=true}) * - * @param Request $request + * @throws AccessDeniedException Thrown if the user doesn't have admin access to the module * - * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response + * @return Response symfony response object */ - public function preferencesAction(Request $request) + public function newMessageAction(Request $request) { // Permission check if (!$this->get('zikula_intercom_module.access_manager')->hasPermission()) { @@ -36,48 +38,46 @@ public function preferencesAction(Request $request) } $currentUserManager = $this->get('zikula_intercom_module.user_manager')->getManager(); -// $form = $this->createFormBuilder($this->getVars()) -// //general settings -// ->add('ic_note', 'choice', array('choices' => array('0' => $this->__('Off'), '1' => $this->__('On')), -// 'multiple' => false, -// 'expanded' => true, -// 'required' => true)) -// ->add('ic_ar', 'choice', array('choices' => array('0' => $this->__('Off'), '1' => $this->__('On')), -// 'multiple' => false, -// 'expanded' => true, -// 'required' => true)) -// ->add('ic_art', 'textarea', array('required' => false)) -// ->add('save', 'submit') -// ->add('cancel', 'submit') -// ->getForm(); -// -// $form->handleRequest($request); -// if ($form->isValid()) { -// if ($form->get('save')->isClicked()) { -// $this->setVars('ZikulaIntercomModule', $form->getData()); -// $this->addFlash('status', $this->__('Done! preferences updated.')); -// } -// if ($form->get('cancel')->isClicked()) { -// $this->addFlash('status', $this->__('Operation cancelled.')); -// } -// return $this->redirect($this->generateUrl('zikulaintercommodule_user_preferences')); -// } - - return $this->render('ZikulaIntercomModule:User:preferences.html.twig', [ -// 'form' => $form->createView(), -// 'modvars' => $this->getVars() // @todo temporary solution + $managedMessage = $this->get('zikula_intercom_module.message_manager')->getManager(); + $form = $this->createForm(MessageType::class, $managedMessage->getNewMessage(), ['isXmlHttpRequest' => $request->isXmlHttpRequest()]); + $form->handleRequest($request); + if ($form->isValid()) { + $managedMessage->setMessage($form->getData()); + if ($form->get('preview')->isClicked()) { + $managedMessage->prepareForPreview(); + } + if ($form->get('saveAsDraft')->isClicked()) { + $managedMessage->saveAsDraft(); + $this->addFlash('status', $this->__('Message saved as draft.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + if ($form->get('send')->isClicked()) { + $managedMessage->send(); + $this->addFlash('status', $this->__('Message sent.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + } + + $layout = ucfirst($this->getVar('layout')); + + return $this->render("@ZikulaIntercomModule/Layouts/$layout/new.html.twig", [ + 'form' => $form->createView(), + 'managedMessage' => $managedMessage, + 'settings' => $this->getVars(), 'currentUserManager' => $currentUserManager, ]); } /** - * @Route("/new" , options={"expose"=true}) + * @Route("/read/{message}", options={"expose"=true}, requirements={"message" = "\d*"}) * * @throws AccessDeniedException Thrown if the user doesn't have admin access to the module * * @return Response symfony response object */ - public function newMessageAction(Request $request) + public function readMessageAction(Request $request, $message) { // Permission check if (!$this->get('zikula_intercom_module.access_manager')->hasPermission()) { @@ -85,140 +85,144 @@ public function newMessageAction(Request $request) } $currentUserManager = $this->get('zikula_intercom_module.user_manager')->getManager(); - $layout = ucfirst($this->getVar('layout')); + $managedMessage = $this->get('zikula_intercom_module.message_manager')->getManager($message); + $managedMessage->setSeen(); + $managedMessage->get()->getMessageDataByUser($currentUserManager->get()); + if (!$managedMessage->exists()) { + $this->addFlash('error', $this->__('Message does not exists!')); -// $options = ['isXmlHttpRequest' => $request->isXmlHttpRequest()]; -// $message = $this->get('zikula_intercom_module.manager.message')->create(); -// $form = $this->createForm('messageform', new MessageEntity(), $options); -// $form->handleRequest($request); -// -// if ($form->isValid()) { -// $this->get('zikula_intercom_module.manager.message')->setNewData($form->getData()); -// $this->get('zikula_intercom_module.manager.message')->send(); -// $message = $form->getData(); -// $em = $this->get('doctrine')->getManager(); -// $em->persist($message); -// $em->flush(); -// if ($request->isXmlHttpRequest()) { -// return new JsonResponse(array('status' => true)); -// } else { -// $this->addFlash('status', "Message sent!"); -// return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); -// } -// } -// -// if ($request->isXmlHttpRequest()) { -// return new JsonResponse(array('status' => true, 'html' => $this->renderView('ZikulaIntercomModule:Message:form.html.twig', array( -// 'form' => $form->createView(), -// 'message' => $message, -// 'settings' => $this->getVars() -// )))); -// } + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } - return $this->render("@ZikulaIntercomModule/Layouts/$layout/new.html.twig", [ -// 'form' => $form->createView(), -//// 'message' => $message, -// 'settings' => $this->getVars() + $form = $this->createForm(ReplyType::class, $managedMessage->getReplyPrepared(), ['isXmlHttpRequest' => $request->isXmlHttpRequest()]); + $form->handleRequest($request); + if ($form->isValid()) { + $managedMessage->setMessage($form->getData()); + if ($form->get('preview')->isClicked()) { + $managedMessage->prepareForPreview(); + } + if ($form->get('saveAsDraft')->isClicked()) { + $managedMessage->saveAsDraft(); + $this->addFlash('status', $this->__('Reply saved.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + if ($form->get('send')->isClicked()) { + $managedMessage->send(); + $this->addFlash('status', $this->__('Reply sent.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + } + + $layout = ucfirst($this->getVar('layout')); + + return $this->render("@ZikulaIntercomModule/Layouts/$layout/reply.html.twig", [ + 'form' => $form->createView(), + 'managedMessage' => $managedMessage, + 'settings' => $this->getVars(), 'currentUserManager' => $currentUserManager, ]); } /** - * @Route("/reply" , options={"expose"=true}) + * @Route("/reply/{message}", options={"expose"=true}, requirements={"message" = "\d*"}) * * @throws AccessDeniedException Thrown if the user doesn't have admin access to the module * * @return Response symfony response object */ - public function replyMessageAction(Request $request) + public function replyMessageAction(Request $request, $message) { // Permission check if (!$this->get('zikula_intercom_module.access_manager')->hasPermission()) { throw new AccessDeniedException(); } -// $options = ['isXmlHttpRequest' => $request->isXmlHttpRequest()]; -// $message = $this->get('zikula_intercom_module.manager.message')->create(); -// $form = $this->createForm('messageform', new MessageEntity(), $options); -// $form->handleRequest($request); -// -// if ($form->isValid()) { -// $this->get('zikula_intercom_module.manager.message')->setNewData($form->getData()); -// $this->get('zikula_intercom_module.manager.message')->send(); -// $message = $form->getData(); -// $em = $this->get('doctrine')->getManager(); -// $em->persist($message); -// $em->flush(); -// if ($request->isXmlHttpRequest()) { -// return new JsonResponse(['status' => true]); -// } else { -// $this->addFlash('status', "Message sent!"); -// return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); -// } -// } -// -// if ($request->isXmlHttpRequest()) { -// return new JsonResponse(['status' => true, 'html' => $this->renderView('ZikulaIntercomModule:Message:form.html.twig', [ -// 'form' => $form->createView(), -// 'message' => $message, -// 'settings' => $this->getVars() -// ])]); -// } - - return $this->render('ZikulaIntercomModule:Message:new.html.twig', [ -// 'form' => $form->createView(), -// 'message' => $message, -// 'settings' => $this->getVars() + $currentUserManager = $this->get('zikula_intercom_module.user_manager')->getManager(); + $managedMessage = $this->get('zikula_intercom_module.message_manager')->getManager($message); + + if (!$managedMessage->exists()) { + $this->addFlash('error', $this->__('Message does not exists!')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + + $form = $this->createForm(ReplyType::class, $managedMessage->getReplyPrepared(), ['isXmlHttpRequest' => $request->isXmlHttpRequest()]); + $form->handleRequest($request); + if ($form->isValid()) { + $managedMessage->setMessage($form->getData()); + if ($form->get('preview')->isClicked()) { + $managedMessage->prepareForPreview(); + } + if ($form->get('saveAsDraft')->isClicked()) { + $managedMessage->saveAsDraft(); + $this->addFlash('status', $this->__('Reply saved.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + if ($form->get('send')->isClicked()) { + $managedMessage->send(); + $this->addFlash('status', $this->__('Reply sent.')); + + return $this->redirect($this->generateUrl('zikulaintercommodule_messages_getmessages')); + } + } + + $layout = ucfirst($this->getVar('layout')); + + return $this->render("@ZikulaIntercomModule/Layouts/$layout/reply.html.twig", [ + 'form' => $form->createView(), + 'managedMessage' => $managedMessage, + 'settings' => $this->getVars(), + 'currentUserManager' => $currentUserManager, ]); } /** - * @Route("/{box}/{page}/{sortby}/{sortorder}/{limit}", options={"expose"=true}, requirements={"page" = "\d*"}, defaults={"box" = "inbox", "page" = 1,"sortby" = "send", "sortorder" = "DESC", "limit" = 10}) + * @Route("/{box}/{label}/{page}/{sortby}/{sortorder}/{limit}", options={"expose"=true}, requirements={"page" = "\d*"}, defaults={"box" = "inbox", "label" = ".*", "page" = 1,"sortby" = "send", "sortorder" = "DESC", "limit" = 10}) * * @throws AccessDeniedException Thrown if the user doesn't have admin access to the module * * @return Response symfony response object */ - public function getMessagesAction(Request $request, $box, $page, $sortby, $sortorder, $limit) + public function getMessagesAction(Request $request, $box, $page, $sortby, $sortorder, $limit, $label = null) { // Permission check if (!$this->get('zikula_intercom_module.access_manager')->hasPermission()) { throw new AccessDeniedException(); } -// $mode = $this->getVar('mode'); - + $currentUserManager = $this->get('zikula_intercom_module.user_manager')->getManager(); $filter = ['page' => $page, 'limit' => $limit > 0 ? $limit : $this->getVar('messages_perpage'), 'sortorder' => $sortorder, 'sortby' => $sortby, + 'label' => $label, ]; -// -// $messages = $this->get('zikula_intercom_module.manager.messages')->load($box, $filter); -// -// if ($request->isXmlHttpRequest()) { -// //@todo decode request content type - supply html or json + $layout = ucfirst($this->getVar('layout')); + $messenger = $this->get('zikula_intercom_module.messenger')->load($box, $filter); + $messenger->loadUserData(); + if ($request->isXmlHttpRequest()) { + //@todo decode request content type - supply html or json // $response = new JsonResponse(); // $response->setData([ // 'filter' => $filter, -// 'pager' => $messages->getPager(), +// 'pager' => $messenger->getPager(), // 'html' => $this->renderView("@ZikulaIntercomModule/Layouts/$layout/$box/conversation.list.html.twig", [ -// 'messages' => $messages->getmessages() +// 'messages' => $messenger->getmessages() // ]) // ]); -// -// return $response; -// } - $layout = ucfirst($this->getVar('layout')); +// return $response; + } return $this->render("@ZikulaIntercomModule/Layouts/$layout/index.html.twig", [ -// 'mode' => $mode, -// 'layout' => $layout, - 'box' => $box, - 'filter' => $filter, -// 'pager' => $messages->getPager(), -// 'messages' => $messages->getmessages(), -// 'settings' => $this->getVars() + 'box' => $box, + 'filter' => $filter, + 'pager' => $messenger->getPager(), + 'messages' => $messenger->getmessages(), + 'settings' => $this->getVars(), + 'currentUserManager' => $currentUserManager, ]); } } diff --git a/Controller/UserController.php b/Controller/UserController.php new file mode 100644 index 0000000..2e39e10 --- /dev/null +++ b/Controller/UserController.php @@ -0,0 +1,111 @@ +get('zikula_intercom_module.access_manager')->hasPermission()) { + throw new AccessDeniedException(); + } + + $currentUserManager = $this->get('zikula_intercom_module.user_manager')->getManager(); +// $form = $this->createFormBuilder($this->getVars()) +// //general settings +// ->add('ic_note', 'choice', array('choices' => array('0' => $this->__('Off'), '1' => $this->__('On')), +// 'multiple' => false, +// 'expanded' => true, +// 'required' => true)) +// ->add('ic_ar', 'choice', array('choices' => array('0' => $this->__('Off'), '1' => $this->__('On')), +// 'multiple' => false, +// 'expanded' => true, +// 'required' => true)) +// ->add('ic_art', 'textarea', array('required' => false)) +// ->add('save', 'submit') +// ->add('cancel', 'submit') +// ->getForm(); +// +// $form->handleRequest($request); +// if ($form->isValid()) { +// if ($form->get('save')->isClicked()) { +// $this->setVars('ZikulaIntercomModule', $form->getData()); +// $this->addFlash('status', $this->__('Done! preferences updated.')); +// } +// if ($form->get('cancel')->isClicked()) { +// $this->addFlash('status', $this->__('Operation cancelled.')); +// } +// return $this->redirect($this->generateUrl('zikulaintercommodule_user_preferences')); +// } + + return $this->render('ZikulaIntercomModule:User:preferences.html.twig', [ +// 'form' => $form->createView(), +// 'modvars' => $this->getVars() // @todo temporary solution + 'currentUserManager' => $currentUserManager, + ]); + } + + /** + * Called from form to populate a recipient search. + * + * @Route("/getrecipients", options={"expose"=true}) + * + * @Method("POST") + * + * @param Request $request + * + * @return Response + */ + public function getRecipientsAction(Request $request) + { + if (!$this->hasPermission('ZikulaIntercomModule', '::', ACCESS_MODERATE)) { + return new PlainResponse(''); + } + + $fragment = $request->request->get('fragment'); + $filter = [ + 'activated' => ['operator' => 'notIn', 'operand' => [ + UsersConstant::ACTIVATED_PENDING_REG, + UsersConstant::ACTIVATED_PENDING_DELETE, + ]], + 'uname' => ['operator' => 'like', 'operand' => "$fragment%"], + ]; + $users = $this->get('zikula_users_module.user_repository')->query($filter); + // @todo add groups + $recipients = []; + foreach ($users as $k => $user) { + $recipients[$k] = ['id' => $user->getUid(), 'uname' => $user->getUname()]; + } + + return new Response(json_encode(['recipients' => $recipients])); + } +} diff --git a/Entity/Label/LabelEntity.php b/Entity/Label/LabelEntity.php index e849612..0f96260 100644 --- a/Entity/Label/LabelEntity.php +++ b/Entity/Label/LabelEntity.php @@ -13,14 +13,14 @@ use Doctrine\ORM\Mapping as ORM; use Zikula\Core\Doctrine\EntityAccess; -use Zikula\IntercomModule\Entity\Traits\IdTrait; use Zikula\IntercomModule\Entity\Traits\ExtraDataTrait; +use Zikula\IntercomModule\Entity\Traits\IdTrait; use Zikula\IntercomModule\Entity\Traits\NameTrait; use Zikula\IntercomModule\Entity\Traits\SortOrderTrait; use Zikula\IntercomModule\Entity\Traits\UserTrait; /** - * Label entity class + * Label entity class. * * @ORM\Entity * @ORM\Table(name="intercom_labels") @@ -37,4 +37,14 @@ class LabelEntity extends EntityAccess public function __construct() { } + + /** + * Get url name. + * + * @return string + */ + public function getUrlName() + { + return urlencode(strtolower($this->name).'_'.$this->id); + } } diff --git a/Entity/Message/AbstractMessageEntity.php b/Entity/Message/AbstractMessageEntity.php index c43fc7f..63dc304 100644 --- a/Entity/Message/AbstractMessageEntity.php +++ b/Entity/Message/AbstractMessageEntity.php @@ -11,19 +11,21 @@ namespace Zikula\IntercomModule\Entity\Message; -use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Criteria; +use Doctrine\ORM\Mapping as ORM; use Zikula\Core\Doctrine\EntityAccess; +use Zikula\IntercomModule\Entity\Traits\ConversationTrait; +use Zikula\IntercomModule\Entity\Traits\CreatedAtTrait; use Zikula\IntercomModule\Entity\Traits\IdTrait; +use Zikula\IntercomModule\Entity\Traits\RecipientsTrait; +use Zikula\IntercomModule\Entity\Traits\SenderTrait; +use Zikula\IntercomModule\Entity\Traits\SentTrait; use Zikula\IntercomModule\Entity\Traits\SubjectTrait; use Zikula\IntercomModule\Entity\Traits\TextTrait; -use Zikula\IntercomModule\Entity\Traits\SendTrait; -use Zikula\IntercomModule\Entity\Traits\SenderTrait; -use Zikula\IntercomModule\Entity\Traits\RecipientsTrait; -use Zikula\IntercomModule\Entity\Traits\ConversationTrait; /** - * Message + * Message. * * @ORM\Table(name="intercom_messages") * @ORM\Entity(repositoryClass="Zikula\IntercomModule\Entity\Repository\MessagesRepository") @@ -38,7 +40,7 @@ abstract class AbstractMessageEntity extends EntityAccess { /** - * Module name + * Module name. * * @var string */ @@ -47,21 +49,24 @@ abstract class AbstractMessageEntity extends EntityAccess use IdTrait; use SubjectTrait; use TextTrait; - use SendTrait; + use SentTrait; use SenderTrait; //need to be constructed use RecipientsTrait; use ConversationTrait; + use CreatedAtTrait; /** - * Message details + * Message details. * * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\MessageDetails\MessageUserDetailsEntity", mappedBy="message") */ private $messageUserData; + private $userData; + /** - * Constructor + * Constructor. */ public function __construct() { @@ -87,4 +92,26 @@ public function getMtype() { return $this->mtype; } -} \ No newline at end of file + + public function getUserData() + { + return $this->userData; + } + + public function setUserData($userData) + { + $this->userData = $userData; + + return $this; + } + + public function getMessageDataByUser($user) + { + $criteria = Criteria::create() + ->where(Criteria::expr()->eq('user', $user)); + + $this->userData = $this->getMessageUserData()->matching($criteria)->first(); + + return $this; + } +} diff --git a/Entity/MessageDetails/MessageUserDetailsEntity.php b/Entity/MessageDetails/MessageUserDetailsEntity.php index 0d9712e..b8c2d76 100644 --- a/Entity/MessageDetails/MessageUserDetailsEntity.php +++ b/Entity/MessageDetails/MessageUserDetailsEntity.php @@ -13,12 +13,12 @@ use Doctrine\ORM\Mapping as ORM; use Zikula\Core\Doctrine\EntityAccess; -use Zikula\IntercomModule\Entity\Traits\IdTrait; use Zikula\IntercomModule\Entity\Traits\ExtraDataTrait; +use Zikula\IntercomModule\Entity\Traits\IdTrait; use Zikula\IntercomModule\Entity\Traits\UserTrait; /** - * MessageUserDetails entity + * MessageUserDetails entity. * * @ORM\Entity * @ORM\Table(name="intercom_message_user_details") @@ -29,7 +29,7 @@ class MessageUserDetailsEntity extends EntityAccess use ExtraDataTrait; use UserTrait; - /** + /** * @ORM\ManyToOne(targetEntity="Zikula\IntercomModule\Entity\Message\AbstractMessageEntity", inversedBy="messageUserData") * @ORM\JoinColumn(name="message", referencedColumnName="id", nullable=false) */ @@ -42,41 +42,40 @@ class MessageUserDetailsEntity extends EntityAccess private $label; /** - * seen + * seen. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ private $seen; /** - * replied + * replied. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ private $replied; /** - * notified + * notified. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ private $notified; /** - * stored + * stored. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ private $stored; /** - * deleted + * deleted. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ private $deleted; - public function __construct() { //@todo user should be validated on construct @@ -84,9 +83,10 @@ public function __construct() } /** - * Set seen status + * Set seen. + * + * @param DateTime/null $seen * - * @param DateTime/null $seen * @return $this */ public function setSeen(\DateTime $seen = null) @@ -97,7 +97,7 @@ public function setSeen(\DateTime $seen = null) } /** - * Get seen status + * Get seen. * * @return DateTime/null */ @@ -107,9 +107,10 @@ public function getSeen() } /** - * Set replied status + * Set replied. * * @param DateTime $replied + * * @return $this */ public function setReplied(\DateTime $replied = null) @@ -120,7 +121,7 @@ public function setReplied(\DateTime $replied = null) } /** - * Get replied status + * Get replied. * * @return DateTime/null */ @@ -130,9 +131,10 @@ public function getReplied() } /** - * Set notified status + * Set notified. * * @param DateTime/null $notified + * * @return $this */ public function setNotified(\DateTime $notified = null) @@ -143,7 +145,7 @@ public function setNotified(\DateTime $notified = null) } /** - * Get notified status + * Get notified. * * @return DateTime/null */ @@ -153,9 +155,10 @@ public function getNotified() } /** - * Set stored status + * Set stored. * * @param DateTime/null $stored + * * @return $this */ public function setStored(\DateTime $stored = null) @@ -166,19 +169,20 @@ public function setStored(\DateTime $stored = null) } /** - * Get stored status + * Get stored. * - * @return boolean + * @return bool */ public function getStored() { - return $this->storedr; + return $this->stored; } /** - * Set deleted status + * Set deleted. * * @param DateTime/null $deleted + * * @return $this */ public function setDeleted(\DateTime $deleted = null) @@ -189,9 +193,9 @@ public function setDeleted(\DateTime $deleted = null) } /** - * Get deleted status + * Get deleted. * - * @return boolean + * @return bool */ public function getDeleted() { diff --git a/Entity/Repository/MessagesRepository.php b/Entity/Repository/MessagesRepository.php index 9c841f4..2b79fc5 100644 --- a/Entity/Repository/MessagesRepository.php +++ b/Entity/Repository/MessagesRepository.php @@ -12,151 +12,242 @@ namespace Zikula\IntercomModule\Entity\Repository; use Doctrine\ORM\EntityRepository; - +use Doctrine\ORM\Tools\Pagination\Paginator; class MessagesRepository extends EntityRepository { -} + /** + * Paginator Helper. + * + * Pass through a query object, current page & limit + * the offset is calculated from the page and limit + * returns an `Paginator` instance, which you can call the following on: + * + * $paginator->getIterator()->count() # Total fetched (ie: `5` posts) + * $paginator->count() # Count of ALL posts (ie: `20` posts) + * $paginator->getIterator() # ArrayIterator + * + * @param Doctrine\ORM\Query $dql DQL Query Object + * @param int $page Current page (defaults to 1) + * @param int $limit The total number per page (defaults to 5) + * + * @return \Doctrine\ORM\Tools\Pagination\Paginator + */ + public function paginate($dql, $page = 1, $limit = 15) + { + $paginator = new Paginator($dql); + + $paginator->getQuery() + ->setFirstResult($limit * ($page - 1)) // Offset + ->setMaxResults($limit); // Limit + + return $paginator; + } + + public function getRecivedMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->leftJoin('m.recipientUsers', 'u') + ->where('m.id = u.message') + ->andWhere('u.user = :user') + ->setParameter('user', $user) + ->andWhere('m.parent IS NULL') + ->andWhere('m.sent IS NOT NULL'); + + switch ($sortby) { + case 'sent': + $qb->orderBy('m.sent', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.sent', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); + + return $paginator; + } + + public function getSentMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->where('m.sender = :user') + ->setParameter('user', $user) + ->andWhere('m.parent IS NULL') + ->andWhere('m.sent IS NOT NULL'); + + switch ($sortby) { + case 'sent': + $qb->orderBy('m.sent', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.sent', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); + + return $paginator; + } + + public function getDraftMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->where('m.sender = :user') + ->setParameter('user', $user) + ->andWhere('m.parent IS NULL') + ->andWhere('m.sent IS NULL'); + + switch ($sortby) { + case 'created': + $qb->orderBy('m.createdAt', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.createdAt', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); -// -// -// -//use Doctrine\ORM\EntityRepository; -//use Zikula\IntercomModule\Entity\MessagesQueryBuilder; -//use Doctrine\ORM\Tools\Pagination\Paginator; -// -//class MessageRepository extends EntityRepository -//{ -// -// /** -// * Helper function to build custom query builder -// * -// * @param MessagesQueryBuilder $qb -// */ -// public function build() -// { -// $em = ServiceUtil::getService('doctrine.entitymanager'); -// $qb = new MessagesQueryBuilder($em); -// return $qb; -// } -// -// /** -// * Get all or count all function -// * -// * @param array -// */ -// public function getOneOrAll($onlyone = false, $f, $s, $sortby, $sortorder, $page = 1, $limit) -// { -// -// $qb = $this->build(); -// $qb->select('m'); -// $qb->from('Zikula\IntercomModule\Entity\MessageEntity', 'm'); -// //filters -// $qb->addFilters($f); -// //search -// $qb->addSearch($s); -// //sort -// $qb->sort($sortby,$sortorder); -// -// $query = $qb->getQuery(); -// -// if ($onlyone){ -// $item = $query->getOneOrNullResult(); -// return $item; -// } -// $paginator = $this->paginate($query, $page, $limit); -// -// return $paginator; -// } -// -// /** -// * Paginator Helper -// * -// * Pass through a query object, current page & limit -// * the offset is calculated from the page and limit -// * returns an `Paginator` instance, which you can call the following on: -// * -// * $paginator->getIterator()->count() # Total fetched (ie: `5` posts) -// * $paginator->count() # Count of ALL posts (ie: `20` posts) -// * $paginator->getIterator() # ArrayIterator -// * -// * @param Doctrine\ORM\Query $dql DQL Query Object -// * @param integer $page Current page (defaults to 1) -// * @param integer $limit The total number per page (defaults to 5) -// * -// * @return \Doctrine\ORM\Tools\Pagination\Paginator -// */ -// public function paginate($dql, $page = 1, $limit = 15) -// { -// $paginator = new Paginator($dql); -// -// $paginator->getQuery() -// ->setFirstResult($limit * ($page - 1)) // Offset -// ->setMaxResults($limit); // Limit -// -// return $paginator; -// } -// -// /** -// * Get all in one function -// * @param array $args -// * @param integer $onlyone Internal switch -// * @param integer $page Current page -// * @param integer $limit The total number per page -// * -// * @return \Doctrine\ORM\Tools\Pagination\Paginator -// * or -// * object -// */ -// public function getAll($args = array()) -// { -// //internal -// $onlyone = isset($args['onlyone']) ? $args['onlyone'] : false; -// //pager -// $page = isset($args['page']) ? $args['page'] : 1; -// $page = $page < 1 ? 1 : $page; -// $limit = isset($args['limit']) ? $args['limit'] : 25; -// //sort -// $sortby = isset($args['sortby']) ? $args['sortby'] : 'send'; -// $sortorder = isset($args['sortorder']) ? $args['sortorder'] : 'DESC'; -// //filter's -// $f['deleted'] = isset($args['deleted']) && $args['deleted'] !== '' ? $args['deleted'] : false; -// $f['stored'] = isset($args['stored']) && $args['stored'] !== '' ? $args['stored'] : false; -// $f['conversations'] = isset($args['conversations']) && $args['conversations'] !== '' ? $args['conversations'] : false; -// $f['notified'] = isset($args['notified']) && $args['notified'] !== '' ? $args['notified'] : false; -// $f['replied'] = isset($args['replied']) && $args['replied'] !== '' ? $args['replied'] : false; -// $f['seen'] = isset($args['seen']) && $args['seen'] !== '' ? $args['seen'] : false; -// $f['sender'] = isset($args['sender']) && $args['sender'] !== '' ? $args['sender'] : false; -// $f['recipient'] = isset($args['recipient']) && $args['recipient'] !== '' ? $args['recipient'] : false; -// $f['id'] = isset($args['id']) && $args['id'] !== '' ? $args['id'] : false; -// $f['subject'] = isset($args['subject']) && $args['subject'] !== '' ? $args['subject'] : false; -// $f['text'] = isset($args['text']) && $args['text'] !== '' ? $args['text'] : false; -// $f['mtype'] = isset($args['mtype']) && $args['mtype'] !== '' ? $args['mtype'] : 'normal'; -// $f['send'] = isset($args['send']) && $args['send'] !== '' ? $args['send'] : false; -// //search -// $s['search'] = isset($args['search']) && $args['search'] !== '' ? $args['search'] : false; -// $s['search_field'] = isset($args['search_field']) && $args['search_field'] !== '' ? $args['search_field'] : false; -// -// return $this -// ->getOneOrAll($onlyone, $f, $s, $sortby, $sortorder, $page, $limit); -// } -// -// /** -// * Shortcut to get one item -// * -// * @param array $args -// * @param integer $onlyone Internal switch -// * @param integer $page Current page -// * @param integer $limit The total number per page -// * -// * @return \Doctrine\ORM\Tools\Pagination\Paginator -// * or -// * object -// */ -// public function getOneBy($a){ -// //set internal -// $a['onlyone'] = true; -// return $this -// ->getAll($a); -// } -//} \ No newline at end of file + return $paginator; + } + + public function getStoredMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->leftJoin('m.recipientUsers', 'u') + ->leftJoin('m.messageUserData', 'd') + ->where('m.id = u.message') + ->andWhere('m.id = d.message') + ->andWhere('m.parent IS NULL') + ->andWhere('m.sent IS NOT NULL') + ->andWhere('u.user = :user') + ->andWhere('d.user = :user') + ->andWhere('d.stored IS NOT NULL') + ->andWhere('d.deleted IS NULL') + ->setParameter('user', $user); + + switch ($sortby) { + case 'created': + $qb->orderBy('m.createdAt', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.createdAt', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); + + return $paginator; + } + + public function getDeletedMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->leftJoin('m.recipientUsers', 'u') + ->leftJoin('m.messageUserData', 'd') + ->where('m.id = u.message') + ->andWhere('m.id = d.message') + ->andWhere('m.parent IS NULL') + ->andWhere('m.sent IS NOT NULL') + ->andWhere('u.user = :user') + ->andWhere('d.user = :user') + ->andWhere('d.deleted IS NOT NULL') + ->setParameter('user', $user); + + switch ($sortby) { + case 'created': + $qb->orderBy('m.createdAt', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.createdAt', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); + + return $paginator; + } + + public function getLabeledMessagesByUser($user, $sortby, $sortorder, $limit, $page = 1, $label = null) + { + $qb = $this->createQueryBuilder('m') + ->select('m') + ->leftJoin('m.recipientUsers', 'u') + ->leftJoin('m.messageUserData', 'd') + ->where('m.id = u.message') + ->andWhere('m.id = d.message') +// ->andWhere('m.parent IS NULL') +// ->andWhere('m.sent IS NOT NULL') + ->andWhere('u.user = :user') + ->andWhere('d.user = :user') + ->andWhere('d.deleted IS NOT NULL') + ->andWhere('d.label IS NOT NULL') + ->setParameter('user', $user); + + if ($label) { + $qb->andWhere('d.label = :label') + ->setParameter('label', $label); + } + + switch ($sortby) { + case 'created': + $qb->orderBy('m.createdAt', $sortorder); + + break; + case 'subject': + $qb->orderBy('m.subject', $sortorder); + + break; + default: + $qb->orderBy('m.createdAt', $sortorder); + + break; + } + + $query = $qb->getQuery(); + $paginator = $this->paginate($query, $page, $limit); + + return $paginator; + } +} diff --git a/Entity/Traits/ConversationTrait.php b/Entity/Traits/ConversationTrait.php index 8409ba5..3c8925a 100644 --- a/Entity/Traits/ConversationTrait.php +++ b/Entity/Traits/ConversationTrait.php @@ -14,7 +14,7 @@ use Doctrine\ORM\Mapping as ORM; /** - * ConversationTrait + * ConversationTrait. * * @author Kaik */ @@ -27,8 +27,8 @@ trait ConversationTrait private $parent; /** - * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\Message\AbstractMessageEntity", mappedBy="parent") - * @ORM\OrderBy({"send" = "ASC"}) + * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\Message\AbstractMessageEntity", mappedBy="parent", cascade={"persist", "remove"}) + * @ORM\OrderBy({"sent" = "ASC"}) **/ private $conversation; @@ -45,7 +45,7 @@ public function setParent($parent) } /** - * get the messages for conversation + * Get the messages for conversation. * * @return array the conversation messages */ @@ -55,7 +55,7 @@ public function getConversation() } /** - * set the messages for conversation + * Set the messages for conversation. * * @param array $conversation the child categories */ diff --git a/Entity/Traits/CreatedAtTrait.php b/Entity/Traits/CreatedAtTrait.php new file mode 100644 index 0000000..b58e7f2 --- /dev/null +++ b/Entity/Traits/CreatedAtTrait.php @@ -0,0 +1,55 @@ +createdAt = $createdAt; + + return $this; + } + + /** + * Get createdAt. + * + * @return DateTime object + */ + public function getCreatedAt() + { + return $this->createdAt; + } +} diff --git a/Entity/Traits/RecipientsTrait.php b/Entity/Traits/RecipientsTrait.php index 4a7f1cd..d44e1a2 100644 --- a/Entity/Traits/RecipientsTrait.php +++ b/Entity/Traits/RecipientsTrait.php @@ -14,21 +14,21 @@ use Doctrine\ORM\Mapping as ORM; /** - * Recipients Trait + * Recipients Trait. * * @author Kaik */ trait RecipientsTrait { /** - * The recipient users + * The recipient users. * - * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\Recipient\UserRecipientEntity", mappedBy="message") + * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\Recipient\UserRecipientEntity", mappedBy="message", cascade={"persist", "remove"}) */ private $recipientUsers; /** - * The recipient groups + * The recipient groups. * * @ORM\OneToMany(targetEntity="Zikula\IntercomModule\Entity\Recipient\GroupRecipientEntity", mappedBy="message") */ @@ -39,18 +39,33 @@ public function getRecipientUsers() return $this->recipientUsers; } - public function getRecipientGroups() - { - return $this->recipientGroups; - } - public function setRecipientUsers($recipientUsers) { $this->recipientUsers = $recipientUsers; - + return $this; } + public function addRecipientUser($recipientUser) + { + if ($this->recipientUsers->contains($recipientUser)) { + return; + } + + $this->recipientUsers[] = $recipientUser; + $recipientUser->setMessage($this); + } + + public function removeRecipientUser($recipientUser) + { + $this->recipientUsers->removeElement($recipientUser); + } + + public function getRecipientGroups() + { + return $this->recipientGroups; + } + public function setRecipientGroups($recipientGroups) { $this->recipientGroups = $recipientGroups; diff --git a/Entity/Traits/SendTrait.php b/Entity/Traits/SentTrait.php similarity index 65% rename from Entity/Traits/SendTrait.php rename to Entity/Traits/SentTrait.php index fa4a08a..cc3f247 100644 --- a/Entity/Traits/SendTrait.php +++ b/Entity/Traits/SentTrait.php @@ -14,39 +14,40 @@ use Doctrine\ORM\Mapping as ORM; /** - * Description of SendTrait + * SentTrait. * * @author Kaik */ -trait SendTrait +trait SentTrait { /** - * send + * send. * * @ORM\Column(type="datetime", nullable=true, options={"default":null}) */ - private $send; + private $sent; /** - * Set message send + * Set sent. + * + * @param DateTime object $sent * - * @param DateTime object $send * @return $this */ - public function setSend(\DateTime $send = null) + public function setSent(\DateTime $sent = null) { - $this->send = $send; + $this->sent = $sent; return $this; } /** - * Get message send + * Get sent. * * @return DateTime object */ - public function getSend() + public function getSent() { - return $this->send; + return $this->sent; } } diff --git a/Form/Type/MessageType.php b/Form/Type/MessageType.php index 130fdb6..a458ee0 100644 --- a/Form/Type/MessageType.php +++ b/Form/Type/MessageType.php @@ -1,120 +1,123 @@ domain = 'zikulaintercommodule'; $this->entityManager = $entityManager; } - public function buildForm(FormBuilderInterface $builder, array $options) { - + public function buildForm(FormBuilderInterface $builder, array $options) + { $builder->setMethod('POST') - ->add($builder->create('recipient', 'text', ['invalid_message' => $this->__('User not found.'),'attr' => ['class' => 'author_search']]) - ->addModelTransformer(new UserToIdTransformer($this->entityManager))) - ->add($builder->create('groups', 'text', ['mapped' => false,'required' => false,'invalid_message' => $this->__('Group not found.'), 'attr' => ['class' => 'author_search']]) - ->addModelTransformer(new GroupToIdTransformer($this->entityManager))) - ->add('subject', 'text', [ - 'required' => false - ]) - ->add('text', 'textarea', [ - 'required' => true, 'attr' => [ - 'class' => 'tinymce' - ] - ]); - - if ($options['isXmlHttpRequest'] == false) { - $builder->add('save', 'submit', [ - 'label' => $this->__('Send'), - 'attr' => [ - 'class' => 'btn-success' - ] + ->add('sendAsGroup', EntityType::class, [ + 'class' => GroupEntity::class, + 'query_builder' => function (EntityRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.name', 'ASC'); + }, + 'choice_label' => 'name', + 'required' => false, + ]) + ->add('recipientUsers', TextType::class, [ + 'mapped' => false, + 'required' => false, + ]) + ->add('recipientGroups', TextType::class, [ + 'mapped' => false, + 'required' => false, + ]) + ->add('subject', TextType::class, [ + 'required' => false, + ]) + ->add('text', TextareaType::class, [ + 'required' => true, ]); - } - - } - - public function getName() { - return 'messageform'; - } - - /** - * OptionsResolverInterface is @deprecated and is supposed to be replaced by - * OptionsResolver but docs not clear on implementation - * - * @param OptionsResolver $resolver - */ - public function setDefaultOptions(OptionsResolverInterface $resolver) - { - $resolver->setDefaults(array( - 'isXmlHttpRequest' => false, - )); - } - /** - * singular translation for modules. - * - * @param string $msg Message. - * - * @return string - */ - public function __($msg) { - return __($msg, $this->domain); - } + $builder->addEventListener( + FormEvents::POST_SUBMIT, + function (FormEvent $event) { + $form = $event->getForm(); + // this would be your entity, i.e. SportMeetup + $data = $event->getData(); + $recipients_string = $form->get('recipientUsers')->getData(); + $unames_array = explode(',', $recipients_string); + foreach ($unames_array as $recipient_uname) { + $recipient = $this->entityManager->getRepository('Zikula\UsersModule\Entity\UserEntity')->findOneBy(['uname' => $recipient_uname]); + if (!$recipient) { + continue; + } + $user_recipient = new UserRecipientEntity(); + $user_recipient->setUser($recipient); + $user_recipient->setMessage($data); + $data->getRecipientUsers()->add($user_recipient); + } + //Groups @todo +// $recipients_string = $form->get('recipientUsers')->getData(); +// $unames_array = explode(',', $recipients_string); +// foreach ($unames_array as $recipient_uname) { +// $recipient = $this->entityManager->getRepository('Zikula\UsersModule\Entity\UserEntity')->findOneBy(['uname' => $recipient_uname]); +// if (!$recipient) { +// +// continue; +// } +// $user_recipient = new UserRecipientEntity(); +// $user_recipient->setUser($recipient); +// $user_recipient->setMessage($data); +// $data->getRecipientUsers()->add($user_recipient); +// } + } + ); - /** - * Plural translations for modules. - * - * @param string $m1 Singular. - * @param string $m2 Plural. - * @param int $n Count. - * - * @return string - */ - public function _n($m1, $m2, $n) { - return _n($m1, $m2, $n, $this->domain); + if ($options['isXmlHttpRequest'] == false) { + $builder->add('send', SubmitType::class) + ->add('saveAsDraft', SubmitType::class) + ->add('preview', SubmitType::class); + } } /** - * Format translations for modules. - * - * @param string $msg Message. - * @param string|array $param Format parameters. - * - * @return string + * {@inheritdoc} */ - public function __f($msg, $param) { - return __f($msg, $param, $this->domain); + public function getName() + { + return 'zikula_intercom_message_type'; } /** - * Format pural translations for modules. - * - * @param string $m1 Singular. - * @param string $m2 Plural. - * @param int $n Count. - * @param string|array $param Format parameters. - * - * @return string + * {@inheritdoc} */ - public function _fn($m1, $m2, $n, $param) { - return _fn($m1, $m2, $n, $param, $this->domain); + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'isXmlHttpRequest' => false, + ]); } } diff --git a/Form/Type/PreferencesType.php b/Form/Type/PreferencesType.php index 5e93d06..05c3f93 100644 --- a/Form/Type/PreferencesType.php +++ b/Form/Type/PreferencesType.php @@ -252,6 +252,7 @@ public function getName() public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ + 'isXmlHttpRequest' => false, ]); } } diff --git a/Form/Type/ReplyType.php b/Form/Type/ReplyType.php new file mode 100644 index 0000000..9acd710 --- /dev/null +++ b/Form/Type/ReplyType.php @@ -0,0 +1,65 @@ +setMethod('POST') + ->add('sendAsGroup', EntityType::class, [ + 'class' => GroupEntity::class, + 'query_builder' => function (EntityRepository $er) { + return $er->createQueryBuilder('u') + ->orderBy('u.name', 'ASC'); + }, + 'choice_label' => 'name', + 'required' => false, + ]) + ->add('text', TextareaType::class, [ + 'required' => true, + ]); + + if ($options['isXmlHttpRequest'] == false) { + $builder->add('send', SubmitType::class) + ->add('saveAsDraft', SubmitType::class) + ->add('preview', SubmitType::class); + } + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'zikula_intercom_reply_type'; + } + + /** + * {@inheritdoc} + */ + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults([ + 'isXmlHttpRequest' => false, + ]); + } +} diff --git a/Manager/MessageManager.php b/Manager/MessageManager.php index 91fbbad..5e95f1b 100644 --- a/Manager/MessageManager.php +++ b/Manager/MessageManager.php @@ -16,6 +16,9 @@ use Symfony\Component\Routing\RouterInterface; use Zikula\Common\Translator\TranslatorInterface; use Zikula\ExtensionsModule\Api\VariableApi; +use Zikula\IntercomModule\Entity\Message\AbstractMessageEntity; +use Zikula\IntercomModule\Entity\Message\NormalEntity; +use Zikula\IntercomModule\Entity\MessageDetails\MessageUserDetailsEntity; use Zikula\PermissionsModule\Api\PermissionApi; use Zikula\UsersModule\Api\CurrentUserApi; @@ -48,6 +51,10 @@ class MessageManager protected $name; + private $_message; + + private $preview = false; + /** * Construct the manager. * @@ -69,7 +76,7 @@ public function __construct( PermissionApi $permission, VariableApi $variableApi ) { - $this->name = 'ZikulaDizkusModule'; + $this->name = 'ZikulaIntercomModule'; $this->translator = $translator; $this->router = $router; $this->requestStack = $requestStack; @@ -82,448 +89,383 @@ public function __construct( /** * Get manager. + */ + public function getManager($message = null) + { + if ($message === null) { + return $this; + } elseif ($message instanceof AbstractMessageEntity) { + return $this->setMessage($message); + } elseif (is_int((int) $message)) { + return $this->load(['id' => $message]); + } + + return $this; + } + + /** + * create new blank message. + */ + public function create() + { + $this->_message = new NormalEntity(); + + return $this; + } + + /** + * start managing from entity. * - * @param int $uid user id (optional: defaults to current user) + * @return this */ - public function getManager() + public function setMessage($message) { -// //current user id -// $current = $this->userApi->isLoggedIn() ? $this->request->getSession()->get('uid') : 1; -// if (!empty($user)) { -// if ($user instanceof UserEntity) { -// $this->_managedUser = $user; -// } else { -// //if uid instance of zikua user -// $this->_managedUser = $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $uid); -// } -// -// } elseif (empty($user)) { -// $this->_managedUser= $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $current); -// } else { -// $this->_managedUser = null; -// } -// // $this -// return $this->checkLastVisit(); + $this->_message = $message; return $this; } -} -//lass Messages { -// -// private $name; -// public $entityManager; -// private $messages; -// private $filters; -// -// /** -// * construct -// */ -// public function __construct($entityManager) { -// $this->name = 'ZikulaIntercomModule'; -// $this->entityManager = $entityManager; -// } -// -// /** -// * load messages -// */ -// public function load($box, $filters) { -// -// switch ($box) { -// case 'inbox': -// $filters['recipient'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'byrecipient'; -// break; -// case 'outbox': -// $filters['sender'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'bysender'; -// break; -// case 'archive': -// $filters['recipient'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'byrecipient'; -// $filters['stored'] = 'byrecipient'; -// break; -// case 'admin': -// -// break; -// default: -// break; -// } -// -// -// $this->messages = $this->entityManager -// ->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getAll($filters); -// -// $this->filters = $filters; -// -// return $this; -// } -// -// /** -// * get messages -// */ -// public function getmessages() { -// return $this->messages; -// } -// -// /** -// * get messages -// */ -// public function getmessages_array() { -// $messages_array = array(); -// foreach ($this->messages as $key => $message) { -// $messages_array[$key] = $message; -// } -// return $messages_array; -// } -// -// /** -// * get messages count -// */ -// public function getmessages_count() { -// return $this->messages->count(); -// } -// -// /** -// * get messages count -// */ -// public function getPager() { -// return ['page' => $this->filters['page'], -// 'total' => ceil($this->getmessages_count() / $this->filters['limit'])]; -// } -// -// /** -// * get user messages counts -// */ -// public function count() { -// return $this->messages->count(); -// } -// -//} + /** + * load message from database. + */ + public function load($p) + { + $this->_message = $this->entityManager + ->getRepository(AbstractMessageEntity::class) + ->findOneBy($p); -//class Message { -// -// private $name; -// private $_message; -// private $_new; -// public $entityManager; -// -// /** -// * construct -// */ -// public function __construct($entityManager) { -// $this->name = 'ZikulaIntercomModule'; -// $this->entityManager = $entityManager; -// } -// -// /** -// * create new blank message -// * -// */ -// public function create() { -// $this->_message = new MessageEntity(); -// } -// -// /** -// * load message from database -// * -// */ -// public function load($p) { -// $this->_message = $this->entityManager -// ->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getOneBy($p); -// } -// -// /** -// * set new message array -// * -// * @return boolean -// */ -// public function setNewData($p) { -// $this->_new = $p; -// return true; -// } -// -// /** -// * return new message array -// * -// * @return boolean -// */ -// public function getNewData() { -// return $this->_new; -// } -// -// /** -// * return message id -// * -// * @return array -// */ -// public function getId() { -// return $this->_message->getId(); -// } -// -// /** -// * return message as doctrine2 object -// * -// * @return object -// */ -// public function get() { -// return $this->_message; -// } -// -// /** -// * return message as array -// * -// * @return mixed array or false -// */ -// public function toArray() { -// if (!$this->exist()) { -// return false; -// } -// return $this->_message->toArray(); -// } -// -// /** -// * return exist status -// * -// * @return boolean -// */ -// public function exist() { -// return (!$this->_message) ? false : true; -// } -// -// /** -// * return validation status -// * -// * @return boolean -// */ -// public function isValid() { -// return true;//return $this->validator->isValid(); -// } -// -// /** -// * return errors array -// * -// * @return array -// */ -// public function getErrors() { -// //return $this->validator->getErrors(); -// } -// -// /** -// * set seen status -// * -// * @return boolean -// */ -// public function setSeen() { -// $this->_message->setSeen(new \DateTime('now')); + return $this; + } + + /** + * return message id. + * + * @return array + */ + public function getId() + { + return ($this->exists()) ? $this->_message->getId() : false; + } + + /** + * return message as doctrine2 object. + * + * @return object + */ + public function get() + { + return $this->_message; + } + + /** + * return message as array. + * + * @return mixed array or false + */ + public function toArray() + { + if (!$this->exists()) { + return false; + } + + return $this->_message->toArray(); + } + + /** + * return exist status. + * + * @return bool + */ + public function exists() + { + return (!$this->_message) ? false : true; + } + + /** + * get new message. + * + * @return object NormalEntity + */ + public function getNewMessage() + { + $this->create(); + + return $this->_message; + } + + /** + * prepare preview. + * + * @return this + */ + public function prepareForPreview() + { + $this->setPreview(true); + + return $this; + } + + /** + * set preview mode. + * + * @return this + */ + public function setPreview($preview) + { + $this->preview = $preview; + + return $this; + } + + /** + * is preview mode. + * + * @return bool + */ + public function isPreview() + { + return $this->preview; + } + + /** + * perform save as draft. + * + * @return this + */ + public function saveAsDraft() + { + return $this->store(); + } + + /** + * perform send. + * + * @return this + */ + public function send() + { + $this->_message->setSent(new \DateTime('now')); + + return $this->store(); + } + + /** + * return reply message array. + * + * @return array + */ + public function getReplyPrepared() + { + $reply = new NormalEntity(); + $reply->setParent($this->_message); + $reply->setSubject($this->translator->__('Re:').' '.$this->_message->getReplySubject()); + $reply->setText($this->translator->__('Text:').' '.$this->_message->getReplyText()); + + return $reply; + } + + /** + * perform reply. + * + * @return bool + */ + public function reply() + { +// $this->_message->setReplied(new \DateTime('now')); // $this->entityManager->persist($this->_message); // $this->entityManager->flush(); -// return true; -// } -// -// /** -// * return reply message array -// * -// * @return array -// */ -// public function prepareForReply() { -// $reply = array(); -// $reply['id'] = $this->_message->getId(); -// $reply['sender'] = $this->_message->getRecipient()->toArray(); -// $reply['recipient'] = $this->_message->getSender()->toArray(); -// $reply['subject'] = __('Re:') . ' ' . $this->_message->getSubject(); -// $reply['text'] = __('Text') . ' ' . $this->_message->getText(); -// return $reply; -// } +// $this->create(); // -// /** -// * return forward message array -// * -// * @return array -// */ -// public function prepareForForward() { -// $reply = array(); +// return $this->save(); + } + + /** + * return forward message array. + * + * @return array + */ + public function prepareForForward() + { +// $reply = []; // $reply['id'] = $this->_message->getId(); // $reply['sender'] = $this->_message->getRecipient()->toArray(); // $reply['recipient'] = ''; // $reply['subject'] = __('Fwd:') . ' ' . $this->_message->getSubject(); // $reply['text'] = __('Text') . ' ' . $this->_message->getText(); -// return $reply; -// } -// -// /** -// * perform send -// * -// * @return boolean -// */ -// public function send() { -// $this->create(); -// return $this->save(); -// } -// -// /** -// * perform reply -// * -// * @return boolean -// */ -// public function reply() { -// $this->_message->setReplied(new \DateTime('now')); -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// $this->create(); -// return $this->save(); -// } -// -// /** -// * perform store -// * -// * @return boolean -// * -// * @todo Implement new storage system -// */ -// public function store() { -// $recipient = $this->_message->getRecipient()->getUid() == UserUtil::getVar('uid') ? $this->_message->setStoredbyrecipient(1) : 1; -// $sender = $this->_message->getSender()->getUid() == UserUtil::getVar('uid') ? $this->_message->setStoredbysender(1) : 1; -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return ($recipient || $sender); -// } -// -// /** -// * perform delete -// * -// * @return boolean -// */ -// public function delete() { -// $recipient = $this->_message->getRecipient()->getUid() == UserUtil::getVar('uid') ? $this->_message->setDeletedbyrecipient(1) : 1; -// $sender = $this->_message->getSender()->getUid() == UserUtil::getVar('uid') ? $this->_message->setDeletedbysender(1) : 1; -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return ($recipient || $sender); -// } -// -// /** -// * perform forward -// * -// * @return boolean -// */ -// public function forward() { -// $this->create(); -// return $this->save(); -// } // -// /** -// * prepare for save -// * -// * @return boolean -// */ -// public function prepareForSave() { -// unset($this->_new['id']); -// unset($this->_new['recipients']); -// unset($this->_new['multiple']); -// } -// -// /** -// * perform save -// * -// * @return boolean -// */ -// public function save() { -// if (!$this->getId() && $this->_new && $this->isValid()) { -// $this->prepareForSave(); -// $this->_message->merge($this->_new); -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return true; -// } -// if ($this->getId() && $this->_new && $this->isValid()) { -// $this->prepareForSave(); -// $this->_message->merge($this->_new); -// $this->entityManager->flush(); -// return true; -// } -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function remove() { +// return $reply; + } + + /** + * perform forward. + * + * @return bool + */ + public function forward() + { + } + + /** + * perform store. + * + * @return bool + * + * @todo Implement new storage system + */ + public function store() + { + $this->entityManager->persist($this->_message); + $this->entityManager->flush(); + + return $this; + } + + /** + * remove message. + * + * @return bool + */ + public function remove() + { // $this->entityManager->remove($this->_message); // $this->entityManager->flush(); -// return true; -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function isMultiple() { -// if (is_array($this->_new['multiple'])) { -// return true; -// } -// return false; -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function sendMultiple() { -// $multiple = $this->_new['multiple']; -// unset($this->_new['multiple']); -// unset($this->_new['recipients']); -// foreach ($multiple as $key => $recipient) { -// $this->_new['recipient'] = $recipient; -// $this->send(); -// } -// return true; -// } -// -// /** -// * Edit field. -// */ -// public function editField($args) { -// if (!isset($args['id']) || !is_numeric($args['id'])) { -// throw new \InvalidArgumentException(__('Invalid arguments array received')); -// } -// if (!isset($args['field']) || !is_string($args['field'])) { -// throw new \InvalidArgumentException(__('Invalid arguments array received')); -// } -// $id = $args['id']; -// $field = $args['field']; -// $value = $args['value']; -// -// $item = $this->entityManager->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getOneBy(array('id' => $id)); -// -// if (!$item) { -// return false; -// } -// switch ($field) { -// case 'deletedbysender': -// $item->setInbox($value); -// break; -// case 'deletedbyrecipient': -// $item->setOutbox($value); -// break; -// case 'notified': -// $item->setNotified(new \DateTime()); -// break; -// case 'seen': -// $item->setSeen(new \DateTime()); -// break; -// case 'replied': -// $item->setReplied(new \DateTime()); -// break; -// } -// $this->entityManager->flush(); -// return true; -// } -// -//} + + return true; + } + + /** + * get message details. + * + * @return object NormalEntity + */ + public function getMessageUserDetails() + { + if (!$this->userApi->isLoggedIn()) { + return $this; + } + + $messageUserDetails = $this->entityManager->getRepository(MessageUserDetailsEntity::class) + ->findOneBy(['message' => $this->_message, 'user' => $this->userApi->get('uid')]); + + if (!$messageUserDetails) { + $messageUserDetails = new MessageUserDetailsEntity(); + $messageUserDetails->setMessage($this->_message); + $user = $this->entityManager->getRepository('Zikula\UsersModule\Entity\UserEntity')->findOneBy(['uid' => $this->userApi->get('uid')]); + $messageUserDetails->setUser($user); + // it should be seen by now or not? +// $messageUserDetails->setSeen(new \DateTime('now')); + } + + return $messageUserDetails; + } + + /** + * set label. + * + * @return object this + */ + public function setlabel($label = null) + { + $messageUserDetails = $this->getMessageUserDetails(); + $messageUserDetails->setLabel($label); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } + + /** + * set seen status. + * + * @return object this + */ + public function setSeen() + { + $messageUserDetails = $this->getMessageUserDetails(); + if ($messageUserDetails->getSeen()) { + return $this; + } + + $messageUserDetails->setSeen(new \DateTime('now')); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } + + /** + * set replied status. + * + * @return object this + */ + public function setReplied() + { + $messageUserDetails = $this->getMessageUserDetails(); + if ($messageUserDetails->getReplied()) { + return $this; + } + + $messageUserDetails->setReplied(new \DateTime('now')); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } + + /** + * set notified status. + * + * @return object this + */ + public function setNotified() + { + $messageUserDetails = $this->getMessageUserDetails(); + if ($messageUserDetails->getNotified()) { + return $this; + } + + $messageUserDetails->setNotified(new \DateTime('now')); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } + + /** + * set seen status. + * + * @return bool + */ + public function setStored() + { + $messageUserDetails = $this->getMessageUserDetails(); + if ($messageUserDetails->getStored()) { + return $this; + } + + $messageUserDetails->setStored(new \DateTime('now')); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } + + /** + * perform delete. + * + * @return bool + */ + public function delete() + { + $messageUserDetails = $this->getMessageUserDetails(); + if ($messageUserDetails->getDeleted()) { + return $this; + } + + $messageUserDetails->setDeleted(new \DateTime('now')); + $this->entityManager->persist($messageUserDetails); + $this->entityManager->flush(); + + return $this; + } +} diff --git a/Manager/Messenger.php b/Manager/Messenger.php index 11b9f3e..e107920 100644 --- a/Manager/Messenger.php +++ b/Manager/Messenger.php @@ -48,6 +48,10 @@ class Messenger protected $name; + private $messages; + + private $filters; + /** * Construct the manager. * @@ -86,443 +90,124 @@ public function __construct( */ public function getMessenger() { -// //current user id -// $current = $this->userApi->isLoggedIn() ? $this->request->getSession()->get('uid') : 1; -// if (!empty($user)) { -// if ($user instanceof UserEntity) { -// $this->_managedUser = $user; -// } else { -// //if uid instance of zikua user -// $this->_managedUser = $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $uid); -// } -// -// } elseif (empty($user)) { -// $this->_managedUser= $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $current); -// } else { -// $this->_managedUser = null; -// } -// // $this -// return $this->checkLastVisit(); + return $this; + } + + /** + * load messages. + */ + public function load($box, $filters) + { + if (!$this->userApi->isLoggedIn()) { + return $this; + } + + $user = $this->entityManager->getRepository('Zikula\UsersModule\Entity\UserEntity')->findOneBy(['uid' => $this->userApi->get('uid')]); + + $this->filters = $filters; + switch ($box) { + case 'inbox': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getRecivedMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1); + + break; + case 'sent': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getSentMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1); + + break; + case 'stored': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getStoredMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1); + + break; + case 'draft': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getDraftMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1); + break; + case 'trash': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getDeletedMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1); + + break; + case 'labels': + $this->messages = $this->entityManager + ->getRepository('Zikula\IntercomModule\Entity\Message\AbstractMessageEntity') + ->getLabeledMessagesByUser($user, $filters['sortby'], $filters['sortorder'], $filters['limit'], $filters['page'] = 1, $filters['label']); + + break; + default: + break; + } return $this; } -} -//lass Messages { -// -// private $name; -// public $entityManager; -// private $messages; -// private $filters; -// -// /** -// * construct -// */ -// public function __construct($entityManager) { -// $this->name = 'ZikulaIntercomModule'; -// $this->entityManager = $entityManager; -// } -// -// /** -// * load messages -// */ -// public function load($box, $filters) { -// -// switch ($box) { -// case 'inbox': -// $filters['recipient'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'byrecipient'; -// break; -// case 'outbox': -// $filters['sender'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'bysender'; -// break; -// case 'archive': -// $filters['recipient'] = \UserUtil::getVar('uid'); -// $filters['deleted'] = 'byrecipient'; -// $filters['stored'] = 'byrecipient'; -// break; -// case 'admin': -// -// break; -// default: -// break; -// } -// -// -// $this->messages = $this->entityManager -// ->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getAll($filters); -// -// $this->filters = $filters; -// -// return $this; -// } -// -// /** -// * get messages -// */ -// public function getmessages() { -// return $this->messages; -// } -// -// /** -// * get messages -// */ -// public function getmessages_array() { -// $messages_array = array(); -// foreach ($this->messages as $key => $message) { -// $messages_array[$key] = $message; -// } -// return $messages_array; -// } -// -// /** -// * get messages count -// */ -// public function getmessages_count() { -// return $this->messages->count(); -// } -// -// /** -// * get messages count -// */ -// public function getPager() { -// return ['page' => $this->filters['page'], -// 'total' => ceil($this->getmessages_count() / $this->filters['limit'])]; -// } -// -// /** -// * get user messages counts -// */ -// public function count() { -// return $this->messages->count(); -// } -// -//} + /** + * get messages. + */ + public function getmessages() + { + return $this->messages; + } + + /** + * get messages. + */ + public function getmessages_array() + { + $messages_array = []; + foreach ($this->messages as $key => $message) { + $messages_array[$key] = $message; + } -//class Message { -// -// private $name; -// private $_message; -// private $_new; -// public $entityManager; -// -// /** -// * construct -// */ -// public function __construct($entityManager) { -// $this->name = 'ZikulaIntercomModule'; -// $this->entityManager = $entityManager; -// } -// -// /** -// * create new blank message -// * -// */ -// public function create() { -// $this->_message = new MessageEntity(); -// } -// -// /** -// * load message from database -// * -// */ -// public function load($p) { -// $this->_message = $this->entityManager -// ->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getOneBy($p); -// } -// -// /** -// * set new message array -// * -// * @return boolean -// */ -// public function setNewData($p) { -// $this->_new = $p; -// return true; -// } -// -// /** -// * return new message array -// * -// * @return boolean -// */ -// public function getNewData() { -// return $this->_new; -// } -// -// /** -// * return message id -// * -// * @return array -// */ -// public function getId() { -// return $this->_message->getId(); -// } -// -// /** -// * return message as doctrine2 object -// * -// * @return object -// */ -// public function get() { -// return $this->_message; -// } -// -// /** -// * return message as array -// * -// * @return mixed array or false -// */ -// public function toArray() { -// if (!$this->exist()) { -// return false; -// } -// return $this->_message->toArray(); -// } -// -// /** -// * return exist status -// * -// * @return boolean -// */ -// public function exist() { -// return (!$this->_message) ? false : true; -// } -// -// /** -// * return validation status -// * -// * @return boolean -// */ -// public function isValid() { -// return true;//return $this->validator->isValid(); -// } -// -// /** -// * return errors array -// * -// * @return array -// */ -// public function getErrors() { -// //return $this->validator->getErrors(); -// } -// -// /** -// * set seen status -// * -// * @return boolean -// */ -// public function setSeen() { -// $this->_message->setSeen(new \DateTime('now')); -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return true; -// } -// -// /** -// * return reply message array -// * -// * @return array -// */ -// public function prepareForReply() { -// $reply = array(); -// $reply['id'] = $this->_message->getId(); -// $reply['sender'] = $this->_message->getRecipient()->toArray(); -// $reply['recipient'] = $this->_message->getSender()->toArray(); -// $reply['subject'] = __('Re:') . ' ' . $this->_message->getSubject(); -// $reply['text'] = __('Text') . ' ' . $this->_message->getText(); -// return $reply; -// } -// -// /** -// * return forward message array -// * -// * @return array -// */ -// public function prepareForForward() { -// $reply = array(); -// $reply['id'] = $this->_message->getId(); -// $reply['sender'] = $this->_message->getRecipient()->toArray(); -// $reply['recipient'] = ''; -// $reply['subject'] = __('Fwd:') . ' ' . $this->_message->getSubject(); -// $reply['text'] = __('Text') . ' ' . $this->_message->getText(); -// return $reply; -// } -// -// /** -// * perform send -// * -// * @return boolean -// */ -// public function send() { -// $this->create(); -// return $this->save(); -// } -// -// /** -// * perform reply -// * -// * @return boolean -// */ -// public function reply() { -// $this->_message->setReplied(new \DateTime('now')); -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// $this->create(); -// return $this->save(); -// } -// -// /** -// * perform store -// * -// * @return boolean -// * -// * @todo Implement new storage system -// */ -// public function store() { -// $recipient = $this->_message->getRecipient()->getUid() == UserUtil::getVar('uid') ? $this->_message->setStoredbyrecipient(1) : 1; -// $sender = $this->_message->getSender()->getUid() == UserUtil::getVar('uid') ? $this->_message->setStoredbysender(1) : 1; -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return ($recipient || $sender); -// } -// -// /** -// * perform delete -// * -// * @return boolean -// */ -// public function delete() { -// $recipient = $this->_message->getRecipient()->getUid() == UserUtil::getVar('uid') ? $this->_message->setDeletedbyrecipient(1) : 1; -// $sender = $this->_message->getSender()->getUid() == UserUtil::getVar('uid') ? $this->_message->setDeletedbysender(1) : 1; -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return ($recipient || $sender); -// } -// -// /** -// * perform forward -// * -// * @return boolean -// */ -// public function forward() { -// $this->create(); -// return $this->save(); -// } -// -// /** -// * prepare for save -// * -// * @return boolean -// */ -// public function prepareForSave() { -// unset($this->_new['id']); -// unset($this->_new['recipients']); -// unset($this->_new['multiple']); -// } -// -// /** -// * perform save -// * -// * @return boolean -// */ -// public function save() { -// if (!$this->getId() && $this->_new && $this->isValid()) { -// $this->prepareForSave(); -// $this->_message->merge($this->_new); -// $this->entityManager->persist($this->_message); -// $this->entityManager->flush(); -// return true; -// } -// if ($this->getId() && $this->_new && $this->isValid()) { -// $this->prepareForSave(); -// $this->_message->merge($this->_new); -// $this->entityManager->flush(); -// return true; -// } -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function remove() { -// $this->entityManager->remove($this->_message); -// $this->entityManager->flush(); -// return true; -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function isMultiple() { -// if (is_array($this->_new['multiple'])) { -// return true; -// } -// return false; -// } -// -// /** -// * remove message compleatly -// * -// * @return boolean -// */ -// public function sendMultiple() { -// $multiple = $this->_new['multiple']; -// unset($this->_new['multiple']); -// unset($this->_new['recipients']); -// foreach ($multiple as $key => $recipient) { -// $this->_new['recipient'] = $recipient; -// $this->send(); -// } -// return true; -// } -// -// /** -// * Edit field. -// */ -// public function editField($args) { -// if (!isset($args['id']) || !is_numeric($args['id'])) { -// throw new \InvalidArgumentException(__('Invalid arguments array received')); -// } -// if (!isset($args['field']) || !is_string($args['field'])) { -// throw new \InvalidArgumentException(__('Invalid arguments array received')); -// } -// $id = $args['id']; -// $field = $args['field']; -// $value = $args['value']; -// -// $item = $this->entityManager->getRepository('Zikula\IntercomModule\Entity\MessageEntity') -// ->getOneBy(array('id' => $id)); -// -// if (!$item) { -// return false; -// } -// switch ($field) { -// case 'deletedbysender': -// $item->setInbox($value); -// break; -// case 'deletedbyrecipient': -// $item->setOutbox($value); -// break; -// case 'notified': -// $item->setNotified(new \DateTime()); -// break; -// case 'seen': -// $item->setSeen(new \DateTime()); -// break; -// case 'replied': -// $item->setReplied(new \DateTime()); -// break; -// } -// $this->entityManager->flush(); -// return true; -// } -// -//} + return $messages_array; + } + + /** + * get messages. + */ + public function loadUserData() + { + if (!$this->userApi->isLoggedIn()) { + return $this; + } + + $user = $this->entityManager->getRepository('Zikula\UsersModule\Entity\UserEntity')->findOneBy(['uid' => $this->userApi->get('uid')]); + foreach ($this->messages as $message) { + $message->getMessageDataByUser($user); + } + + return $this; + } + + /** + * get messages count. + */ + public function getmessages_count() + { + return $this->messages->count(); + } + + /** + * get messages count. + */ + public function getPager() + { + return ['page' => $this->filters['page'], + 'total' => ceil($this->getmessages_count() / $this->filters['limit']), ]; + } + + /** + * get user messages counts. + */ + public function count() + { + return $this->messages->count(); + } +} diff --git a/Manager/UserManager.php b/Manager/UserManager.php index fbab3c9..2791a94 100644 --- a/Manager/UserManager.php +++ b/Manager/UserManager.php @@ -12,19 +12,18 @@ namespace Zikula\IntercomModule\Manager; use Doctrine\ORM\EntityManager; -use Doctrine\ORM\Tools\Pagination\Paginator; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\RouterInterface; use Zikula\Common\Translator\TranslatorInterface; use Zikula\ExtensionsModule\Api\VariableApi; +use Zikula\PermissionsModule\Api\PermissionApi; use Zikula\UsersModule\Api\CurrentUserApi; use Zikula\UsersModule\Entity\UserEntity; -use Zikula\PermissionsModule\Api\PermissionApi; /** - * UserManager + * UserManager. * * @author Kaik */ @@ -51,7 +50,7 @@ class UserManager private $translator; /** - * Managed forum user + * Managed forum user. * * @var UserEntity */ @@ -64,16 +63,16 @@ class UserManager protected $name; /** - * Construct the manager + * Construct the manager. * * @param TranslatorInterface $translator - * @param RouterInterface $router - * @param RequestStack $requestStack - * @param EntityManager $entityManager - * @param CurrentUserApi $userApi - * @param PermissionApi $permission - * @param VariableApi $variableApi - * @param RankHelper $ranksHelper + * @param RouterInterface $router + * @param RequestStack $requestStack + * @param EntityManager $entityManager + * @param CurrentUserApi $userApi + * @param PermissionApi $permission + * @param VariableApi $variableApi + * @param RankHelper $ranksHelper */ public function __construct( TranslatorInterface $translator, @@ -84,7 +83,7 @@ public function __construct( PermissionApi $permission, VariableApi $variableApi ) { - $this->name = 'ZikulaDizkusModule'; + $this->name = 'ZikulaIntercomModule'; $this->translator = $translator; $this->router = $router; $this->requestStack = $requestStack; @@ -96,9 +95,9 @@ public function __construct( } /** - * Get manager + * Get manager. * - * @param int $uid user id (optional: defaults to current user) + * @param int $user user id (optional: defaults to current user) */ public function getManager($user = null) { @@ -108,12 +107,11 @@ public function getManager($user = null) if ($user instanceof UserEntity) { $this->_managedUser = $user; } else { - //if uid instance of zikua user - $this->_managedUser = $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $uid); + //if uid instance of zikua user + $this->_managedUser = $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $user); } - } elseif (empty($user)) { - $this->_managedUser= $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $current); + $this->_managedUser = $this->entityManager->find('Zikula\UsersModule\Entity\UserEntity', $current); } else { $this->_managedUser = null; } @@ -124,7 +122,7 @@ public function getManager($user = null) } /** - * Check if user exists + * Get managed user by name. * * @return bool */ @@ -139,7 +137,7 @@ public function getManagedByUserName($uname) } /** - * Check if user exists + * Check if user exists. * * @return bool */ @@ -149,7 +147,7 @@ public function exists() } /** - * Return forum user as doctrine2 object + * Return forum user as doctrine2 object. * * @return UserEntity */ @@ -159,17 +157,17 @@ public function get() } /** - * Get user id + * Get user id. * * @return UserEntity */ public function getId() { - return $this->exists() ? $this->_managedUser->getUserId() : false; + return $this->exists() ? $this->_managedUser->getUid() : false; } /** - * Return forum user as array + * Return forum user as array. * * @return array */ @@ -179,7 +177,7 @@ public function toArray() } /** - * Return zikula user as doctrine2 object + * Return zikula user as doctrine2 object. * * @return serEntity */ @@ -189,17 +187,17 @@ public function getUser() } /** - * Return username + * Return username. * * @return string */ public function getUserName() { - return ($this->exists() && !$this->isAnonymous()) ? $this->_managedUser->getUser()->getUname() : 'Anonymous'; + return ($this->exists() && !$this->isAnonymous()) ? $this->_managedUser->getUname() : 'Anonymous'; } /** - * Return forum user logged in status + * Return forum user logged in status. * * @return ForumUserEntity */ @@ -209,9 +207,10 @@ public function isLoggedIn() } /** - * Return forum user online in status + * Return forum user online in status. * * @todo remove this duplicate + * * @return ForumUserEntity */ public function isOnline() @@ -220,7 +219,7 @@ public function isOnline() } /** - * check to remove... or rename to isCurrent() + * @todo check to remove... or rename to isCurrent(). * * @return string */ @@ -240,7 +239,7 @@ public function isAnonymous() } /** - * Return current user page + * Return current user page. * * @deprecated to remove * @@ -252,9 +251,9 @@ public function getCurrentPosition() } /** - * Is user allowed to comment check + * Is user allowed to comment check. * - * @param object Object to chceck comment permissions for + * @param object Object to check comment permissions for * * @return bool */ @@ -268,9 +267,9 @@ public function allowedToComment($object) } /** - * Is user allowed to edit check + * Is user allowed to edit check. * - * @param object Object to chceck edit permissions for + * @param object Object to check edit permissions for * * @return bool */ @@ -288,9 +287,9 @@ public function allowedToEdit($object) } /** - * Is user allowed to moderate check + * Is user allowed to moderate check. * - * @param object Object to chceck moderate permissions for + * @param object Object to check moderate permissions for * * @return bool */ @@ -304,7 +303,7 @@ public function allowedToModerate($object) } /** - * Get user avatar + * Get user avatar. * * @todo - add deleted user and anonymous avatar image * @@ -322,7 +321,7 @@ public function getAvatar() } /** - * Get user signature + * Get user signature. * * @param string */ @@ -332,7 +331,7 @@ public function getSignature() } /** - * Set user signature + * Set user signature. * * @param string $signature */ @@ -345,8 +344,8 @@ public function setSignature($signature) } /** - * Check last visit - * reads the cookie, updates it and returns the last visit date in unix timestamp + * Check last visit. + * reads the cookie, updates it and returns the last visit date in unix timestamp. * * @param none * @@ -379,7 +378,7 @@ public function checkLastVisit() } /** - * Get last visit + * Get last visit. * * @return unix timestamp last visit date */ @@ -387,4 +386,14 @@ public function getLastVisit() { return $this->lastVisit; } + + /** + * Get last visit. + * + * @return unix timestamp last visit date + */ + public function getSendAsGroups() + { + return []; + } } diff --git a/Resources/config/routing.yml b/Resources/config/routing.yml index a994805..d418d1d 100644 --- a/Resources/config/routing.yml +++ b/Resources/config/routing.yml @@ -1,5 +1,37 @@ -zikulaintercommodule: - resource: "@ZikulaIntercomModule/Controller" +# please do not change order MessagesController need to be at the end + +zikulaintercommodule_admin: + resource: "@ZikulaIntercomModule/Controller/AdminController.php" + type: annotation + options: + zkNoBundlePrefix: true + +zikulaintercommodule_user: + resource: "@ZikulaIntercomModule/Controller/UserController.php" + type: annotation + options: + zkNoBundlePrefix: true + +zikulaintercommodule_labels: + resource: "@ZikulaIntercomModule/Controller/LabelsController.php" + type: annotation + options: + zkNoBundlePrefix: true + +zikulaintercommodule_notifications: + resource: "@ZikulaIntercomModule/Controller/NotificationsController.php" + type: annotation + options: + zkNoBundlePrefix: true + +zikulaintercommodule_support: + resource: "@ZikulaIntercomModule/Controller/SupportController.php" + type: annotation + options: + zkNoBundlePrefix: true + +zikulaintercommodule_messages: + resource: "@ZikulaIntercomModule/Controller/MessagesController.php" type: annotation options: zkNoBundlePrefix: true \ No newline at end of file diff --git a/Resources/config/services.yml b/Resources/config/services.yml index e374d85..2fae1da 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -61,6 +61,7 @@ services: zikula_intercom_module.message_manager: class: Zikula\IntercomModule\Manager\MessageManager + shared: false tags: - { name: zikula.intercom.message_manager } arguments: @@ -88,3 +89,10 @@ services: arguments: - "@doctrine.orm.default_entity_manager" - "@zikula_extensions_module.api.variable" + + zikula_intercom_module.form.type.new_message: + class: Zikula\IntercomModule\Form\Type\MessageType + arguments: + - "@doctrine.orm.default_entity_manager" + tags: + - { name: form.type } \ No newline at end of file diff --git a/Resources/public/css/Layouts/Classic/autocomplete-recipients.css b/Resources/public/css/Layouts/Classic/autocomplete-recipients.css new file mode 100644 index 0000000..54c963a --- /dev/null +++ b/Resources/public/css/Layouts/Classic/autocomplete-recipients.css @@ -0,0 +1,73 @@ +/* +InterCom Module for Zikula + +@copyright InterCom Team +@license GNU/GPL - http://www.gnu.org/copyleft/gpl.html +@package InterCom +@see https://github.com/zikula-modules/InterCom +*/ + +/* + Created on : 05-Sep-2017, 16:30:48 + Author : Zikula Team +*/ + +.ui-autocomplete { + max-height: 150px; + overflow-y: auto; + overflow-x: hidden; + background: #fff; + padding: 6px; + border: 1px solid #eee; + border-top-width: 0px; +} + +* html .ui-autocomplete { + height: 150px; +} + +.ui-autocomplete-loading { + /*background: white url('../images/indicator_arrows.gif') right center no-repeat;*/ +} + +.ui-autocomplete .suggestion { + /*margin: 0.2em;*/ + /*padding: 0.2em;*/ + list-style-type: none; + line-height: 1.4em; + cursor: pointer; + display: block; + background-position: 2px 2px; + background-repeat: no-repeat; + background-color: #fff; + /*border: 1px solid #eee;*/ +} + +.ui-autocomplete .suggestion { + /*background-image: url('../images/user.png');*/ +} +.ui-autocomplete .suggestion img { + max-width: 20px; + max-height: 20px; +} +.ui-autocomplete .suggestion .media { + padding: 0.3em; +} + +.ui-autocomplete .suggestion .ui-state-active { + background-color: #c8dfff; +} + +.ui-autocomplete .suggestion .media-body { + font-size: 10px; + color: #888; +} +.ui-autocomplete .suggestion .media-body .media-heading { + font-size: 12px; + line-height: 1.2em; +} + +#recipients_selected .label { + margin-left: 0.3em; + float:left; +} \ No newline at end of file diff --git a/Resources/public/css/Layouts/Classic/common.css b/Resources/public/css/Layouts/Classic/common.css index 70a861e..21866af 100644 --- a/Resources/public/css/Layouts/Classic/common.css +++ b/Resources/public/css/Layouts/Classic/common.css @@ -14,4 +14,23 @@ .pagination { margin: 0px 0; +} + +#intercom #intercom_title h1 { + margin-top: 0px; + margin-left: 2px; +} + +#intercom #intercom_search { + margin-top: 5px; +} + +#intercom #conversations { + margin-bottom: 0px; +} + +#intercom .conversations-footer { +/* border-top-left-radius: 0px; + border-top-right-radius: 0px;*/ + border-top:0px; } \ No newline at end of file diff --git a/Resources/public/css/Layouts/Classic/user.css b/Resources/public/css/Layouts/Classic/user.css new file mode 100644 index 0000000..8930b8f --- /dev/null +++ b/Resources/public/css/Layouts/Classic/user.css @@ -0,0 +1,14 @@ +/* +InterCom Module for Zikula + +@copyright InterCom Team +@license GNU/GPL - http://www.gnu.org/copyleft/gpl.html +@package InterCom +@see https://github.com/zikula-modules/InterCom +*/ + +/* + Created on : 05-Sep-2017, 03:24:18 + Author : Kaik +*/ + diff --git a/Resources/public/js/Zikula.Intercom.MessageManager.js b/Resources/public/js/Zikula.Intercom.MessageManager.js new file mode 100644 index 0000000..c864288 --- /dev/null +++ b/Resources/public/js/Zikula.Intercom.MessageManager.js @@ -0,0 +1,210 @@ +/* + * InterCom Module for Zikula + * + * @copyright InterCom Team + * @license GNU/GPL - http://www.gnu.org/copyleft/gpl.html + * @package InterCom + * @see https://github.com/zikula-modules/InterCom + */ + +var Zikula = Zikula || {}; +Zikula.Intercom = Zikula.Intercom || {}; +(function ($) { + Zikula.Intercom.MessageManager = (function () { +// Init + var data = { + log: null + }; + var settings = { + ajax_timeout: 10000 + } + ; + function init() + { + initSender(); + initRecipients(); + log('init done.'); + } + ; + function readSettings() + { +// settings.ajax_timeout = parseInt($("#ajax_timeout").val()); + log('Upgrade settings updated.'); + } + ; + function log(log) + { + if (log === '') { + } else if (log === null) { + } else if (log.constructor === Array) { + console.log(log.join(' ') + ' '); + } else { + console.log(log + ' '); + } + } + ; + function initSender() + { + $('#sender_select').addClass('hide'); + log('Upgrade settings updated.'); + } + ; + + function initRecipients() + { + // real form text input comma separated + var $recipientUsers_select = $('#zikula_intercom_message_type_recipientUsers'); + var $recipientGroups_select = $('#zikula_intercom_message_type_recipientGroups'); + $recipientUsers_select.parent().addClass('hide'); + $('#auto_search').removeClass('hide'); + // selected + var selected = $recipientUsers_select.val().split(',').filter(x => x); + $.each(selected, function (index, value) { + var $label = $(' ') + .append(' ' + value + ' '); + $('#recipients_selected').append($label); + }); + // search + var $recipients_search = $('#recipients_search'); + $recipients_search.autocomplete({/*appendTo: "#someElem"*/}); + $recipients_search.autocomplete("option", "minLength", 2); + $recipients_search.autocomplete("option", "delay", 500); +// $recipients_search.autocomplete("option", "position", {my: "right top", at: "right bottom"}); + $recipients_search.autocomplete("option", "source", function (request, response) { + response([{loading: true, text: Translator.__('Loading...'), icon: 'fa fa-refresh fa-spin fa-fw'}]); + $.ajax({ + dataType: "json", + method: "POST", + url: Routing.generate('zikulaintercommodule_user_getrecipients'), + data: {fragment: request.term} + }).success(function (data) { + if (data.recipients.length === 0) { + return response([{loading: true, text: Translator.__('No results found!'), icon: 'fa fa-exclamation-circle'}]); + } + + return response(data.recipients); + }); + } + ); + $recipients_search.autocomplete("option", "open", function (event, ui) { + $(this).autocomplete('widget').css({ + width: $(this).outerWidth() + 'px' + }); + return true; + } + ); + $recipients_search.autocomplete("option", "select", function (event, ui) { + var selected = $recipientUsers_select.val().split(',').filter(x => x); + if ($.inArray(ui.item.uname, selected) === -1) { + selected.push(ui.item.uname); + $recipientUsers_select.val(selected.join()); + //show element in view + var $label = $(' ') + .append(' ' + ui.item.uname + ' '); + $('#recipients_selected').append($label); + } else { + $('', {style: 'display:none'}) + .html(Translator.__('Recipient is already selected!')) + .appendTo($('#recipients_selected')) + .fadeIn('slow', + function () { + var el = $(this); + setTimeout(function () { + el.fadeOut('slow', + function () { + $(this).remove(); + }); + }, 2500); + }); + } + $recipients_search.val(''); + + return false; + } + ); + $recipients_search.on('focus', function () { + // Size and position menu + var $ul = $(this).autocomplete('widget'); + $ul.empty(); + $ul.show(); + $ul.css({ + width: $(this).outerWidth() + 'px' +// display: 'block' + }); + $ul.position($.extend({ + of: $(this) + } + , { + my: "left top", + at: "left bottom", + collision: "none" + } + )); + var exists = $ul.find(".info"); + if (exists.length > 0) { + + } else { + $("
  • ").append(" " + + Translator.__('Enter two chatacters to start search') + + " " + + Translator.__('Enter two chatacters to start search') + + "" + ).prependTo($ul); + } + } + ); + var $recipients_instance = $recipients_search.autocomplete('instance'); + $recipients_instance._renderItem = function (ul, item) { + if (item.loading) { + var $li = $("
  • "); + return $li.append("" + item.text + "" + item.text + "").appendTo(ul); + } else { + return $('
  • ') + .append('
    \n\ + \n\ +

    ' + item.uname + '

    \n\ +
  • ') + .appendTo(ul); + } + ; + } + ; + $('#recipients_selected').on("click", ".remove", function (e) { + e.preventDefault(); + var recipient = $(this).data("recipient"); + console.log(recipient); + var selected = $recipientUsers_select.val().split(',').filter(x => x); + if ($.inArray(recipient, selected) > -1) { + var index = selected.indexOf(recipient); + selected.splice(index, 1); + $recipientUsers_select.val(selected.join()); + } + $(this).parent().remove(); + }); + + log('Recipients init done.'); + } + ; + //ajax util + function importAjax(url, data) { + console.log(data); + return $.ajax({ + type: 'POST', + url: url, + data: JSON.stringify(data), + timeout: settings.ajax_timeout, + contentType: "application/json", + dataType: 'json' + }); + } + + //return this and init when ready + return { + init: init + }; + })(); + $(function () { + Zikula.Intercom.MessageManager.init(); + }); +} +)(jQuery); diff --git a/Resources/public/js/Zikula.Intercom.send.manager.js b/Resources/public/js/Zikula.Intercom.send.manager.js deleted file mode 100644 index 9facedf..0000000 --- a/Resources/public/js/Zikula.Intercom.send.manager.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - - diff --git a/Resources/views/Layouts/Classic/draft/conversation.html.twig b/Resources/views/Layouts/Classic/draft/conversation.html.twig deleted file mode 100644 index e3d21be..0000000 --- a/Resources/views/Layouts/Classic/draft/conversation.html.twig +++ /dev/null @@ -1,27 +0,0 @@ -
    -
    - ... {{ message.sender.uname == '' ? 'Unknown' : message.sender.uname }} -
    -
    {{ message.subject }}
    -
    {{ message.send|date("m/d/Y") }}
    -
    {{ include('@ZikulaIntercomModule/Layouts/Classic/archive/conversation.statuses.html.twig') }}
    - -
    -
    -
    - - {{ include('@ZikulaIntercomModule/Layouts/Classic/archive/conversation.messages.first.html.twig') }} -
    -
    - {% if mode == 0 %}{{ __('Message options') }} {% else %} {{ __('Conversation options') }} {% endif %} -
    - - -
    -
    -
    - -
    -
    -
    -
    \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/conversation.list.html.twig b/Resources/views/Layouts/Classic/draft/conversation.list.html.twig deleted file mode 100644 index 88117cb..0000000 --- a/Resources/views/Layouts/Classic/draft/conversation.list.html.twig +++ /dev/null @@ -1,6 +0,0 @@ -{# needed for ajax html output #} -{#{% for message in messages %} - {{ include('@ZikulaIntercomModule/Layouts/Classic/archive/conversation.html.twig') }} -{% else %} -
    {{ __('You currently have no messages.') }}
    -{% endfor %}#} \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/conversation.messages.html.twig b/Resources/views/Layouts/Classic/draft/conversation.messages.html.twig deleted file mode 100644 index c9c708f..0000000 --- a/Resources/views/Layouts/Classic/draft/conversation.messages.html.twig +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    - {% for messagex in message.conversation %} - {{ include('@ZikulaIntercomModule/Layouts/Classic/archive/conversation.messages.single.html.twig', {'message': messagex,'align': messagex.sender == message.sender ? '' : 'pull-right' }) }} - {% else %} - {% endfor %} -
    -
    \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/conversation.messages.single.html.twig b/Resources/views/Layouts/Classic/draft/conversation.messages.single.html.twig deleted file mode 100644 index 6be67b2..0000000 --- a/Resources/views/Layouts/Classic/draft/conversation.messages.single.html.twig +++ /dev/null @@ -1,7 +0,0 @@ -
    -
    - ... {{ message.sender.uname == '' ? message.recipient.uname : message.sender.uname }} -
    {{ message.send|date("m/d/Y") }}
    -
    -

    {{ message.text }}

    -
    \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/conversation.reply.html.twig b/Resources/views/Layouts/Classic/draft/conversation.reply.html.twig new file mode 100644 index 0000000..651fbe1 --- /dev/null +++ b/Resources/views/Layouts/Classic/draft/conversation.reply.html.twig @@ -0,0 +1,7 @@ +
    +
    + ... {{ message.sender.uname }} +
    {{ message.sent|time_diff }}
    +
    +

    {{ message.text }}

    +
    \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/conversation.statuses.html.twig b/Resources/views/Layouts/Classic/draft/conversation.statuses.html.twig deleted file mode 100644 index f9e6e69..0000000 --- a/Resources/views/Layouts/Classic/draft/conversation.statuses.html.twig +++ /dev/null @@ -1,10 +0,0 @@ -
    - {% if message.seen %} - - {% else %} - - {% endif %} - -
    - -
    \ No newline at end of file diff --git a/Resources/views/Layouts/Classic/draft/footer.html.twig b/Resources/views/Layouts/Classic/draft/footer.html.twig index 7a0ec3c..96a398e 100644 --- a/Resources/views/Layouts/Classic/draft/footer.html.twig +++ b/Resources/views/Layouts/Classic/draft/footer.html.twig @@ -1,33 +1,34 @@ -