You are here

public function IpGeoLocController::currentLocation in IP Geolocation Views & Maps 8

Get current location lat long.

1 string reference to 'IpGeoLocController::currentLocation'
ip_geoloc.routing.yml in ./ip_geoloc.routing.yml
ip_geoloc.routing.yml

File

src/Controller/IpGeoLocController.php, line 39

Class

IpGeoLocController
Pending doc.

Namespace

Drupal\ip_geoloc\Controller

Code

public function currentLocation() {
  $request = \Drupal::request();
  if ($request
    ->get('error') !== NULL) {

    // Device/browser does not support getCurrentPosition(), timeout or
    // Google reverse-geocode error.
    // watchdog() only works at full bootstrap, so store error here and handle
    // in ip_geoloc_init() during next click/request.
    $error = Html::escape($_POST['error']);
    $this->ipGeolocSession
      ->setSessionValue('error', $error);
    return new JsonResponse([
      'response' => $error,
    ]);
  }

  // Flesh out $location with the returned street address components.
  $location = [
    'ip_address' => $request
      ->getClientIp(),
  ];
  $location_data = $request->request
    ->all();
  foreach ($location_data as $key => $value) {

    // Ignore crap required for drupal.org/project/js module.
    if (Unicode::substr($key, 0, 3) !== 'js_') {
      $location[Html::escape($key)] = Html::escape($value);
    }
  }
  $location['provider'] = empty($location['country']) ? 'device' : 'device+google';
  $since = $this->ipGeolocSession
    ->getSessionValue('position_pending_since');

  // @TODO review this migration to inject dependencies

  /*ip_geoloc_debug(t('IPGV&M: returned from position callback in %since s: !location', array(
      '%since' => isset($since) ? number_format(microtime(TRUE) - $since, 1) : '?',
      '!location' => ip_geoloc_pretty_print($location))));

      // If better_statistics module is enabled, we can backfill geolocation
      // information to {accesslog} entries occurred since the positioning was
      // requested.
      if ($since && \Drupal::moduleHandler()->moduleExists('better_statistics')) {
      require_once 'plugins/ip_geoloc.statistics.inc';
      _ip_geoloc_statistics_backfill($since, $location);
      }

      if (ip_geoloc_store_location($location) !== FALSE) {
      // If successfully stored, don't store again.
      $location['ip_address'] = NULL;
      }*/
  $location['fixed_address'] = 0;
  $location['is_updated'] = TRUE;

  // Wipe old location before setting the new one (to avoid merging).
  $this->ipGeolocSession
    ->setSessionValue('location', NULL);
  $this->ipGeolocSession
    ->setSessionValue('location', $location);

  // Got fresh location so reset 'position_pending_since' timer.
  $this->ipGeolocSession
    ->setSessionValue('position_pending_since', NULL);

  // [#2599950], #6.
  return new JsonResponse([]);
}