コード例 #1
0
ファイル: PostCountRepository.php プロジェクト: Yame-/mautic
 /**
  * Fetch Lead stats for some period of time.
  *
  * @param integer $quantity of units
  * @param string $unit of time php.net/manual/en/class.dateinterval.php#dateinterval.props
  * @param array $options
  *
  * @return mixed
  * @throws \Doctrine\ORM\NoResultException
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function getLeadStatsPost($dateFrom, $dateTo, $options)
 {
     $chartQuery = new ChartQuery($this->getEntityManager()->getConnection(), $dateFrom, $dateTo);
     // Load points for selected period
     $q = $this->_em->getConnection()->createQueryBuilder();
     $q->select('cl.post_count, cl.post_date')->from(MAUTIC_TABLE_PREFIX . 'monitor_post_count', 'cl')->orderBy('cl.post_date', 'ASC');
     if (isset($options['monitor_id'])) {
         $q->andwhere($q->expr()->eq('cl.monitor_id', (int) $options['monitor_id']));
     }
     $chartQuery->applyDateFilters($q, 'post_date', 'cl');
     $postCount = $q->execute()->fetchAll();
     return $postCount;
 }
コード例 #2
0
 /**
  * @param null            $channel
  * @param null            $ids
  * @param null            $reason
  * @param null            $listId
  * @param ChartQuery|null $chartQuery
  *
  * @return array|int
  */
 public function getCount($channel = null, $ids = null, $reason = null, $listId = null, ChartQuery $chartQuery = null)
 {
     $q = $this->_em->getConnection()->createQueryBuilder();
     $q->select('count(dnc.id) as dnc_count')->from(MAUTIC_TABLE_PREFIX . 'lead_donotcontact', 'dnc');
     if ($ids) {
         if (!is_array($ids)) {
             $ids = [(int) $ids];
         }
         $q->where($q->expr()->in('dnc.channel_id', $ids));
     }
     if ($channel) {
         $q->andWhere('dnc.channel = :channel')->setParameter('channel', $channel);
     }
     if ($reason) {
         $q->andWhere('dnc.reason = :reason')->setParameter('reason', $reason);
     }
     if ($listId) {
         $q->leftJoin('dnc', MAUTIC_TABLE_PREFIX . 'lead_lists_leads', 'cs', 'cs.lead_id = dnc.lead_id');
         if (true === $listId) {
             $q->addSelect('cs.leadlist_id')->groupBy('cs.leadlist_id');
         } else {
             $q->andWhere('cs.leadlist_id = :list_id')->setParameter('list_id', $listId);
         }
     }
     if ($chartQuery) {
         $chartQuery->applyDateFilters($q, 'date_added', 'dnc');
     }
     $results = $q->execute()->fetchAll();
     if (true === $listId) {
         // Return list group of counts
         $byList = [];
         foreach ($results as $result) {
             $byList[$result['leadlist_id']] = $result['dnc_count'];
         }
         return $byList;
     }
     return isset($results[0]) ? $results[0]['dnc_count'] : 0;
 }
コード例 #3
0
ファイル: SubmissionModel.php プロジェクト: HomeRefill/mautic
 /**
  * Get a list of the most submisions per lead
  *
  * @param integer $limit
  * @param string  $dateFrom
  * @param string  $dateTo
  * @param array   $filters
  * @param boolean $canViewOthers
  *
  * @return array
  */
 public function getTopSubmitters($limit = 10, $dateFrom = null, $dateTo = null, $filters = array(), $canViewOthers = true)
 {
     $q = $this->em->getConnection()->createQueryBuilder();
     $q->select('COUNT(DISTINCT t.id) AS submissions, t.lead_id, l.firstname, l.lastname, l.email')->from(MAUTIC_TABLE_PREFIX . 'form_submissions', 't')->join('t', MAUTIC_TABLE_PREFIX . 'leads', 'l', 'l.id = t.lead_id')->orderBy('submissions', 'DESC')->groupBy('t.lead_id, l.firstname, l.lastname, l.email')->setMaxResults($limit);
     if (!$canViewOthers) {
         $q->join('t', MAUTIC_TABLE_PREFIX . 'forms', 'f', 'f.id = t.form_id')->andWhere('f.created_by = :userId')->setParameter('userId', $this->factory->getUser()->getId());
     }
     $chartQuery = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $chartQuery->applyFilters($q, $filters);
     $chartQuery->applyDateFilters($q, 'date_submitted');
     $results = $q->execute()->fetchAll();
     return $results;
 }
