refactoring of RangeAnalytic
This commit is contained in:
parent
8d5e5a3c8f
commit
d0d5f1ab25
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
namespace App\Core\Analytic;
|
namespace App\Core\Analytic;
|
||||||
|
|
||||||
|
use App\Core\Entity\Site\Node;
|
||||||
use App\Core\Repository\Analytic\RefererRepositoryQuery;
|
use App\Core\Repository\Analytic\RefererRepositoryQuery;
|
||||||
use App\Core\Repository\Analytic\ViewRepositoryQuery;
|
use App\Core\Repository\Analytic\ViewRepositoryQuery;
|
||||||
use App\Core\Entity\Site\Node;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* class RangeAnalytic.
|
* class RangeAnalytic.
|
||||||
|
@ -15,6 +15,11 @@ class RangeAnalytic
|
||||||
{
|
{
|
||||||
protected ViewRepositoryQuery $viewQuery;
|
protected ViewRepositoryQuery $viewQuery;
|
||||||
protected RefererRepositoryQuery $refererQuery;
|
protected RefererRepositoryQuery $refererQuery;
|
||||||
|
protected ?Node $node;
|
||||||
|
protected ?\DateTime $from;
|
||||||
|
protected ?\DateTime $to;
|
||||||
|
protected bool $reload = true;
|
||||||
|
protected array $cache = [];
|
||||||
|
|
||||||
public function __construct(ViewRepositoryQuery $viewQuery, RefererRepositoryQuery $refererQuery)
|
public function __construct(ViewRepositoryQuery $viewQuery, RefererRepositoryQuery $refererQuery)
|
||||||
{
|
{
|
||||||
|
@ -22,27 +27,22 @@ class RangeAnalytic
|
||||||
$this->refererQuery = $refererQuery;
|
$this->refererQuery = $refererQuery;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getViews(\DateTime $from, \DateTime $to, Node $node): array
|
public function getViews(): array
|
||||||
{
|
{
|
||||||
$entities = $this->viewQuery->create()
|
$entities = $this->getEntities('view');
|
||||||
->andWhere('.date >= :from')
|
$this->reload = false;
|
||||||
->andWhere('.date <= :to')
|
|
||||||
->andWhere('.node = :node')
|
|
||||||
->orderBy('.date')
|
|
||||||
->setParameters([
|
|
||||||
':from' => $from,
|
|
||||||
':to' => $to,
|
|
||||||
':node' => $node->getId(),
|
|
||||||
])
|
|
||||||
->find()
|
|
||||||
;
|
|
||||||
|
|
||||||
$diff = $from->diff($to);
|
if ($entities) {
|
||||||
|
$first = $entities[0];
|
||||||
|
$last = $entities[count($entities) - 1];
|
||||||
|
|
||||||
if ($diff->days >= 365) {
|
$diff = $first->getDate()->diff($last->getDate());
|
||||||
$format = 'Y-m';
|
|
||||||
} else {
|
if ($diff->days >= 90) {
|
||||||
$format = 'Y-m-d';
|
$format = 'Y-m';
|
||||||
|
} else {
|
||||||
|
$format = 'Y-m-d';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$datas = [];
|
$datas = [];
|
||||||
|
@ -60,20 +60,10 @@ class RangeAnalytic
|
||||||
return $datas;
|
return $datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPathViews(\DateTime $from, \DateTime $to, Node $node): array
|
public function getPathViews(): array
|
||||||
{
|
{
|
||||||
$entities = $this->viewQuery->create()
|
$entities = $this->getEntities('view');
|
||||||
->andWhere('.date >= :from')
|
$this->reload = false;
|
||||||
->andWhere('.date <= :to')
|
|
||||||
->andWhere('.node = :node')
|
|
||||||
->orderBy('.date')
|
|
||||||
->setParameters([
|
|
||||||
':from' => $from,
|
|
||||||
':to' => $to,
|
|
||||||
':node' => $node->getId(),
|
|
||||||
])
|
|
||||||
->find()
|
|
||||||
;
|
|
||||||
|
|
||||||
$datas = [];
|
$datas = [];
|
||||||
|
|
||||||
|
@ -90,20 +80,10 @@ class RangeAnalytic
|
||||||
return $datas;
|
return $datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getReferers(\DateTime $from, \DateTime $to, Node $node): array
|
public function getReferers(): array
|
||||||
{
|
{
|
||||||
$entities = $this->refererQuery->create()
|
$entities = $this->getEntities('referer');
|
||||||
->andWhere('.date >= :from')
|
$this->reload = false;
|
||||||
->andWhere('.date <= :to')
|
|
||||||
->andWhere('.node = :node')
|
|
||||||
->orderBy('.date')
|
|
||||||
->setParameters([
|
|
||||||
':from' => $from,
|
|
||||||
':to' => $to,
|
|
||||||
':node' => $node->getId(),
|
|
||||||
])
|
|
||||||
->find()
|
|
||||||
;
|
|
||||||
|
|
||||||
$datas = [];
|
$datas = [];
|
||||||
|
|
||||||
|
@ -130,4 +110,61 @@ class RangeAnalytic
|
||||||
|
|
||||||
return $datas;
|
return $datas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setDateRange(?\DateTime $from, ?\DateTime $to): self
|
||||||
|
{
|
||||||
|
$this->from = $from;
|
||||||
|
$this->to = $to;
|
||||||
|
$this->reload = true;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNode(?Node $node): self
|
||||||
|
{
|
||||||
|
$this->node = $node;
|
||||||
|
$this->reload = true;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getEntities(string $type): array
|
||||||
|
{
|
||||||
|
if ('view' === $type) {
|
||||||
|
$query = $this->viewQuery->create();
|
||||||
|
} elseif ('referer' === $type) {
|
||||||
|
$query = $this->refererQuery->create();
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException('Invalid type');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->reload && isset($this->cache[$type])) {
|
||||||
|
return $this->cache[$type];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $this->from) {
|
||||||
|
$query
|
||||||
|
->andWhere('.date >= :from')
|
||||||
|
->setParameter(':from', $this->from)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $this->to) {
|
||||||
|
$query
|
||||||
|
->andWhere('.date <= :to')
|
||||||
|
->setParameter(':to', $this->to)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null !== $this->node) {
|
||||||
|
$query
|
||||||
|
->andWhere('.node = :node')
|
||||||
|
->setParameter(':node', $this->node->getId())
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cache[$type] = $query->orderBy('.date')->find();
|
||||||
|
|
||||||
|
return $this->cache[$type];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
namespace App\Core\Controller\Analytic;
|
namespace App\Core\Controller\Analytic;
|
||||||
|
|
||||||
|
use App\Core\Analytic\RangeAnalytic;
|
||||||
|
use App\Core\Entity\Site\Node;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\Routing\Annotation\Route;
|
use Symfony\Component\Routing\Annotation\Route;
|
||||||
use App\Core\Entity\Site\Node;
|
|
||||||
use App\Core\Analytic\RangeAnalytic;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route("/admin/analytic")
|
* @Route("/admin/analytic")
|
||||||
|
@ -22,15 +22,16 @@ class AnalyticController extends AbstractController
|
||||||
throw $this->createNotFoundException();
|
throw $this->createNotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$views = $rangeAnalytic->getViews(new \DateTime('now - '.$range), new \DateTime(), $node);
|
$rangeAnalytic
|
||||||
$pathViews = $rangeAnalytic->getPathViews(new \DateTime('now - '.$range), new \DateTime(), $node);
|
->setDateRange(new \DateTime('now - '.$range), new \DateTime())
|
||||||
$referers = $rangeAnalytic->getReferers(new \DateTime('now - '.$range), new \DateTime(), $node);
|
->setNode($node)
|
||||||
|
;
|
||||||
|
|
||||||
return $this->render('@Core/analytic/stats.html.twig', [
|
return $this->render('@Core/analytic/stats.html.twig', [
|
||||||
'range' => $range,
|
'range' => $range,
|
||||||
'views' => $views,
|
'views' => $rangeAnalytic->getViews(),
|
||||||
'pathViews' => $pathViews,
|
'pathViews' => $rangeAnalytic->getPathViews(),
|
||||||
'referers' => $referers,
|
'referers' => $rangeAnalytic->getReferers(),
|
||||||
'node' => $node,
|
'node' => $node,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue