public function indexAction(Request $request)
 {
     $dateRange = new StatsDateRange();
     $dateRange->setFromRequest($request);
     $repositoryBuilder = new VisitorSessionRanTreeVersionRepositoryBuilder();
     $repositoryBuilder->setDateRange($dateRange);
     $doctrine = $this->getDoctrine()->getManager();
     $treeRepo = $doctrine->getRepository('QuestionKeyBundle:VisitorSessionRanTreeVersion');
     $sessions = $treeRepo->findByBuilder($repositoryBuilder);
     return $this->render('QuestionKeyBundle:AdminVisitorSessionRanTreeVersionList:index.html.twig', array('dateRange' => $dateRange, 'sessionRanTreeVersions' => $sessions));
 }
 public function build()
 {
     $data = array();
     $currentFrom = clone $this->dateRange->getFrom();
     $interval = new \DateInterval($this->interval);
     $interval1Sec = new \DateInterval("PT1S");
     while ($currentFrom < $this->dateRange->getTo()) {
         $currentTo = clone $currentFrom;
         $currentTo->add($interval);
         $currentTo->sub($interval1Sec);
         $data[] = new StatsDateRange(clone $currentFrom, $currentTo);
         $currentFrom->add($interval);
     }
     return $data;
 }
 public function statsSeriesAction($treeId, Request $request)
 {
     $doctrine = $this->getDoctrine()->getManager();
     $tsrtvRepo = $doctrine->getRepository('QuestionKeyBundle:VisitorSessionRanTreeVersion');
     // build
     $this->build($treeId);
     //data
     $statsDateRange = new StatsDateRange();
     $statsDateRange->setFromRequest($request);
     $statsDateRangeListBuilder = new StatsDateRangeListBuilder($statsDateRange, $request->get('interval'));
     $statsDateRangeList = $statsDateRangeListBuilder->build();
     $data = array();
     foreach ($statsDateRangeList as $statsDateRangeSegment) {
         $data[] = array('range' => $statsDateRangeSegment, 'value' => $tsrtvRepo->getStatsCountTimesRanForTree($this->tree, $statsDateRangeSegment));
     }
     return $this->render('QuestionKeyBundle:AdminTree:statsSeries.html.twig', array('tree' => $this->tree, 'dateRange' => $statsDateRange, 'data' => $data));
 }
 public function getStatsCountTimesRanIncludedNode(Node $node, StatsDateRange $statsDateRange)
 {
     $data = $this->getEntityManager()->createQuery('SELECT vsrtv.id AS x FROM QuestionKeyBundle:VisitorSessionRanTreeVersion vsrtv' . ' JOIN  vsrtv.onNodes vson' . ' WHERE vson.node = :node  AND vsrtv.createdAt > :from AND vsrtv.createdAt < :to  ' . ' GROUP BY vsrtv.id  ')->setParameter('node', $node)->setParameter('from', $statsDateRange->getFrom())->setParameter('to', $statsDateRange->getTo())->getResult();
     return count($data);
 }
 public function statsAction($treeId, $versionId, $nodeId, Request $request)
 {
     // build
     $return = $this->build($treeId, $versionId, $nodeId);
     //data
     $statsDateRange = new StatsDateRange();
     $statsDateRange->setFromRequest($request);
     $doctrine = $this->getDoctrine()->getManager();
     $tsrtvRepo = $doctrine->getRepository('QuestionKeyBundle:VisitorSessionRanTreeVersion');
     //view
     return $this->render('QuestionKeyBundle:AdminTreeVersionNode:stats.html.twig', array('tree' => $this->tree, 'treeVersion' => $this->treeVersion, 'node' => $this->node, 'dateRange' => $statsDateRange, 'countTimesRanIncludedNode' => $tsrtvRepo->getStatsCountTimesRanIncludedNode($this->node, $statsDateRange), 'countTimesRanForTree' => $tsrtvRepo->getStatsCountTimesRanForTree($this->tree, $statsDateRange), 'countTimesRanForTreeVersion' => $tsrtvRepo->getStatsCountTimesRanForTreeVersion($this->treeVersion, $statsDateRange)));
 }