You are here

public function AjaxResponseSubscriber::onResponse in Geolocation Field 8

Same name and namespace in other branches
  1. 8.3 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 43

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 ($view
    ->getStyle()
    ->getPluginId() !== 'maps_common') {

    // 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)) {
        if (!empty($current_display
          ->getOption('style')['type']) && $current_display
          ->getOption('style')['type'] == 'maps_common') {
          $common_map_attachment = TRUE;
        }
      }
    }
    if (!$common_map_attachment) {
      return;
    }
  }
  $page_change = $event
    ->getRequest()->query
    ->get('page', FALSE);
  $commands =& $response
    ->getCommands();
  foreach ($commands as $delta => &$command) {

    // Substitute the 'replace' method without our custom jQuery method which
    // will allow views content to be injected one after the other.
    if (isset($command['method']) && $command['method'] === 'replaceWith' && isset($command['selector']) && substr($command['selector'], 0, 16) === '.js-view-dom-id-') {
      $command['command'] = 'geolocationCommonMapsUpdate';
      unset($command['method']);
    }

    // Stop the view from scrolling to the top of the page.
    if ($page_change === FALSE && $command['command'] === 'viewsScrollTop') {
      unset($commands[$delta]);
    }
  }
}