diff --git a/core/Analytic/RangeAnalytic.php b/core/Analytic/DateRangeAnalytic.php similarity index 91% rename from core/Analytic/RangeAnalytic.php rename to core/Analytic/DateRangeAnalytic.php index c4a0f92..ce4a60f 100644 --- a/core/Analytic/RangeAnalytic.php +++ b/core/Analytic/DateRangeAnalytic.php @@ -7,11 +7,11 @@ use App\Core\Repository\Analytic\RefererRepositoryQuery; use App\Core\Repository\Analytic\ViewRepositoryQuery; /** - * class RangeAnalytic. + * class DateRangeAnalytic. * * @author Simon Vieille */ -class RangeAnalytic +class DateRangeAnalytic { protected ViewRepositoryQuery $viewQuery; protected RefererRepositoryQuery $refererQuery; @@ -57,6 +57,8 @@ class RangeAnalytic $datas[$index] += $entity->getViews(); } + arsort($datas, SORT_NUMERIC); + return $datas; } @@ -77,6 +79,8 @@ class RangeAnalytic $datas[$index] += $entity->getViews(); } + arsort($datas, SORT_NUMERIC); + return $datas; } @@ -108,6 +112,18 @@ class RangeAnalytic $datas[$index]['uris'][$path] += $entity->getViews(); } + uasort($datas, function($a, $b) { + if ($a['views'] > $b['views']) { + return -1; + } + + if ($a['views'] < $b['views']) { + return 1; + } + + return 0; + }); + return $datas; } diff --git a/core/Controller/Analytic/AnalyticController.php b/core/Controller/Analytic/AnalyticController.php index 8a0156b..6d2fd88 100644 --- a/core/Controller/Analytic/AnalyticController.php +++ b/core/Controller/Analytic/AnalyticController.php @@ -2,7 +2,7 @@ namespace App\Core\Controller\Analytic; -use App\Core\Analytic\RangeAnalytic; +use App\Core\Analytic\DateRangeAnalytic; use App\Core\Entity\Site\Node; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; @@ -16,22 +16,22 @@ class AnalyticController extends AbstractController /** * @Route("/stats/{node}/{range}", name="admin_analytic_stats") */ - public function stats(Node $node, RangeAnalytic $rangeAnalytic, string $range = '7days'): Response + public function stats(Node $node, DateRangeAnalytic $analytic, string $range = '7days'): Response { if (!in_array($range, ['7days', '30days', '90days', '1year'])) { throw $this->createNotFoundException(); } - $rangeAnalytic + $analytic ->setDateRange(new \DateTime('now - '.$range), new \DateTime()) ->setNode($node) ; return $this->render('@Core/analytic/stats.html.twig', [ 'range' => $range, - 'views' => $rangeAnalytic->getViews(), - 'pathViews' => $rangeAnalytic->getPathViews(), - 'referers' => $rangeAnalytic->getReferers(), + 'views' => $analytic->getViews(), + 'pathViews' => $analytic->getPathViews(), + 'referers' => $analytic->getReferers(), 'node' => $node, ]); } diff --git a/core/EventListener/AnalyticListener.php b/core/EventListener/AnalyticListener.php index 6154378..515e39d 100644 --- a/core/EventListener/AnalyticListener.php +++ b/core/EventListener/AnalyticListener.php @@ -99,6 +99,16 @@ class AnalyticListener return; } + $referer = $this->request->headers->get('referer'); + + if (!filter_var($referer, FILTER_VALIDATE_URL) || parse_url($url, PHP_URL_SCHEME)) { + return; + } + + if (!in_array(parse_url($url, PHP_URL_SCHEME), ['http', 'https'])) { + return; + } + $entity = $this->refererRepositoryQuery->create() ->filterByRequest($this->request) ->andWhere('.date=CURRENT_DATE()') @@ -106,7 +116,7 @@ class AnalyticListener ; if (!$entity) { - $entity = $this->refererFactory->create($this->node, $this->request->headers->get('referer')); + $entity = $this->refererFactory->create($this->node, $referer); } $entity->addView();