/app/bundles/LeadBundle/EventListener/CalendarSubscriber.php

https://gitlab.com/mautic-master/mautic · PHP · 98 lines · 63 code · 10 blank · 25 comment · 4 complexity · 6a501e992184f760bddc29df221a2de1 MD5 · raw file

  1. <?php
  2. /**
  3. * @package Mautic
  4. * @copyright 2014 Mautic Contributors. All rights reserved.
  5. * @author Mautic
  6. * @link http://mautic.org
  7. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
  8. */
  9. namespace Mautic\LeadBundle\EventListener;
  10. use Mautic\CalendarBundle\CalendarEvents;
  11. use Mautic\CalendarBundle\Event\CalendarGeneratorEvent;
  12. use Mautic\CoreBundle\EventListener\CommonSubscriber;
  13. use Mautic\CoreBundle\Helper\DateTimeHelper;
  14. /**
  15. * Class CalendarSubscriber
  16. *
  17. * @package Mautic\LeadBundle\EventListener
  18. */
  19. class CalendarSubscriber extends CommonSubscriber
  20. {
  21. /**
  22. * @return array
  23. */
  24. static public function getSubscribedEvents()
  25. {
  26. return array(
  27. CalendarEvents::CALENDAR_ON_GENERATE => array('onCalendarGenerate', 0)
  28. );
  29. }
  30. /**
  31. * Adds events to the calendar
  32. *
  33. * @param CalendarGeneratorEvent $event
  34. *
  35. * @return void
  36. */
  37. public function onCalendarGenerate(CalendarGeneratorEvent $event)
  38. {
  39. $dates = $event->getDates();
  40. $router = $this->factory->getRouter();
  41. // Lead Notes
  42. $query = $this->factory->getEntityManager()->getConnection()->createQueryBuilder();
  43. $query->select('ln.lead_id, l.firstname, l.lastname, ln.date_time AS start, ln.text AS description, ln.type')
  44. ->from(MAUTIC_TABLE_PREFIX . 'lead_notes', 'ln')
  45. ->leftJoin('ln', MAUTIC_TABLE_PREFIX . 'leads', 'l', 'ln.lead_id = l.id')
  46. ->where($query->expr()->andX(
  47. $query->expr()->gte('ln.date_time', ':start'),
  48. $query->expr()->lte('ln.date_time', ':end')
  49. ))
  50. ->setParameter('start', $dates['start_date'])
  51. ->setParameter('end', $dates['end_date'])
  52. ->setFirstResult(0)
  53. ->setMaxResults(100);
  54. $results = $query->execute()->fetchAll();
  55. // We need to convert the date to a ISO8601 compliant string
  56. foreach ($results as &$object) {
  57. if ($object['firstname'] || $object['lastname']) {
  58. $leadName = $object['firstname'] . ' ' . $object['lastname'];
  59. } else {
  60. $leadName = $this->translator->trans('mautic.lead.lead.anonymous');
  61. }
  62. $date = new DateTimeHelper($object['start']);
  63. $object['start'] = $date->toLocalString(\DateTime::ISO8601);
  64. $object['url'] = $router->generate('mautic_contact_action', array('objectAction' => 'view', 'objectId' => $object['lead_id']), true);
  65. $object['attr'] = 'data-toggle="ajax"';
  66. $object['description'] = strip_tags(html_entity_decode($object['description']));
  67. switch ($object['type']) {
  68. default:
  69. case 'general':
  70. $icon = 'fa-file-text';
  71. break;
  72. case 'email':
  73. $icon = 'fa-send';
  74. break;
  75. case 'call':
  76. $icon = 'fa-phone';
  77. break;
  78. case 'meeting':
  79. $icon = 'fa-group';
  80. break;
  81. }
  82. $object['iconClass'] = 'fa fa-fw ' . $icon;
  83. $object['title'] = $leadName;
  84. //$object['title'] .= ' (' . $this->translator->trans('mautic.lead.note.type.' . $object['type']) . ')';
  85. }
  86. $event->addEvents($results);
  87. }
  88. }