/** * Get a stats for email by list * * @param Email|int $email * @param bool $includeVariants * * @return array */ public function getEmailDeviceStats($email, $includeVariants = false, $dateFrom = null, $dateTo = null) { if (!$email instanceof Email) { $email = $this->getEntity($email); } $emailIds = $includeVariants ? $email->getRelatedEntityIds() : [$email->getId()]; $templateEmail = 'template' === $email->getEmailType(); $results = $this->getStatDeviceRepository()->getDeviceStats($emailIds, $dateFrom, $dateTo); // Organize by list_id (if a segment email) and/or device $stats = []; $devices = []; foreach ($results as $result) { if (empty($result['device'])) { $result['device'] = $this->translator->trans('mautic.core.unknown'); } else { $result['device'] = mb_substr($result['device'], 0, 12); } $devices[$result['device']] = $result['device']; if ($templateEmail) { // List doesn't matter $stats[$result['device']] = $result['count']; } elseif (null !== $result['list_id']) { if (!isset($stats[$result['list_id']])) { $stats[$result['list_id']] = []; } if (!isset($stats[$result['list_id']][$result['device']])) { $stats[$result['list_id']][$result['device']] = (int) $result['count']; } else { $stats[$result['list_id']][$result['device']] += (int) $result['count']; } } } $listCount = 0; if (!$templateEmail) { $lists = $email->getLists(); $listNames = []; foreach ($lists as $l) { $listNames[$l->getId()] = $l->getName(); } $listCount = count($listNames); } natcasesort($devices); $chart = new BarChart(array_values($devices)); if ($templateEmail) { // Populate the data $chart->setDataset(null, array_values($stats), 0); } else { $combined = []; $key = $listCount > 1 ? 1 : 0; foreach ($listNames as $id => $name) { // Fill in missing devices $listStats = []; foreach ($devices as $device) { $listStat = !isset($stats[$id][$device]) ? 0 : $stats[$id][$device]; $listStats[] = $listStat; if (!isset($combined[$device])) { $combined[$device] = 0; } $combined[$device] += $listStat; } // Populate the data $chart->setDataset($name, $listStats, $key); $key++; } if ($listCount > 1) { $chart->setDataset($this->translator->trans('mautic.email.lists.combined'), array_values($combined), 0); } } return $chart->render(); }
/** * Get bar 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 getHitsBarChartData($unit, \DateTime $dateFrom, \DateTime $dateTo, $dateFormat = null, $filter = array()) { $chart = new BarChart($unit, $dateFrom, $dateTo, $dateFormat); $query = $chart->getChartQuery($this->factory->getEntityManager()->getConnection()); $chartData = $query->fetchTimeData('page_hits', 'date_hit', $filter); $chart->setDataset($this->factory->getTranslator()->trans('mautic.page.field.hits'), $chartData); return $chart->render(); }