Ojs\AnalyticsBundle\Utils\GraphDataGenerator::generateJournalBarChartData PHP Method

generateJournalBarChartData() public method

Returns an array which can be passed to C3.js for bar chart graph creation
public generateJournalBarChartData ( $dates, Journal $journal = null ) : array
$dates
$journal Ojs\JournalBundle\Entity\Journal
return array
    public function generateJournalBarChartData($dates, Journal $journal = null)
    {
        $today = $dates[0];
        $lastMonthToday = end($dates);
        $journalWhereQuery = 'where statistic.journal_id IS NOT NULL ';
        if ($journal) {
            $journalWhereQuery = 'where statistic.journal_id = ' . $journal->getId() . ' ';
        }
        $sql = "SELECT statistic.date as date, SUM(statistic.view) AS view FROM statistic " . $journalWhereQuery . "AND statistic.date BETWEEN '" . $lastMonthToday . "' AND '" . $today . "' " . "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();
        $journalViews = ['View'];
        foreach ($dates as $date) {
            $persisted = false;
            foreach ($results as $result) {
                if ($result['date'] == $date) {
                    $journalViews[] = (int) $result['view'];
                    $persisted = true;
                }
            }
            if (!$persisted) {
                $journalViews[] = 0;
            }
        }
        return $journalViews;
    }

Usage Example

Example #1
0
 private function createStats()
 {
     $generator = new GraphDataGenerator($this->getDoctrine()->getManager());
     $journals = $this->getDoctrine()->getRepository('OjsJournalBundle:Journal')->findAll();
     $lastMonth = ['x'];
     for ($i = 0; $i < 30; $i++) {
         $lastMonth[] = date($generator->getDateFormat(), strtotime('-' . $i . ' days'));
     }
     $slicedLastMonth = array_slice($lastMonth, 1);
     $articles = $this->getDoctrine()->getRepository('OjsJournalBundle:Article')->findBy(['journal' => $journals]);
     $issues = $this->getDoctrine()->getRepository('OjsJournalBundle:Issue')->findBy(['journal' => $journals]);
     $json = ['dates' => $lastMonth, 'journalViews' => $generator->generateJournalBarChartData($journals, $slicedLastMonth), 'articleViews' => $generator->generateArticleBarChartData($articles, $slicedLastMonth), 'issueFileDownloads' => $generator->generateIssueFilePieChartData($issues, $slicedLastMonth), 'articleFileDownloads' => $generator->generateArticleFilePieChartData($articles, $slicedLastMonth)];
     $data = ['stats' => json_encode($json), 'journals' => $generator->generateJournalViewsData($journals), 'articles' => $generator->generateArticleViewsData($articles), 'issueFiles' => $generator->generateIssueFileDownloadsData($issues), 'articleFiles' => $generator->generateArticleFileDownloadsData($issues), 'journalsMonthly' => $generator->generateJournalViewsData($journals, $slicedLastMonth), 'articlesMonthly' => $generator->generateArticleViewsData($articles, $slicedLastMonth), 'issueFilesMonthly' => $generator->generateIssueFileDownloadsData($issues, $slicedLastMonth), 'articleFilesMonthly' => $generator->generateArticleFileDownloadsData($articles, $slicedLastMonth)];
     return $data;
 }