You are here

function eu_cookie_compliance_admin_form_validate in EU Cookie Compliance (GDPR Compliance) 7

Same name and namespace in other branches
  1. 5 eu_cookie_compliance.module \eu_cookie_compliance_admin_form_validate()
  2. 6 eu_cookie_compliance.admin.inc \eu_cookie_compliance_admin_form_validate()
  3. 7.2 eu_cookie_compliance.admin.inc \eu_cookie_compliance_admin_form_validate()

Validates form for cookie control banner.

Parameters

array $form: Form array.

array $form_state: Form state array.

File

./eu_cookie_compliance.admin.inc, line 941
This file provides administration form for the module.

Code

function eu_cookie_compliance_admin_form_validate(array $form, array &$form_state) {
  if ($form_state['values']['eu_cookie_compliance']['popup_agreed_enabled']) {
    if (empty($form_state['values']['eu_cookie_compliance']['popup_agreed']['value'])) {
      form_set_error('eu_cookie_compliance][popup_agreed', t('@name field is required', array(
        '@name' => '"Thank you" banner message',
      )));
    }
    if (empty($form_state['values']['eu_cookie_compliance']['popup_find_more_button_message'])) {
      form_set_error('eu_cookie_compliance][popup_find_more_button_message', t('@name field is required', array(
        '@name' => 'More info button label',
      )));
    }
    if (empty($form_state['values']['eu_cookie_compliance']['popup_hide_button_message'])) {
      form_set_error('eu_cookie_compliance][popup_hide_button_message', t('@name field is required', array(
        '@name' => 'Hide button label',
      )));
    }
  }
  if (!preg_match('/^[1-9][0-9]{0,4}$/', $form_state['values']['eu_cookie_compliance']['popup_delay']) && $form_state['values']['eu_cookie_compliance']['popup_delay'] != '0') {
    form_set_error('eu_cookie_compliance][popup_delay', t('Delay must be an integer value.'));
  }
  if (empty($form_state['values']['eu_cookie_compliance']['use_bare_css'])) {
    if (!preg_match('/^[1-9][0-9]{0,4}$/', $form_state['values']['eu_cookie_compliance']['popup_height']) && !empty($form_state['values']['eu_cookie_compliance']['popup_height'])) {
      form_set_error('eu_cookie_compliance][popup_height', t('Height must be an integer value .'));
    }
    if (!preg_match('/^[1-9][0-9]{1,4}%?$/', $form_state['values']['eu_cookie_compliance']['popup_width'])) {
      form_set_error('eu_cookie_compliance][popup_width', t('Width must be an integer or a percentage value.'));
    }
  }
  else {
    $form_state['values']['eu_cookie_compliance']['popup_width'] = '';
    $form_state['values']['eu_cookie_compliance']['popup_height'] = '';
    $form_state['values']['eu_cookie_compliance']['popup_bg_hex'] = '';
    $form_state['values']['eu_cookie_compliance']['popup_text_hex'] = '';
  }
  $popup_link = $form_state['values']['eu_cookie_compliance']['popup_link'];

  // If the link contains a fragment then check if it validates then rewrite
  // link with full url.
  if (strpos($popup_link, '#') !== FALSE && strpos($popup_link, 'http') === FALSE) {
    $fragment = explode('#', $popup_link);
    $popup_link = url($fragment[0], array(
      'fragment' => $fragment[1],
      'absolute' => TRUE,
    ));
    form_set_error('eu_cookie_compliance][popup_link', t('Looks like your privacy policy link contains a fragment #. You should make this an absolute url, e.g. @link', array(
      '@link' => $popup_link,
    )));
  }
  if ($popup_link === '<front>' && $form_state['values']['eu_cookie_compliance']['show_disagree_button']) {
    drupal_set_message(t('Your privacy policy link is pointing at the front page. This is the default value after installation, and unless your privacy policy is actually posted at the front page, you will need to create a separate page for the privacy policy and link to that page.'), 'error');
  }

  // Handle legacy settings for popup_position:
  if ($form_state['values']['eu_cookie_compliance']['popup_position'] === 'top') {
    $form_state['values']['eu_cookie_compliance']['popup_position'] = TRUE;
  }
  elseif ($form_state['values']['eu_cookie_compliance']['popup_position'] === 'bottom') {
    $form_state['values']['eu_cookie_compliance']['popup_position'] = FALSE;
  }
  $method = $form_state['values']['eu_cookie_compliance']['method'];

  // Fix possible urlencoded strings (#3171654).
  $form_state['values']['eu_cookie_compliance']['disabled_javascripts'] = str_replace('%3A', ':', $form_state['values']['eu_cookie_compliance']['disabled_javascripts']);
  if ($method !== 'default') {
    $form_state['values']['eu_cookie_compliance']['show_disagree_button'] = TRUE;
    $form_state['values']['eu_cookie_compliance']['popup_clicking_confirmation'] = FALSE;
    $form_state['values']['eu_cookie_compliance']['popup_scrolling_confirmation'] = FALSE;
    $form_state['values']['eu_cookie_compliance']['info_template'] = 'new';
  }
  else {
    $form_state['values']['eu_cookie_compliance']['allowed_cookies'] = '';
    $form_state['values']['eu_cookie_compliance']['automatic_cookie_removal'] = FALSE;
    $form_state['values']['eu_cookie_compliance']['disabled_javascripts'] = '';
    $form_state['values']['eu_cookie_compliance']['withdraw_enabled'] = FALSE;
  }

  // Validate cookie name against valid characters.
  if (preg_match('/[&\'\\x00-\\x20\\x22\\x28-\\x29\\x2c\\x2f\\x3a-\\x40\\x5b-\\x5d\\x7b\\x7d\\x7f]/', $form_state['values']['eu_cookie_compliance']['cookie_name'])) {
    form_set_error('eu_cookie_compliance][cookie_name', t('Invalid cookie name, please remove any special characters and try again.'));
  }
  eu_cookie_compliance_clear_caches();
}