You are here

class AjaxResponseSubscriber in Geolocation Field 8.2

Same name and namespace in other branches
  1. 8.3 src/EventSubscriber/AjaxResponseSubscriber.php \Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber
  2. 8 src/EventSubscriber/AjaxResponseSubscriber.php \Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber

Response subscriber to handle AJAX responses.

Hierarchy

  • class \Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface

Expanded class hierarchy of AjaxResponseSubscriber

1 string reference to 'AjaxResponseSubscriber'
geolocation.services.yml in ./geolocation.services.yml
geolocation.services.yml
1 service uses AjaxResponseSubscriber
geolocation.ajax_subscriber in ./geolocation.services.yml
Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber

File

src/EventSubscriber/AjaxResponseSubscriber.php, line 14

Namespace

Drupal\geolocation\EventSubscriber
View source
class AjaxResponseSubscriber implements EventSubscriberInterface {

  /**
   * Renders the ajax commands right before preparing the result.
   *
   * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
   *   The response event, which contains the possible AjaxResponse object.
   */
  public function onResponse(FilterResponseEvent $event) {
    $response = $event
      ->getResponse();

    // Only alter views ajax responses.
    if (!$response instanceof ViewAjaxResponse) {
      return;
    }
    $view = $response
      ->getView();
    if (!is_a($view
      ->getStyle(), CommonMapBase::class)) {

      // This view is not of maps_common style, but maybe an attachment is.
      $common_map_attachment = FALSE;
      $attached_display_ids = $view->display_handler
        ->getAttachedDisplays();
      foreach ($attached_display_ids as $display_id) {
        $current_display = $view->displayHandlers
          ->get($display_id);
        if (!empty($current_display)) {
          $current_style = $current_display
            ->getPlugin('style');
          if (!empty($current_style) && is_a($current_style, CommonMapBase::class)) {
            $common_map_attachment = TRUE;
          }
        }
      }
      if (!$common_map_attachment) {
        return;
      }
    }
    $commands =& $response
      ->getCommands();
    foreach ($commands as $delta => &$command) {

      // Stop the view from scrolling to the top of the page.
      if ($command['command'] === 'viewsScrollTop' && $event
        ->getRequest()->query
        ->get('page', FALSE) === FALSE) {
        unset($commands[$delta]);
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    return [
      KernelEvents::RESPONSE => [
        [
          'onResponse',
        ],
      ],
    ];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AjaxResponseSubscriber::getSubscribedEvents public static function Returns an array of event names this subscriber wants to listen to.
AjaxResponseSubscriber::onResponse public function Renders the ajax commands right before preparing the result.