Commit b027e309 authored by Nick Vanpraet's avatar Nick Vanpraet Committed by Sven Berg Ryen
Browse files

Issue #2987584 by Grayle, svenryen, L_VanDamme, klevyke: Terms version change (GDPR regulation)

parent a648df99
Loading
Loading
Loading
Loading
+21 −0
Changes for eu_cookie_compliance.admin.inc: 21 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -574,6 +574,27 @@ function eu_cookie_compliance_admin_form(array $form, array $form_state) {
    '#default_value' => isset($popup_settings['popup_link_new_window']) ? $popup_settings['popup_link_new_window'] : 1,
  );

  $form['version_set'] = array(
    '#type' => 'fieldset',
    '#title' => t('Cookie Policy Version'),
    '#collapsible' => TRUE,
    '#collapsed' => TRUE,
  );

  $form['version_set']['eu_cookie_compliance'] = array(
    '#type' => 'item',
    '#tree' => TRUE,
  );

  $form['version_set']['eu_cookie_compliance']['cookie_policy_version'] = array(
    '#type' => 'textfield',
    '#title' => t('Cookie Policy Version'),
    '#title_display' => 'invisible',
    '#description' => t('Change this value to make the cookie information banner reappear for all visitors. A typical usage of this field is to increase the value when the privacy policy has been changed.'),
    '#default_value' => isset($popup_settings['cookie_policy_version']) ? $popup_settings['cookie_policy_version'] : '1.0.0',
    '#required' => TRUE,
  );

  $form['appearance'] = array(
    '#type' => 'fieldset',
    '#collapsible' => TRUE,
+34 −0
Changes for eu_cookie_compliance.install: 34 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ function _eu_cookie_compliance_get_popup_default_setting() {
  }

  return array(
    'cookie_policy_version' => '1.0.0',
    'info_template' => 'new',
    'popup_info' => array(
      'value' => '<h2>We use cookies on this site to enhance your user experience</h2><p>By clicking the Accept button, you agree to us doing so.</p>',
@@ -604,3 +605,36 @@ function eu_cookie_compliance_update_7015() {
    }
  }
}

/**
 * Add config variable for cookie policy version.
 */
function eu_cookie_compliance_update_7016() {
  $eu_cookie_settings = variable_get('eu_cookie_compliance', array());
  $new_settings = array(
    'cookie_policy_version' => '1.0.0',
  );
  variable_set('eu_cookie_compliance', $eu_cookie_settings + $new_settings);

  if (module_exists('i18n_variable')) {
    $languages = language_list();
    foreach (array_keys($languages) as $langcode) {
      $settings = i18n_variable_get('eu_cookie_compliance', $langcode);
      if (!empty($settings)) {
        $updated_setting = $settings + $new_settings;
        variable_realm_set('language', $langcode, 'eu_cookie_compliance', $updated_setting, FALSE);
      }
    }
  }

  // Set configuration variables for all domains.
  if (module_exists('domain_settings') && module_exists('domain_conf')) {
    $domains = domain_domains();
    foreach ($domains as $domain_data) {
      $domain_id = $domain_data['domain_id'];
      $settings = domain_conf_variable_get($domain_id, 'eu_cookie_compliance');
      $updated_settings = $settings + $new_settings;
      domain_conf_variable_save($domain_id, 'eu_cookie_compliance', $updated_settings);
    }
  }
}
+1 −0
Changes for eu_cookie_compliance.module: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -315,6 +315,7 @@ function eu_cookie_compliance_page_build(&$page) {
      $cookie_categories = _eu_cookie_compliance_extract_category_key_label_description($cookie_categories);

      $data['variables'] = array(
        'cookie_policy_version' => isset($popup_settings['cookie_policy_version']) ? $popup_settings['cookie_policy_version'] : '1.0.0',
        'popup_enabled' => $popup_settings['popup_enabled'],
        'popup_agreed_enabled' => $popup_settings['popup_agreed_enabled'],
        'popup_hide_agreed' => isset($popup_settings['popup_hide_agreed']) ? $popup_settings['popup_hide_agreed'] : FALSE,
+49 −4
Changes for js/eu_cookie_compliance.js: 49 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -55,16 +55,30 @@
        return;
      }

      if (typeof Drupal.eu_cookie_compliance.getVersion() === 'undefined') {
        // If version doesn't exist as a cookie, set it to the current one.
        // For modules that update to this, it prevents needless retriggering
        // For first time runs, it makes no difference as the other IF statements
        // below will still cause the popup to trigger
        // For incrementing the version, it also makes no difference as either it's
        // a returning user and will have a version set, or it's a new user and
        // the other checks will trigger it.
        Drupal.eu_cookie_compliance.setVersion();
      }

      Drupal.eu_cookie_compliance.updateCheck();
      var status = Drupal.eu_cookie_compliance.getCurrentStatus();
      if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null || (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup)) {
        if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
      var versionChanged = Drupal.eu_cookie_compliance.getVersion() !== Drupal.settings.eu_cookie_compliance.cookie_policy_version;
      // Closed if status has a value and the version hasn't changed.
      var closed = status !== null && !versionChanged;
      if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null || (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) || versionChanged) {
        if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null || versionChanged) {
          // Detect mobile here and use mobile_popup_html_info, if we have a mobile device.
          if (window.matchMedia('(max-width: ' + Drupal.settings.eu_cookie_compliance.mobile_breakpoint + 'px)').matches && Drupal.settings.eu_cookie_compliance.use_mobile_message) {
            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.mobile_popup_html_info, (status !== null));
            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.mobile_popup_html_info, closed);
          }
          else {
            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_info, (status !== null));
            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_info, closed);
          }

          Drupal.eu_cookie_compliance.initPopup();
