Last active
June 30, 2016 09:16
-
-
Save AleksKu/d3ad6a9c4c5c2902bed9aeb7abc51908 to your computer and use it in GitHub Desktop.
processStatistics
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @param Request $request | |
* @param string $groupBy | |
* @param $groupByList | |
* @param Form $filterForm | |
* @return Response | |
*/ | |
private function processStatistics(Request $request, $groupBy, $groupByList, Form $filterForm) | |
{ | |
$filterForm->handleRequest($request); | |
$filterData = $filterForm->getData(); | |
$page = $request->query->getInt('page', 1); | |
$offset = ($page - 1) * $this->statisticRowsPage; | |
$orderBy = $request->query->get('orderBy'); | |
$direction = $request->query->get('direction'); | |
$orderData = compact('orderBy', 'direction'); | |
list($statistics, $totalCount) = $this->getDoctrine()->getRepository(Statistics::class) | |
->createStatisticsQueryBuilder($groupBy, $this->getUser(), $filterData, $orderData, $offset, $this->statisticRowsPage); | |
$pagination = $this->get('knp_paginator')->paginate([]); | |
$pagination->setItemNumberPerPage($this->statisticRowsPage); | |
$pagination->setCurrentPageNumber($page); | |
$pagination->setTotalItemCount($totalCount); | |
$pagination->setItems($statistics); | |
$showIds = $this->isGranted('ROLE_ADMIN'); | |
if ('offerTargetId' == $groupBy) { | |
$offerIds = []; | |
foreach ($pagination as $statisticRow) { | |
$offerIds[] = $statisticRow['offer_id']; | |
} | |
$offerTargets = $this->getDoctrine()->getRepository(OfferTarget::class) | |
->findAllByOfferId($offerIds); | |
$dictionary = []; | |
foreach ($offerTargets as $offerTarget) { | |
$dictionary[$offerTarget->getId()] = $offerTarget->getTitle(); | |
} | |
$statisticsOfferTarget = $this->getDoctrine()->getRepository(Statistics::class)->getGroupedByOfferTargetStatistics($this->getUser(), $filterData); | |
} elseif ('location' == $groupBy) { | |
$dictionary = ['' => '']; | |
foreach ($this->getDoctrine()->getRepository(Country::class)->findAll() as $location) { | |
$dictionary[$location->getCode()] = $location->getName(); | |
} | |
} elseif ('webmaster' == $groupBy || 'advertiser' == $groupBy) { | |
$dictionary = []; | |
foreach ($this->getDoctrine()->getRepository(AbstractUser::class)->findAll() as $entity) { | |
$groupInfo = ($showIds ? $entity->getId() . ": " : '') . $entity->getUsername(); | |
if ($showIds) { | |
$uri = $this->generateUrl('sonata_user_edit', ['id' => $entity->getId()]); | |
} | |
if (isset($uri)) { | |
$groupInfo = [ | |
'title' => $groupInfo, | |
'uri' => $uri, | |
]; | |
} | |
$dictionary[$entity->getId()] = $groupInfo; | |
} | |
} elseif ('site' == $groupBy) { | |
$dictionary = []; | |
foreach ($this->getDoctrine()->getRepository(Site::class)->findAll() as $entity) { | |
$groupInfo = ($showIds ? $entity->getId() . ": " : '') . $entity->getTitle(); | |
$uri = null; | |
if ($entity->getWebmaster() == $this->getUser()) { | |
$uri = $this->generateUrl('site_edit', ['site' => $entity->getId()]); | |
} elseif ($showIds) { | |
$uri = $this->generateUrl('sonata_site_edit', ['id' => $entity->getId()]); | |
} | |
if (isset($uri)) { | |
$groupInfo = [ | |
'title' => $groupInfo, | |
'uri' => $uri, | |
]; | |
} | |
$dictionary[$entity->getId()] = $groupInfo; | |
} | |
} elseif ('stream' == $groupBy) { | |
$dictionary = []; | |
foreach ($this->getDoctrine()->getRepository(Stream::class)->findAll() as $entity) { | |
$groupInfo = ($showIds ? $entity->getId() . ": " : '') . $entity->getTitle(); | |
$uri = null; | |
if ($this->isGranted('edit', $entity)) { | |
$uri = $this->generateUrl('stream_edit', ['stream' => $entity->getId()]); | |
} elseif ($showIds) { | |
$uri = $this->generateUrl('admin_app_stream_edit', ['id' => $entity->getId()]); | |
} | |
if (isset($uri)) { | |
$groupInfo = [ | |
'title' => $groupInfo, | |
'uri' => $uri, | |
]; | |
} | |
$dictionary[$entity->getId()] = $groupInfo; | |
} | |
} elseif ('hour' == $groupBy) { | |
for ($h = 0; $h <= 23; $h++) { | |
$dictionary[$h] = sprintf('%02d:00', $h); | |
} | |
} | |
$this->initializeStatisticsPathGenerator($request, $filterForm); | |
$groupTitle = !empty($filterData['sub']) | |
? $filterData['sub'] | |
: $groupBy; | |
if ('sub' == $groupBy && empty($filterData['sub'])) { | |
$statisticsFirstHeader = [ | |
['rowspan' => 2, 'title' => 'sub1', 'orderBy' => 'sub1'], | |
['rowspan' => 2, 'title' => 'sub2', 'orderBy' => 'sub2'], | |
['rowspan' => 2, 'title' => 'sub3', 'orderBy' => 'sub3'], | |
['rowspan' => 2, 'title' => 'sub4', 'orderBy' => 'sub4'], | |
['rowspan' => 2, 'title' => 'sub5', 'orderBy' => 'sub5'], | |
]; | |
} else { | |
$statisticsFirstHeader = [ | |
['rowspan' => 2, 'title' => "statistics.grouping.field.$groupTitle", 'orderBy' => $groupTitle], | |
]; | |
} | |
$statisticsFirstHeader = array_merge($statisticsFirstHeader, [ | |
['colspan' => 2, 'class' => 'colspaned', 'title' => 'table_header.traffic'], | |
['colspan' => 3, 'class' => 'colspaned', 'title' => 'table_header.pendings'], | |
['colspan' => 3, 'class' => 'colspaned', 'title' => 'table_header.factuals'], | |
['colspan' => 3, 'class' => 'colspaned', 'title' => 'table_header.finances'], | |
]); | |
if ('advertiser' === $groupBy) { | |
$statisticsSecondHeader = [ | |
['title' => 'table_header.unique', 'orderBy' => 'redirectCount'], | |
['title' => 'table_header.trafback', 'orderBy' => 'traffbackCount'], | |
['title' => 'table_header.leads', 'orderBy' => 'targetPendingCount'], | |
['title' => 'table_header.ratio'], | |
['title' => 'Ecpc'], | |
['title' => 'table_header.leads', 'orderBy' => 'targetApprovedCount'], | |
['title' => 'table_header.ratio'], | |
['title' => 'Ecpc'], | |
['title' => 'table_header.costs'], | |
['title' => 'table_header.revenue'], | |
['title' => 'table_header.profit'], | |
]; | |
} else { | |
$statisticsSecondHeader = [ | |
['title' => 'table_header.unique', 'orderBy' => 'redirectCount'], | |
['title' => 'table_header.trafback', 'orderBy' => 'traffbackCount'], | |
['title' => 'table_header.leads', 'orderBy' => 'targetPendingCount'], | |
['title' => 'table_header.ratio'], | |
['title' => 'Ecpc'], | |
['title' => 'table_header.leads', 'orderBy' => 'targetApprovedCount'], | |
['title' => 'table_header.ratio'], | |
['title' => 'Ecpc'], | |
['title' => 'table_header.pending', 'orderBy' => 'sumPending'], | |
['title' => 'table_header.approved', 'orderBy' => 'sumApproved'], | |
['title' => 'table_header.cancelled', 'orderBy' => 'sumRejected'], | |
]; | |
} | |
$statisticsHeader = [ | |
$statisticsFirstHeader, | |
$statisticsSecondHeader, | |
]; | |
return $this->render(':statistics:index.html.twig', [ | |
'stat_group_by_list' => $groupByList, | |
'group_title' => $groupTitle, | |
'groupBy' => $groupBy, | |
'orderBy' => $orderBy, | |
'direction' => $direction, | |
'sub' => !empty($filterData['sub']) ? $filterData['sub'] : '', | |
'currency' => $filterData['currency'], | |
'statistics_header' => $statisticsHeader, | |
'statistics' => $pagination, | |
'statisticsOfferTarget' => isset($statisticsOfferTarget) ? $statisticsOfferTarget : [], | |
'dictionary' => isset($dictionary) ? $dictionary : [], | |
'formFilter' => $filterForm->createView(), | |
]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment