From 98456ab8e5752e452f3e7d95ed5bfc68897a42eb Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 19 Feb 2022 23:35:41 +0100 Subject: [PATCH] add node view listener --- config/services.yaml | 4 ++ core/EventListener/NodeViewListener.php | 68 +++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 core/EventListener/NodeViewListener.php diff --git a/config/services.yaml b/config/services.yaml index 88fe2f6..b81dbd3 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -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: diff --git a/core/EventListener/NodeViewListener.php b/core/EventListener/NodeViewListener.php new file mode 100644 index 0000000..52b3880 --- /dev/null +++ b/core/EventListener/NodeViewListener.php @@ -0,0 +1,68 @@ + + */ +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); + } + } +}