You are here

public function SmartIpLocation::save in Smart IP 8.4

Same name and namespace in other branches
  1. 8.2 src/SmartIpLocation.php \Drupal\smart_ip\SmartIpLocation::save()
  2. 8.3 src/SmartIpLocation.php \Drupal\smart_ip\SmartIpLocation::save()

Saves the Smart IP location data to user data and session (for anonymous, saves to session only).

Return value

\Drupal\smart_ip\SmartIpLocationInterface Smart IP's data location.

Overrides SmartIpLocationInterface::save

File

src/SmartIpLocation.php, line 219
Contains \Drupal\smart_ip\SmartIpLocation.

Class

SmartIpLocation
Implements wrapper and utility methods for Smart IP's data location.

Namespace

Drupal\smart_ip

Code

public function save() {

  // Determine if saving location details of visitor from EU countries are
  // permitted.
  $euVisitorsDontSave = \Drupal::config('smart_ip.settings')
    ->get('eu_visitor_dont_save') && $this->isGdprCountry;

  // Check if the user permitted to share location.
  $shareLocation = SmartIp::getSession('smart_ip_user_share_location_permitted', TRUE);
  if ($shareLocation && !$euVisitorsDontSave) {

    // Save only if user has permission to share location.
    $user = \Drupal::currentUser();
    $uid = $user
      ->id();
    $data['location'] = $this->allData;
    SmartIp::updateFields($data['location']);

    // Allow other modules to modify country list via
    // hook_smart_ip_user_save_alter().
    \Drupal::moduleHandler()
      ->alter('smart_ip_user_save', $user, $data);

    // Save the Smart IP location in current user's session.
    SmartIp::setSession('smart_ip', $data);
    if ($uid != 0) {

      /** @var \Drupal\user\UserData $userData */
      $userData = \Drupal::service('user.data');

      // Save the Smart IP location to current user's user_data
      $userData
        ->set('smart_ip', $uid, 'geoip_location', $data);
    }
  }
  return $this;
}