コード例 #4
0
ファイル: TrackableRepository.php プロジェクト: Yame-/mautic
 /**
  * Get hit count
  *
  * @param                 $channel
  * @param                 $channelIds
  * @param                 $listId
  * @param ChartQuery|null $chartQuery
  *
  * @return array|int
  */
 public function getCount($channel, $channelIds, $listId, ChartQuery $chartQuery = null)
 {
     $q = $this->_em->getConnection()->createQueryBuilder()->select('count(DISTINCT(cut.redirect_id)) as click_count')->from(MAUTIC_TABLE_PREFIX . 'channel_url_trackables', 'cut')->leftJoin('cut', MAUTIC_TABLE_PREFIX . 'page_hits', 'ph', 'ph.redirect_id = cut.redirect_id');
     $q->where('cut.channel = :channel')->setParameter('channel', $channel);
     if ($channelIds) {
         if (!is_array($channelIds)) {
             $channelIds = array((int) $channelIds);
         }
         $q->where($q->expr()->in('cut.channel_id', $channelIds));
     }
     if ($listId) {
         $q->leftJoin('ph', MAUTIC_TABLE_PREFIX . 'lead_lists_leads', 'cs', 'cs.lead_id = ph.lead_id');
         if (true === $listId) {
             $q->addSelect('cs.leadlist_id')->groupBy('cs.leadlist_id');
         } else {
             $q->andWhere('cs.leadlist_id = :list_id')->setParameter('list_id', $listId);
         }
     }
     if ($chartQuery) {
         $chartQuery->applyDateFilters($q, 'date_hit', 'ph');
     }
     $results = $q->execute()->fetchAll();
     if (true === $listId) {
         // Return array of results
         $byList = [];
         foreach ($results as $result) {
             $byList[$result['leadlist_id']] = $result['click_count'];
         }
         return $byList;
     }
     return isset($results[0]) ? $results[0]['click_count'] : 0;
 }
コード例 #5
0
ファイル: EmailModel.php プロジェクト: Yame-/mautic
 /**
  * Get a list of emails in a date range
  *
  * @param integer   $limit
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param array     $filters
  * @param array     $options
  *
  * @return array
  */
 public function getEmailList($limit = 10, \DateTime $dateFrom = null, \DateTime $dateTo = null, $filters = [], $options = [])
 {
     $q = $this->em->getConnection()->createQueryBuilder();
     $q->select('t.id, t.name, t.date_added, t.date_modified')->from(MAUTIC_TABLE_PREFIX . 'emails', 't')->setMaxResults($limit);
     if (!empty($options['canViewOthers'])) {
         $q->andWhere('t.created_by = :userId')->setParameter('userId', $this->user->getId());
     }
     $chartQuery = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $chartQuery->applyFilters($q, $filters);
     $chartQuery->applyDateFilters($q, 'date_added');
     $results = $q->execute()->fetchAll();
     return $results;
 }
コード例 #6
0
ファイル: LeadModel.php プロジェクト: HomeRefill/mautic
 /**
  * Get a list of leads in a date range
  *
  * @param integer  $limit
  * @param DateTime $dateFrom
  * @param DateTime $dateTo
  * @param array    $filters
  * @param array    $options
  *
  * @return array
  */
 public function getLeadList($limit = 10, \DateTime $dateFrom = null, \DateTime $dateTo = null, $filters = array(), $options = array())
 {
     if (!empty($options['canViewOthers'])) {
         $filter['owner_id'] = $this->factory->getUser()->getId();
     }
     $q = $this->em->getConnection()->createQueryBuilder();
     $q->select('t.id, t.firstname, t.lastname, t.email, t.date_added, t.date_modified')->from(MAUTIC_TABLE_PREFIX . 'leads', 't')->setMaxResults($limit);
     $chartQuery = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $chartQuery->applyFilters($q, $filters);
     $chartQuery->applyDateFilters($q, 'date_added');
     $results = $q->execute()->fetchAll();
     if ($results) {
         foreach ($results as &$result) {
             if ($result['firstname'] || $result['lastname']) {
                 $result['name'] = trim($result['firstname'] . ' ' . $result['lastname']);
             } elseif ($result['email']) {
                 $result['name'] = $result['email'];
             } else {
                 $result['name'] = 'anonymous';
             }
             unset($result['firstname']);
             unset($result['lastname']);
             unset($result['email']);
         }
     }
     return $results;
 }
