add node view listener

This commit is contained in:
Simon Vieille 2022-02-19 23:35:41 +01:00
parent 1cb57a138f
commit 98456ab8e5
2 changed files with 72 additions and 0 deletions

View file

@ -23,6 +23,10 @@ services:
tags:
- { name: kernel.event_listener, event: kernel.exception }
App\Core\EventListener\NodeViewListener:
tags:
- { name: kernel.event_listener, event: kernel.request }
App\:
resource: '../src/'
exclude:

View file

@ -0,0 +1,68 @@
<?php
namespace App\Core\EventListener;
use App\Core\Factory\NodeViewFactory;
use App\Core\Manager\EntityManager;
use App\Core\Repository\NodeViewRepositoryQuery;
use App\Core\Repository\Site\NodeRepositoryQuery;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use App\Core\Repository\Site\NodeRepository;
/**
* class NodeViewListener.
*
* @author Simon Vieille <simon@deblan.fr>
*/
class NodeViewListener
{
protected NodeRepository $nodeRepository;
protected NodeViewRepositoryQuery $nodeViewRepositoryQuery;
protected NodeViewFactory $nodeViewFactory;
protected EntityManager $manager;
public function __construct(
NodeRepository $nodeRepository,
NodeViewRepositoryQuery $nodeViewRepositoryQuery,
NodeViewFactory $nodeViewFactory,
EntityManager $manager
) {
$this->nodeRepository = $nodeRepository;
$this->nodeViewRepositoryQuery = $nodeViewRepositoryQuery;
$this->nodeViewFactory = $nodeViewFactory;
$this->manager = $manager;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
if (!$request->attributes->has('_node')) {
return;
}
$node = $this->nodeRepository->findOneById($request->attributes->get('_node'));
if (!$node || !$node->getEnableViewCounter()) {
return;
}
$nodeView = $this->nodeViewRepositoryQuery->create()
->filterByRequest($request)
->andWhere('.date=CURRENT_DATE()')
->findOne()
;
if (!$nodeView) {
$nodeView = $this->nodeViewFactory->create($node, $request->getPathInfo());
}
$nodeView->addView();
if ($nodeView->getId()) {
$this->manager->update($nodeView);
} else {
$this->manager->create($nodeView);
}
}
}