You are here

public function AjaxResponseSubscriber::onResponse in Geolocation Field 8.3

Same name and namespace in other branches
  1. 8 src/EventSubscriber/AjaxResponseSubscriber.php \Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber::onResponse()
  2. 8.2 src/EventSubscriber/AjaxResponseSubscriber.php \Drupal\geolocation\EventSubscriber\AjaxResponseSubscriber::onResponse()

Renders the ajax commands right before preparing the result.

Parameters

\Symfony\Component\HttpKernel\Event\FilterResponseEvent $event: The response event, which contains the possible AjaxResponse object.

File

src/EventSubscriber/AjaxResponseSubscriber.php, line 22

Class

AjaxResponseSubscriber
Response subscriber to handle AJAX responses.

Namespace

Drupal\geolocation\EventSubscriber

Code

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(), CommonMap::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, CommonMap::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]);
    }
  }
}