コード例 #7
0
ファイル: StageModel.php プロジェクト: dongilbert/mautic
 /**
  * Get line chart data of stages.
  *
  * @param char     $unit          {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters}
  * @param DateTime $dateFrom
  * @param DateTime $dateTo
  * @param string   $dateFormat
  * @param array    $filter
  * @param bool     $canViewOthers
  *
  * @return array
  */
 public function getStageLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = [], $canViewOthers = true)
 {
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $q = $query->prepareTimeDataQuery('lead_stages_change_log', 'date_added', $filter);
     if (!$canViewOthers) {
         $q->join('t', MAUTIC_TABLE_PREFIX . 'leads', 'l', 'l.id = t.lead_id')->andWhere('l.owner_id = :userId')->setParameter('userId', $this->factory->getUser()->getId());
     }
     $data = $query->loadAndBuildTimeData($q);
     $chart->setDataset($this->factory->getTranslator()->trans('mautic.stage.changes'), $data);
     return $chart->render();
 }
コード例 #8
0
ファイル: PageModel.php プロジェクト: HomeRefill/mautic
 /**
  * Get a list of pages created in a date range
  *
  * @param integer  $limit
  * @param DateTime $dateFrom
  * @param DateTime $dateTo
  * @param array    $filters
  * @param boolean  $canViewOthers
  *
  * @return array
  */
 public function getPageList($limit = 10, \DateTime $dateFrom = null, \DateTime $dateTo = null, $filters = array(), $canViewOthers = true)
 {
     $q = $this->em->getConnection()->createQueryBuilder();
     $q->select('t.id, t.title AS name, t.date_added, t.date_modified')->from(MAUTIC_TABLE_PREFIX . 'pages', 't')->setMaxResults($limit);
     if (!$canViewOthers) {
         $q->andWhere('t.created_by = :userId')->setParameter('userId', $this->factory->getUser()->getId());
     }
     $chartQuery = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $chartQuery->applyFilters($q, $filters);
     $chartQuery->applyDateFilters($q, 'date_added');
     $results = $q->execute()->fetchAll();
     return $results;
 }
コード例 #9
0
ファイル: ListModel.php プロジェクト: Yame-/mautic
 public function getLifeCycleSegmentChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = array(), $canViewOthers = true, $listName)
 {
     $chart = new PieChart();
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     if (!$canViewOthers) {
         $filter['owner_id'] = $this->user->getId();
     }
     if (isset($filter['flag'])) {
         unset($filter['flag']);
     }
     $allLists = $query->getCountQuery('leads', 'id', 'date_added', null);
     $lists = $query->count('leads', 'id', 'date_added', $filter, null);
     $all = $query->fetchCount($allLists);
     $identified = $lists;
     $chart->setDataset($listName, $identified);
     if (isset($filter['leadlist_id']['value'])) {
         $chart->setDataset($this->translator->trans('mautic.lead.lifecycle.graph.pie.all.lists'), $all);
     }
     return $chart->render(false);
 }
コード例 #10
0
ファイル: StatRepository.php プロジェクト: dongilbert/mautic
 /**
  * @param null            $emailIds
  * @param null            $listId
  * @param ChartQuery|null $chartQuery
  *
  * @return array|int
  */
 public function getFailedCount($emailIds = null, $listId = null, ChartQuery $chartQuery = null)
 {
     $q = $this->_em->getConnection()->createQueryBuilder();
     $q->select('count(s.id) as failed_count')->from(MAUTIC_TABLE_PREFIX . 'email_stats', 's');
     if ($emailIds) {
         if (!is_array($emailIds)) {
             $emailIds = [(int) $emailIds];
         }
         $q->where($q->expr()->in('s.email_id', $emailIds));
     }
     if (true === $listId) {
         $q->addSelect('s.list_id')->groupBy('s.list_id');
     } elseif ($listId) {
         $q->andWhere('s.list_id = ' . (int) $listId);
     }
     $q->andWhere('is_failed = :true')->setParameter('true', true, 'boolean');
     if ($chartQuery) {
         $chartQuery->applyDateFilters($q, 'date_sent', 's');
     }
     $results = $q->execute()->fetchAll();
     if (true === $listId) {
         // Return list group of counts
         $byList = [];
         foreach ($results as $result) {
             $byList[$result['list_id']] = $result['failed_count'];
         }
         return $byList;
     }
     return isset($results[0]) ? $results[0]['failed_count'] : 0;
 }
