<?php
namespace LiteDesk\KnowledgeBundle\EventListener;
use LiteDesk\KnowledgeBundle\Controller\PresetsController;
use LiteDesk\KnowledgeBundle\Library\Controller\KnowledgeBaseInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class PresetListener
{
/**
* @var ContainerInterface
*/
protected $container;
/**
* PresetListener constructor.
* @param ContainerInterface $container
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
/**
* @param FilterControllerEvent $event
*/
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
$whiteList = [
'litedesk_knowledge_knowledge_help',
];
$currentRoute = $event->getRequest()->get('_route');
/*
* $controller passed can be either a class or a Closure.
* This is not usual in Symfony but it may happen.
* If it is a class, it comes in array format
*/
if (!is_array($controller)) {
return;
}
if (
$controller[0] instanceof KnowledgeBaseInterface &&
!($controller[0] instanceof PresetsController) &&
!in_array($currentRoute, $whiteList)
) {
$presets = $this->container->get('knowledge.preset')->getAll();
if (empty($presets)) {
header("Location: " .
$this->container->get('router')->generate('litedesk_knowledge_presets_create', [], UrlGeneratorInterface::ABSOLUTE_URL) . '?nopreset=true');
}
}
}
}