You are here

public function CleantalkSettingsForm::validateForm in Anti Spam by CleanTalk 8.3

Same name and namespace in other branches
  1. 8.4 src/Form/CleantalkSettingsForm.php \Drupal\cleantalk\Form\CleantalkSettingsForm::validateForm()
  2. 9.1.x src/Form/CleantalkSettingsForm.php \Drupal\cleantalk\Form\CleantalkSettingsForm::validateForm()

Form validation handler.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormBase::validateForm

File

src/Form/CleantalkSettingsForm.php, line 62

Class

CleantalkSettingsForm

Namespace

Drupal\cleantalk\Form

Code

public function validateForm(array &$form, FormStateInterface $form_state) {
  $key_is_valid = CleantalkHelper::api_key__is_correct(trim($form_state
    ->getValue('cleantalk_authkey')));
  $key_is_ok = false;
  if ($key_is_valid) {
    CleantalkAPI::method__send_empty_feedback($form_state
      ->getValue('cleantalk_authkey'), CLEANTALK_USER_AGENT);
    $path_to_cms = preg_replace('/http[s]?:\\/\\//', '', $GLOBALS['base_url'], 1);
    $account_status = CleantalkAPI::method__notice_paid_till($form_state
      ->getValue('cleantalk_authkey'), $path_to_cms);
    if (empty($account_status['error'])) {
      $key_is_ok = true;
      if ($form_state
        ->getValue('cleantalk_sfw') === 1) {
        $remote_calls_config = \Drupal::state()
          ->get('cleantalk_remote_calls');
        $remote_calls_config['sfw_update']['last_call'] = 0;
        \Drupal::state()
          ->set('cleantalk_remote_calls', $remote_calls_config);
        CleantalkFuncs::_cleantalk_sfw_update($form_state
          ->getValue('cleantalk_authkey'));
        CleantalkFuncs::_cleantalk_sfw_send_logs($form_state
          ->getValue('cleantalk_authkey'));
      }
    }
    \Drupal::state()
      ->set('cleantalk_api_show_notice', empty($account_status['error']) && isset($account_status['show_notice']) ? $account_status['show_notice'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_renew', empty($account_status['error']) && isset($account_status['renew']) ? $account_status['renew'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_trial', empty($account_status['error']) && isset($account_status['trial']) ? $account_status['trial'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_user_token', empty($account_status['error']) && isset($account_status['user_token']) ? $account_status['user_token'] : '');
    \Drupal::state()
      ->set('cleantalk_api_spam_count', empty($account_status['error']) && isset($account_status['spam_count']) ? $account_status['spam_count'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_moderate_ip', empty($account_status['error']) && isset($account_status['moderate_ip']) ? $account_status['moderate_ip'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_moderate', empty($account_status['error']) && isset($account_status['moderate']) ? $account_status['moderate'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_show_review', empty($account_status['error']) && isset($account_status['show_review']) ? $account_status['show_review'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_service_id', empty($account_status['error']) && isset($account_status['service_id']) ? $account_status['service_id'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_license_trial', empty($account_status['error']) && isset($account_status['license_trial']) ? $account_status['license_trial'] : 0);
    \Drupal::state()
      ->set('cleantalk_api_account_name_ob', empty($account_status['error']) && isset($account_status['account_name_ob']) ? $account_status['account_name_ob'] : '');
    \Drupal::state()
      ->set('cleantalk_api_ip_license', empty($account_status['error']) && isset($account_status['ip_license']) ? $account_status['ip_license'] : 0);
    \Drupal::state()
      ->set('cleantalk_show_renew_banner', \Drupal::state()
      ->get('cleantalk_api_show_notice') && \Drupal::state()
      ->get('cleantalk_api_trial') ? 1 : 0);
  }

  // Turns off alternative cookies setting if cookies are disabled
  if (0 == $form_state
    ->getValue('cleantalk_set_cookies')) {
    $form_state
      ->setValue('cleantalk_alternative_cookies_session', 0);
  }

  // Validating the URL exclusion string
  if ($form_state
    ->getValue('cleantalk_url_regexp')) {
    $errors = array();
    if (!empty($form_state
      ->getValue('cleantalk_url_exclusions'))) {
      $exclusions = explode(',', $form_state
        ->getValue('cleantalk_url_exclusions'));
      foreach ($exclusions as $exclusion) {
        $sanitized_exclusion = trim($exclusion);
        if (!empty($sanitized_exclusion)) {
          if (!self::apbct_is_regexp($sanitized_exclusion)) {
            $errors[] = $sanitized_exclusion;
          }
        }
      }
    }
    if (!empty($errors)) {

      // Remove the variable (setting) from BD if is not valid
      $config = \Drupal::service('config.factory')
        ->getEditable('cleantalk.settings');
      $config
        ->set('cleantalk_url_exclusions', '')
        ->save();

      // And trigger an error
      $form_state
        ->setErrorByName('cleantalk_url_exclusions', $this
        ->t('URL exclusions is not valid: ') . implode(', ', $errors));
    }
  }
  if (!$key_is_ok) {
    $form_state
      ->setErrorByName('cleantalk_authkey', $this
      ->t('Access key is not valid.'));
  }
}