@@ -554,6 +568,8 @@
      $.cookie(cookieName, status, { expires: date, path: path, domain: domain });
    }
    $(document).trigger('eu_cookie_compliance.changeStatus', [status]);
    // Status set means something happened, update the version.
    Drupal.eu_cookie_compliance.setVersion();

    // Store consent if applicable.
    if (Drupal.settings.eu_cookie_compliance.store_consent && ((status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) || (status === 2  && !Drupal.settings.eu_cookie_compliance.popup_agreed_enabled))) {
@@ -645,6 +661,7 @@
    // Add the EU Cookie Compliance cookie.
    euCookieComplianceAllowlist.push((typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : Drupal.settings.eu_cookie_compliance.cookie_name);
    euCookieComplianceAllowlist.push((typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed-categories' : Drupal.settings.eu_cookie_compliance.cookie_name + '-categories');
    euCookieComplianceAllowlist.push((typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed-version' : Drupal.settings.eu_cookie_compliance.cookie_name + '-version');

    // Check if the cookie is allowed.
    for (var item in euCookieComplianceAllowlist) {
@@ -694,6 +711,34 @@
    }
  };

  Drupal.eu_cookie_compliance.getVersion = function () {
    var cookieName = (typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed-version' : Drupal.settings.eu_cookie_compliance.cookie_name + '-version';
    return $.cookie(cookieName);
  };

  Drupal.eu_cookie_compliance.setVersion = function () {
    var date = new Date();
    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
    var path = Drupal.settings.eu_cookie_compliance.domain_all_sites ? '/' : Drupal.settings.basePath;
    var cookieName = (typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed-version' : Drupal.settings.eu_cookie_compliance.cookie_name + '-version';

    if (path.length > 1) {
      var pathEnd = path.length - 1;
      if (path.lastIndexOf('/') === pathEnd) {
        path = path.substring(0, pathEnd);
      }
    }
    var eucc_version = Drupal.settings.eu_cookie_compliance.cookie_policy_version;
    var cookie_session = parseInt(Drupal.settings.eu_cookie_compliance.cookie_session);
    if (cookie_session) {
      $.cookie(cookieName, eucc_version, { path: path, domain: domain });
    } else {
      var lifetime = parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime);
      date.setDate(date.getDate() + lifetime);
      $.cookie(cookieName, eucc_version, { expires: date, path: path, domain: domain });
    }
  };

  // Load blocked scripts if the user has agreed to being tracked.
  var euCookieComplianceHasLoadedScripts = false;
  var euCookieComplianceHasLoadedScriptsForCategory = [];