<?php
namespace Layout\ArconeBundle\EventSubscriber;
use Layout\ArconeBundle\Controller\Interfaces\TabulatorSerchAndSortInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class TabulatorRequestSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
KernelEvents::CONTROLLER => [
['onKernelController', 0],
],
];
}
public function onKernelController(ControllerEvent $event)
{
$controller = $event->getController();
// when a controller class defines multiple action methods, the controller
// is returned as [$controllerInstance, 'methodName']
if (is_array($controller)) {
$controller = $controller[0];
}
if ($controller instanceof TabulatorSerchAndSortInterface) {
$formName = $event->getRequest()->query->get('form_name');
$filters = $event->getRequest()->query->get('filters');
$sorters = $event->getRequest()->query->get('sorters');
$formData = [];
if (is_array($filters)) {
foreach ($filters as $filter) {
$formData[$filter['field']] = $filter['value'];
}
}
if (is_array($sorters)) {
$sortBy = [];
$sortMode = [];
foreach ($sorters as $sorter) {
$sortBy[] = $sorter['field'];
$sortMode[] = $sorter['dir'];
}
$formData['sortBy'] = implode(',', $sortBy);
$formData['sortMode'] = implode(',', $sortMode);
}
if(!empty($formData)) {
$event->getRequest()->query->set($formName, $formData);
}
}
}
}