public function generateArticleBarChartData($dates, Journal $journal = null) { $journalWhereQuery = ' '; if ($journal) { $journalWhereQuery = 'AND article.journal_id = ' . $journal->getId() . ' '; } $today = $dates[0]; $lastMonthToday = end($dates); $sql = "SELECT statistic.date as date, SUM(statistic.view) AS view FROM statistic " . "JOIN article on statistic.article_id = article.id " . "where statistic.article_id IS NOT NULL " . "AND statistic.date BETWEEN '" . $lastMonthToday . "' AND '" . $today . "' " . $journalWhereQuery . "GROUP BY statistic.date " . "ORDER BY statistic.date "; $rsm = new ResultSetMapping(); $rsm->addScalarResult('date', 'date'); $rsm->addScalarResult('view', 'view'); $query = $this->manager->createNativeQuery($sql, $rsm); $results = $query->getResult(); $articleViews = ['View']; foreach ($dates as $date) { $persisted = false; foreach ($results as $result) { if ($result['date'] == $date) { $articleViews[] = (int) $result['view']; $persisted = true; } } if (!$persisted) { $articleViews[] = 0; } } return $articleViews; }
/** * Arranges statistics * @return array */ private function createStats() { $generator = new GraphDataGenerator($this->getDoctrine()->getManager()); $journal = $this->get('ojs.journal_service')->getSelectedJournal(); $lastMonth = ['x']; for ($i = 0; $i < 30; $i++) { $lastMonth[] = date($this::DATE_FORMAT, strtotime('-' . $i . ' days')); } $slicedLastMonth = array_slice($lastMonth, 1); $articles = $this->getDoctrine()->getRepository('OjsJournalBundle:Article')->findAll(); $issues = $this->getDoctrine()->getRepository('OjsJournalBundle:Issue')->findAll(); $json = ['dates' => $lastMonth, 'articleViews' => $generator->generateArticleBarChartData($articles, $slicedLastMonth), 'issueFileDownloads' => $generator->generateIssueFilePieChartData($issues, $slicedLastMonth), 'articleFileDownloads' => $generator->generateArticleFilePieChartData($articles, $slicedLastMonth)]; $data = ['stats' => json_encode($json), 'articles' => $generator->generateArticleViewsData($articles), 'issueFiles' => $generator->generateIssueFileDownloadsData($issues), 'articleFiles' => $generator->generateArticleFileDownloadsData($articles), 'articlesMonthly' => $generator->generateArticleViewsData($articles, $slicedLastMonth), 'issueFilesMonthly' => $generator->generateIssueFileDownloadsData($issues, $slicedLastMonth), 'articleFilesMonthly' => $generator->generateArticleFileDownloadsData($articles, $slicedLastMonth)]; return $data; }