add node view listener
This commit is contained in:
parent
1cb57a138f
commit
98456ab8e5
|
@ -23,6 +23,10 @@ services:
|
||||||
tags:
|
tags:
|
||||||
- { name: kernel.event_listener, event: kernel.exception }
|
- { name: kernel.event_listener, event: kernel.exception }
|
||||||
|
|
||||||
|
App\Core\EventListener\NodeViewListener:
|
||||||
|
tags:
|
||||||
|
- { name: kernel.event_listener, event: kernel.request }
|
||||||
|
|
||||||
App\:
|
App\:
|
||||||
resource: '../src/'
|
resource: '../src/'
|
||||||
exclude:
|
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