コード例 #11
0
ファイル: EventModel.php プロジェクト: dongilbert/mautic
 /**
  * Get line chart data of campaign events.
  *
  * @param char      $unit          {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters}
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param string    $dateFormat
  * @param array     $filter
  * @param bool      $canViewOthers
  *
  * @return array
  */
 public function getEventLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = [], $canViewOthers = true)
 {
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $q = $query->prepareTimeDataQuery('campaign_lead_event_log', 'date_triggered', $filter);
     if (!$canViewOthers) {
         $q->join('t', MAUTIC_TABLE_PREFIX . 'campaigns', 'c', 'c.id = c.campaign_id')->andWhere('c.created_by = :userId')->setParameter('userId', $this->userHelper->getUser()->getId());
     }
     $data = $query->loadAndBuildTimeData($q);
     $chart->setDataset($this->translator->trans('mautic.campaign.triggered.events'), $data);
     return $chart->render();
 }
コード例 #12
0
 /**
  * Get line chart data of hits.
  *
  * @param char      $unit          {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters}
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param string    $dateFormat
  * @param array     $filter
  * @param bool      $canViewOthers
  *
  * @return array
  */
 public function getHitsLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = [], $canViewOthers = true)
 {
     $flag = null;
     if (isset($filter['flag'])) {
         $flag = $filter['flag'];
         unset($filter['flag']);
     }
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     if (!$flag || $flag === 'total_and_unique') {
         $q = $query->prepareTimeDataQuery('push_notification_stats', 'date_sent', $filter);
         if (!$canViewOthers) {
             $this->limitQueryToCreator($q);
         }
         $data = $query->loadAndBuildTimeData($q);
         $chart->setDataset($this->translator->trans('mautic.notification.show.total.sent'), $data);
     }
     return $chart->render();
 }
コード例 #13
0
ファイル: CampaignModel.php プロジェクト: Yame-/mautic
 /**
  * Get line chart data of hits
  *
  * @param char     $unit   {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters}
  * @param DateTime $dateFrom
  * @param DateTime $dateTo
  * @param string   $dateFormat
  * @param array    $filter
  *
  * @return array
  */
 public function getCampaignMetricsLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = array())
 {
     $events = array();
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $contacts = $query->fetchTimeData('campaign_leads', 'date_added', $filter);
     $chart->setDataset($this->translator->trans('mautic.campaign.campaign.leads'), $contacts);
     if (isset($filter['campaign_id'])) {
         $rawEvents = $this->getEventRepository()->getCampaignEvents($filter['campaign_id']);
         // Group events by type
         if ($rawEvents) {
             foreach ($rawEvents as $event) {
                 if (isset($events[$event['type']])) {
                     $events[$event['type']][] = $event['id'];
                 } else {
                     $events[$event['type']] = array($event['id']);
                 }
             }
         }
         if ($events) {
             foreach ($events as $type => $eventIds) {
                 $filter['event_id'] = $eventIds;
                 $q = $query->prepareTimeDataQuery('campaign_lead_event_log', 'date_triggered', $filter);
                 $rawData = $q->execute()->fetchAll();
                 if (!empty($rawData)) {
                     $triggers = $query->completeTimeData($rawData);
                     $chart->setDataset($this->translator->trans('mautic.campaign.' . $type), $triggers);
                 }
             }
             unset($filter['event_id']);
         }
     }
     return $chart->render();
 }
コード例 #14
0
ファイル: ListModel.php プロジェクト: HomeRefill/mautic
 /**
  * Get a list of top (by leads added) lists
  *
  * @param integer $limit
  * @param string  $dateFrom
  * @param string  $dateTo
  * @param array   $filters
  *
  * @return array
  */
 public function getTopLists($limit = 10, $dateFrom = null, $dateTo = null, $filters = array())
 {
     $q = $this->em->getConnection()->createQueryBuilder();
     $q->select('COUNT(t.date_added) AS leads, ll.id, ll.name')->from(MAUTIC_TABLE_PREFIX . 'lead_lists_leads', 't')->join('t', MAUTIC_TABLE_PREFIX . 'lead_lists', 'll', 'll.id = t.leadlist_id')->orderBy('leads', 'DESC')->where($q->expr()->eq('ll.is_published', ':published'))->setParameter('published', true)->groupBy('ll.id')->setMaxResults($limit);
     if (!empty($options['canViewOthers'])) {
         $q->andWhere('ll.created_by = :userId')->setParameter('userId', $this->factory->getUser()->getId());
     }
     $chartQuery = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     $chartQuery->applyFilters($q, $filters);
     $chartQuery->applyDateFilters($q, 'date_added');
     $results = $q->execute()->fetchAll();
     return $results;
 }
