AjaxResponseSubscriber.php in Core Views Facets 8
File
src/EventSubscriber/AjaxResponseSubscriber.php
View source
<?php
namespace Drupal\core_views_facets\EventSubscriber;
use Drupal\Core\Ajax\ReplaceCommand;
use Drupal\views\Ajax\ViewAjaxResponse;
use Drupal\Core\Plugin\PluginBase;
use Drupal\facets\FacetManager\DefaultFacetManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RequestStack;
class AjaxResponseSubscriber implements EventSubscriberInterface {
protected $facetManager;
protected $request;
public function __construct(DefaultFacetManager $facet_manager, RequestStack $request_stack) {
$this->facetManager = $facet_manager;
$this->request = $request_stack
->getCurrentRequest();
}
public function onResponse(FilterResponseEvent $event) {
$response = $event
->getResponse();
if (!$response instanceof ViewAjaxResponse) {
return;
}
$view = $response
->getView();
$view_parameters = $view
->getRequest()->query
->all();
$views_arguments =& drupal_static('core_views_contextual_filter_ajax_arguments');
$views_arguments = $view->args;
$exposed_filter_rendered_status =& drupal_static('core_views_exposed_filter_ajax_rendered_status', TRUE);
$exposed_filter_rendered_status = TRUE;
$contextual_filter_rendered_status =& drupal_static('core_views_contextual_filter_ajax_rendered_status', TRUE);
$contextual_filter_rendered_status = TRUE;
$exposed_facets = $this->facetManager
->getFacetsByFacetSourceId('core_views_exposed_filter' . PluginBase::DERIVATIVE_SEPARATOR . $view
->id() . '__' . $view->current_display);
if (empty($exposed_facets)) {
$exposed_filter_rendered_status = FALSE;
}
$contextual_facets = $this->facetManager
->getFacetsByFacetSourceId('core_views_contextual_filter' . PluginBase::DERIVATIVE_SEPARATOR . $view
->id() . '__' . $view->current_display);
if (empty($contextual_facets)) {
$contextual_filter_rendered_status = FALSE;
}
$facets = array_merge($exposed_facets, $contextual_facets);
foreach ($facets as $facet) {
$this->request->query
->add($view_parameters);
$build = $this->facetManager
->build($facet);
if (empty($build)) {
$build = [
'#markup' => '<span data-drupal-facet-id="' . $facet
->id() . '" />',
];
}
$response
->addCommand(new ReplaceCommand('[data-drupal-facet-id="' . $facet
->id() . '"]', $build));
}
}
public static function getSubscribedEvents() {
return [
KernelEvents::RESPONSE => [
[
'onResponse',
1,
],
],
];
}
}