예제 #1
0
 /**
  * Returns date/time like Today, 10:00 AM
  *
  * @param        $datetime
  * @param string $timezone
  * @param string $fromFormat
  */
 public function toText($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s')
 {
     if (empty($datetime)) {
         return '';
     }
     $this->helper->setDateTime($datetime, $fromFormat, $timezone);
     $textDate = $this->helper->getTextDate();
     $dt = $this->helper->getLocalDateTime();
     if ($textDate) {
         return $this->translator->trans('mautic.core.date.' . $textDate, array('%time%' => $dt->format("g:i a")));
     } else {
         $interval = $this->helper->getDiff('now', null, true);
         return $this->translator->trans('mautic.core.date.ago', array('%days%' => $interval->days));
     }
 }
예제 #2
0
파일: DateHelper.php 프로젝트: Yame-/mautic
 /**
  * Returns date/time like Today, 10:00 AM
  *
  * @param        $datetime
  * @param string $timezone
  * @param string $fromFormat
  * @param bool   $forceDateForNonText If true, return as full date/time rather than "29 days ago"
  *
  * @return string
  */
 public function toText($datetime, $timezone = 'local', $fromFormat = 'Y-m-d H:i:s', $forceDateForNonText = false)
 {
     if (empty($datetime)) {
         return '';
     }
     $this->helper->setDateTime($datetime, $fromFormat, $timezone);
     $textDate = $this->helper->getTextDate();
     $dt = $this->helper->getLocalDateTime();
     if ($textDate) {
         return $this->translator->trans('mautic.core.date.' . $textDate, array('%time%' => $dt->format("g:i a")));
     } else {
         $interval = $this->helper->getDiff('now', null, true);
         if ($interval->invert && !$forceDateForNonText) {
             // In the past
             return $this->translator->trans('mautic.core.date.ago', array('%days%' => $interval->days));
         } else {
             // In the future
             return $this->toFullConcat($datetime, $timezone, $fromFormat);
         }
     }
 }
예제 #3
0
 /**
  * Get a lead's email stat
  *
  * @param integer $leadId
  * @param array   $options
  *
  * @return array
  * @throws \Doctrine\ORM\NoResultException
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function getLeadStats($leadId, array $options = array())
 {
     $query = $this->createQueryBuilder('s');
     $query->select('IDENTITY(s.email) AS email_id, s.id, s.dateRead, s.dateSent, e.name, e.subject, s.isRead, s.isFailed, s.viewedInBrowser, s.retryCount, IDENTITY(s.list) AS list_id, l.name as list_name, s.trackingHash as idHash, s.openDetails')->leftJoin('MauticEmailBundle:Email', 'e', 'WITH', 'e.id = s.email')->leftJoin('MauticLeadBundle:LeadList', 'l', 'WITH', 'l.id = s.list')->where($query->expr()->andX($query->expr()->eq('IDENTITY(s.lead)', $leadId), $query->expr()->eq('s.isFailed', ':false')))->setParameter('false', false, 'boolean');
     if (!empty($options['ipIds'])) {
         $query->orWhere('s.ipAddress IN (' . implode(',', $options['ipIds']) . ')');
     }
     if (isset($options['filters']['search']) && $options['filters']['search']) {
         $query->andWhere($query->expr()->orX($query->expr()->like('e.subject', $query->expr()->literal('%' . $options['filters']['search'] . '%')), $query->expr()->like('e.name', $query->expr()->literal('%' . $options['filters']['search'] . '%'))));
     }
     $stats = $query->getQuery()->getArrayResult();
     foreach ($stats as &$stat) {
         $dateSent = new DateTimeHelper($stat['dateSent']);
         if (!empty($stat['dateSent']) && !empty($stat['dateRead'])) {
             $stat['timeToRead'] = $dateSent->getDiff($stat['dateRead']);
         } else {
             $stat['timeToRead'] = false;
         }
     }
     return $stats;
 }
예제 #4
0
 /**
  * Get a lead's email stat.
  *
  * @param int   $leadId
  * @param array $options
  *
  * @return array
  *
  * @throws \Doctrine\ORM\NoResultException
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function getLeadStats($leadId, array $options = [])
 {
     $query = $this->getEntityManager()->getConnection()->createQueryBuilder();
     $query->from(MAUTIC_TABLE_PREFIX . 'email_stats', 's')->leftJoin('s', MAUTIC_TABLE_PREFIX . 'emails', 'e', 's.email_id = e.id')->leftJoin('s', MAUTIC_TABLE_PREFIX . 'email_copies', 'ec', 's.copy_id = ec.id');
     if ($leadId) {
         $query->andWhere($query->expr()->eq('s.lead_id', (int) $leadId));
     }
     if (!empty($options['basic_select'])) {
         $query->select('s.email_id, s.id, s.date_read as dateRead, s.date_sent as dateSent, e.subject, e.name as email_name, s.is_read as isRead, s.is_failed as isFailed, ec.subject as storedSubject');
     } else {
         $query->select('s.email_id, s.id, s.date_read as dateRead, s.date_sent as dateSent,e.subject, e.name as email_name, s.is_read as isRead, s.is_failed as isFailed, s.viewed_in_browser as viewedInBrowser, s.retry_count as retryCount, s.list_id, l.name as list_name, s.tracking_hash as idHash, s.open_details as openDetails, ec.subject as storedSubject')->leftJoin('s', MAUTIC_TABLE_PREFIX . 'lead_lists', 'l', 's.list_id = l.id');
     }
     if (isset($options['state'])) {
         $state = $options['state'];
         if ('read' == $state) {
             $query->andWhere($query->expr()->eq('s.is_read', 1));
         } elseif ('sent' == $state) {
             // Get only those that have not been read yet
             $query->andWhere($query->expr()->eq('s.is_read', 0));
             $query->andWhere($query->expr()->eq('s.is_failed', 0));
         } elseif ('failed' == $state) {
             $query->andWhere($query->expr()->eq('s.is_failed', 1));
             $state = 'sent';
         }
     } else {
         $state = 'sent';
     }
     if (isset($options['search']) && $options['search']) {
         $query->andWhere($query->expr()->orX($query->expr()->like('ec.subject', $query->expr()->literal('%' . $options['search'] . '%')), $query->expr()->like('e.subject', $query->expr()->literal('%' . $options['search'] . '%')), $query->expr()->like('e.name', $query->expr()->literal('%' . $options['search'] . '%'))));
     }
     if (isset($options['fromDate']) && $options['fromDate']) {
         $dt = new DateTimeHelper($options['fromDate']);
         $query->andWhere($query->expr()->gte('s.date_sent', $query->expr()->literal($dt->toUtcString())));
     }
     $timeToReadParser = function (&$stat) {
         $dateSent = new DateTimeHelper($stat['dateSent']);
         if (!empty($stat['dateSent']) && !empty($stat['dateRead'])) {
             $stat['timeToRead'] = $dateSent->getDiff($stat['dateRead']);
         } else {
             $stat['timeToRead'] = false;
         }
     };
     return $this->getTimelineResults($query, $options, 'storedSubject, e.subject', 's.date_' . $state, ['openDetails'], ['dateRead', 'dateSent'], $timeToReadParser);
 }
예제 #5
0
 /**
  * Get a lead's email stat
  *
  * @param integer $leadId
  * @param array   $options
  *
  * @return array
  * @throws \Doctrine\ORM\NoResultException
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function getLeadStats($leadId, array $options = array())
 {
     $query = $this->createQueryBuilder('s');
     $query->select('IDENTITY(s.notification) AS notification_id, s.id, s.dateRead, s.dateSent, e.title, s.isRead, s.retryCount, IDENTITY(s.list) AS list_id, l.name as list_name, s.trackingHash as idHash, s.clickDetails')->leftJoin('MauticNotificationBundle:Notification', 'e', 'WITH', 'e.id = s.notification')->leftJoin('MauticLeadBundle:LeadList', 'l', 'WITH', 'l.id = s.list')->where($query->expr()->andX($query->expr()->eq('IDENTITY(s.lead)', $leadId), $query->expr()->eq('s.isFailed', ':false')))->setParameter('false', false, 'boolean');
     if (isset($options['search']) && $options['search']) {
         $query->andWhere($query->expr()->like('e.title', $query->expr()->literal('%' . $options['search'] . '%')));
     }
     if (isset($options['order'])) {
         list($orderBy, $orderByDir) = $options['order'];
         switch ($orderBy) {
             case 'eventLabel':
                 $orderBy = 'e.title';
                 break;
             case 'timestamp':
             default:
                 $orderBy = 'e.dateRead, e.dateSent';
                 break;
         }
         $query->orderBy($orderBy, $orderByDir);
     }
     if (!empty($options['limit'])) {
         $query->setMaxResults($options['limit']);
         if (!empty($options['start'])) {
             $query->setFirstResult($options['start']);
         }
     }
     $stats = $query->getQuery()->getArrayResult();
     foreach ($stats as &$stat) {
         $dateSent = new DateTimeHelper($stat['dateSent']);
         if (!empty($stat['dateSent']) && !empty($stat['dateRead'])) {
             $stat['timeToRead'] = $dateSent->getDiff($stat['dateRead']);
         } else {
             $stat['timeToRead'] = false;
         }
     }
     return $stats;
 }