add node view listener
This commit is contained in:
parent
1cb57a138f
commit
98456ab8e5
|
@ -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:
|
||||
|
|
68
core/EventListener/NodeViewListener.php
Normal file
68
core/EventListener/NodeViewListener.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue