You are here

class SmartIpEventSubscriber in Smart IP 8.3

Same name in this branch
  1. 8.3 modules/device_geolocation/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\device_geolocation\EventSubscriber\SmartIpEventSubscriber
  2. 8.3 modules/smart_ip_maxmind_geoip2_bin_db/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_maxmind_geoip2_bin_db\EventSubscriber\SmartIpEventSubscriber
  3. 8.3 modules/smart_ip_ipinfodb_web_service/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_ipinfodb_web_service\EventSubscriber\SmartIpEventSubscriber
  4. 8.3 modules/smart_ip_ip2location_bin_db/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_ip2location_bin_db\EventSubscriber\SmartIpEventSubscriber
  5. 8.3 modules/smart_ip_abstract_web_service/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_abstract_web_service\EventSubscriber\SmartIpEventSubscriber
  6. 8.3 modules/smart_ip_maxmind_geoip2_web_service/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_maxmind_geoip2_web_service\EventSubscriber\SmartIpEventSubscriber
Same name and namespace in other branches
  1. 8.4 modules/smart_ip_abstract_web_service/src/EventSubscriber/SmartIpEventSubscriber.php \Drupal\smart_ip_abstract_web_service\EventSubscriber\SmartIpEventSubscriber

Core functionalty of this Smart IP data source module. Listens to Smart IP override events.

@package Drupal\smart_ip_abstract_web_service\EventSubscriber

Hierarchy

Expanded class hierarchy of SmartIpEventSubscriber

1 file declares its use of SmartIpEventSubscriber
WebServiceUtility.php in modules/smart_ip_abstract_web_service/src/WebServiceUtility.php
Contains \Drupal\smart_ip_abstract_web_service\WebServiceUtility.
1 string reference to 'SmartIpEventSubscriber'
smart_ip_abstract_web_service.services.yml in modules/smart_ip_abstract_web_service/smart_ip_abstract_web_service.services.yml
modules/smart_ip_abstract_web_service/smart_ip_abstract_web_service.services.yml
1 service uses SmartIpEventSubscriber
smart_ip_abstract_web_service.smart_ip_event_subscriber in modules/smart_ip_abstract_web_service/smart_ip_abstract_web_service.services.yml
Drupal\smart_ip_abstract_web_service\EventSubscriber\SmartIpEventSubscriber

File

modules/smart_ip_abstract_web_service/src/EventSubscriber/SmartIpEventSubscriber.php, line 24
Contains \Drupal\smart_ip_abstract_web_service\EventSubscriber\SmartIpEventSubscriber.

Namespace

Drupal\smart_ip_abstract_web_service\EventSubscriber
View source
class SmartIpEventSubscriber extends SmartIpEventSubscriberBase {

  /**
   * {@inheritdoc}
   */
  public static function sourceId() {
    return 'abstract_web_service';
  }

  /**
   * {@inheritdoc}
   */
  public static function configName() {
    return 'smart_ip_abstract_web_service.settings';
  }