コード例 #15
0
ファイル: DynamicContentModel.php プロジェクト: Yame-/mautic
 /**
  * Get line chart data of hits
  *
  * @param char      $unit   {@link php.net/manual/en/function.date.php#refsect1-function.date-parameters}
  * @param \DateTime $dateFrom
  * @param \DateTime $dateTo
  * @param string    $dateFormat
  * @param array     $filter
  * @param boolean   $canViewOthers
  *
  * @return array
  */
 public function getHitsLineChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = array(), $canViewOthers = true)
 {
     $flag = null;
     if (isset($filter['flag'])) {
         $flag = $filter['flag'];
         unset($filter['flag']);
     }
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo);
     if (!$flag || $flag === 'total_and_unique') {
         $q = $query->prepareTimeDataQuery('dynamic_content_stats', 'date_sent', $filter);
         if (!$canViewOthers) {
             $this->limitQueryToCreator($q);
         }
         $data = $query->loadAndBuildTimeData($q);
         $chart->setDataset($this->translator->trans('mautic.dynamicContent.show.total.views'), $data);
     }
     if ($flag === 'unique' || $flag === 'total_and_unique') {
         $q = $query->prepareTimeDataQuery('dynamic_content_stats', 'date_sent', $filter);
         $q->groupBy('t.lead_id, t.date_sent');
         if (!$canViewOthers) {
             $this->limitQueryToCreator($q);
         }
         $data = $query->loadAndBuildTimeData($q);
         $chart->setDataset($this->translator->trans('mautic.dynamicContent.show.unique.views'), $data);
     }
     return $chart->render();
 }
コード例 #16
0
 /**
  * Add an event to the container.
  *
  * The data should be an associative array with the following data:
  * 'event'     => string    The event name
  * 'timestamp' => \DateTime The timestamp of the event
  * 'extra'     => array     An optional array of extra data for the event
  *
  * @param array $data Data array for the table
  */
 public function addEvent(array $data)
 {
     if ($this->countOnly) {
         // BC support for old format
         if ($this->groupUnit && $this->chartQuery) {
             $countData = [['date' => $data['timestamp'], 'count' => 1]];
             $count = $this->chartQuery->completeTimeData($countData);
             $this->addToCounter($data['event'], $count);
         } else {
             if (!isset($this->totalEvents[$data['event']])) {
                 $this->totalEvents[$data['event']] = 0;
             }
             ++$this->totalEvents[$data['event']];
         }
     } else {
         if (!isset($this->events[$data['event']])) {
             $this->events[$data['event']] = [];
         }
         $this->events[$data['event']][] = $data;
     }
 }
コード例 #17
0
ファイル: FocusModel.php プロジェクト: dongilbert/mautic
 /**
  * @param Focus          $focus
  * @param                $unit
  * @param \DateTime|null $dateFrom
  * @param \DateTime|null $dateTo
  * @param null           $dateFormat
  * @param bool           $canViewOthers
  *
  * @return array
  */
 public function getStats(Focus $focus, $unit, \DateTime $dateFrom = null, \DateTime $dateTo = null, $dateFormat = null, $canViewOthers = true)
 {
     $chart = new LineChart($unit, $dateFrom, $dateTo, $dateFormat);
     $query = new ChartQuery($this->em->getConnection(), $dateFrom, $dateTo, $unit);
     $q = $query->prepareTimeDataQuery('focus_stats', 'date_added');
     if (!$canViewOthers) {
         $this->limitQueryToCreator($q);
     }
     $data = $query->loadAndBuildTimeData($q);
     $chart->setDataset($this->translator->trans('mautic.focus.graph.views'), $data);
     if ($focus->getType() != 'notification') {
         if ($focus->getType() == 'link') {
             $q = $query->prepareTimeDataQuery('focus_stats', 'date_added', ['type' => Stat::TYPE_CLICK]);
             if (!$canViewOthers) {
                 $this->limitQueryToCreator($q);
             }
             $data = $query->loadAndBuildTimeData($q);
             $chart->setDataset($this->translator->trans('mautic.focus.graph.clicks'), $data);
         } else {
             $q = $query->prepareTimeDataQuery('focus_stats', 'date_added', ['type' => Stat::TYPE_FORM]);
             if (!$canViewOthers) {
                 $this->limitQueryToCreator($q);
             }
             $data = $query->loadAndBuildTimeData($q);
             $chart->setDataset($this->translator->trans('mautic.focus.graph.submissions'), $data);
         }
     }
     return $chart->render();
 }