  /**
   * {@inheritdoc}
   */
  public function processQuery(GetLocationEvent $event) {
    if ($event
      ->getDataSource() == self::sourceId()) {
      $location = $event
        ->getLocation();
      $ipAddress = $location
        ->get('ipAddress');
      $record = WebServiceUtility::getGeolocation($ipAddress);
      $config = \Drupal::config(self::configName());
      $version = $config
        ->get('version');
      if (!empty($record) && !isset($record['error'])) {
        if ($version == 1) {
          $country = isset($record['country']) ? $record['country'] : '';
          $countryCode = isset($record['country_code']) ? $record['country_code'] : '';
          $region = isset($record['region']) ? $record['region'] : '';
          $regionCode = isset($record['region_iso_code']) ? $record['region_iso_code'] : '';
          $city = isset($record['city']) ? $record['city'] : '';
          $zip = isset($record['postal_code']) ? $record['postal_code'] : '';
          $latitude = isset($record['latitude']) ? $record['latitude'] : '';
          $longitude = isset($record['longitude']) ? $record['longitude'] : '';
          $timeZone = isset($record['timezone']['name']) ? $record['timezone']['name'] : '';
          $isEuCountry = isset($record['isEuCountry']) ? $record['isEuCountry'] : '';
          $isGdprCountry = isset($record['isGdprCountry']) ? $record['isGdprCountry'] : '';
          $location
            ->set('originalData', $record)
            ->set('country', $country)
            ->set('countryCode', mb_strtoupper($countryCode))
            ->set('region', $region)
            ->set('regionCode', $regionCode)
            ->set('city', $city)
            ->set('zip', $zip)
            ->set('latitude', $latitude)
            ->set('longitude', $longitude)
            ->set('timeZone', $timeZone)
            ->set('isEuCountry', $isEuCountry)
            ->set('isGdprCountry', $isGdprCountry);
        }
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function formSettings(AdminSettingsEvent $event) {
    $config = \Drupal::config(self::configName());
    $form = $event
      ->getForm();
    $form['smart_ip_data_source_selection']['smart_ip_data_source']['#options'][self::sourceId()] = t("Use @abstract web service. You will need a unique API key to use this and\n      you must @register an Abstract account and @login to get and view your\n      @api.", [
      '@abstract' => Link::fromTextAndUrl(t('Abstract IP Geolocation'), Url::fromUri('https://www.abstractapi.com/ip-geolocation-api'))
        ->toString(),
      '@register' => Link::fromTextAndUrl(t('register'), Url::fromUri('https://app.abstractapi.com/users/signup'))
        ->toString(),
      '@login' => Link::fromTextAndUrl(t('logged in'), Url::fromUri('https://app.abstractapi.com/users/login'))
        ->toString(),
      '@api' => Link::fromTextAndUrl(t('unique API'), Url::fromUri('https://app.abstractapi.com/api/ip-geolocation/tester'))
        ->toString(),
    ]);
    $form['smart_ip_data_source_selection']['abstract_api_version'] = [
      '#type' => 'select',
      '#title' => t('Abstract IP Geolocation web service version'),
      '#default_value' => $config
        ->get('version'),
      '#options' => [
        1 => 1,
      ],
      '#description' => t('Select an Abstract IP Geolocation web service version.'),
      '#states' => [
        'visible' => [
          ':input[name="smart_ip_data_source"]' => [
            'value' => self::sourceId(),
          ],
        ],
      ],
    ];
    $form['smart_ip_data_source_selection']['abstract_api_key'] = [
      '#type' => 'textfield',
      '#title' => t('Abstract IP Geolocation web service API key'),
      '#description' => t('The use of Abstract IP Geolocation web service requires API key. Registration for the
        new API key is free, sign up @here.', [
        '@here' => Link::fromTextAndUrl(t('here'), Url::fromUri('https://app.abstractapi.com/users/signup'))
          ->toString(),
      ]),
      '#default_value' => $config
        ->get('api_key'),
      '#states' => [
        'visible' => [
          ':input[name="smart_ip_data_source"]' => [
            'value' => self::sourceId(),
          ],
        ],
      ],
    ];
    $event
      ->setForm($form);
  }

  /**
   * {@inheritdoc}
   */
  public function validateFormSettings(AdminSettingsEvent $event) {

    /** @var \Drupal\Core\Form\FormStateInterface $formState */
    $formState = $event
      ->getFormState();
    if ($formState
      ->getValue('smart_ip_data_source') == self::sourceId()) {
      if ($formState
        ->isValueEmpty('abstract_api_key')) {
        $formState
          ->setErrorByName('abstract_api_key', t('Please provide Abstract IP Geolocation web service API key.'));
      }
    }
  }

  /**
   * {@inheritdoc}
   */
  public function submitFormSettings(AdminSettingsEvent $event) {

    /** @var \Drupal\Core\Form\FormStateInterface $formState */
    $formState = $event
      ->getFormState();
    if ($formState
      ->getValue('smart_ip_data_source') == self::sourceId()) {
      $config = \Drupal::configFactory()
        ->getEditable(self::configName());
      $config
        ->set('version', $formState
        ->getValue('abstract_api_version'))
        ->set('api_key', $formState
        ->getValue('abstract_api_key'))
        ->save();
    }
  }

  /**
   * {@inheritdoc}
   */
  public function manualUpdate(DatabaseFileEvent $event) {
  }

  /**
   * {@inheritdoc}
   */
  public function cronRun(DatabaseFileEvent $event) {
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SmartIpEventSubscriber::configName public static function Get the config name of this Smart IP data source module. Overrides SmartIpDataSourceInterface::configName
SmartIpEventSubscriber::cronRun public function Act on Drupal cron run. Overrides SmartIpDataSourceInterface::cronRun
SmartIpEventSubscriber::formSettings public function Add the form elements of this Smart IP data source to main admin settings page of Smart IP. Overrides SmartIpDataSourceInterface::formSettings
SmartIpEventSubscriber::manualUpdate public function Act on manual database update. Overrides SmartIpDataSourceInterface::manualUpdate
SmartIpEventSubscriber::processQuery public function Act on \Drupal\smart_ip\SmartIp::query() when executed and if selected as Smart IP data source, query the IP address against its database. Overrides SmartIpDataSourceInterface::processQuery
SmartIpEventSubscriber::sourceId public static function Smart IP data source module's source ID. Overrides SmartIpDataSourceInterface::sourceId
SmartIpEventSubscriber::submitFormSettings public function Act on submission of main Smart IP admin settings form. Overrides SmartIpDataSourceInterface::submitFormSettings
SmartIpEventSubscriber::validateFormSettings public function Act on validation of main Smart IP admin settings form. Overrides SmartIpDataSourceInterface::validateFormSettings
SmartIpEventSubscriberBase::getSubscribedEvents static function Returns an array of event names this subscriber wants to listen to.
SmartIpEventSubscriberBase::includeEditableConfigNames public function Add Smart IP source module's config name. Overrides SmartIpDataSourceInterface::includeEditableConfigNames