Commit ed1b0888 authored by Adriano Cori's avatar Adriano Cori Committed by Adriano
Browse files

Issue #3255480 by aronne: Cookie solution overhaul

parent c928c02f
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: bold !important;
  border-bottom: 1px solid !important;
  padding-bottom: 6px !important;
  text-align: center;
}

h1,
h2,
h3 {
  text-align: left;
}

h3,
h4,
h5,
h6 {
  font-style: italic;
}
+886 −259

File changed.

Preview size limit exceeded, changes collapsed.

+99 −115
Original line number Diff line number Diff line
@@ -20,34 +20,33 @@ define('IUBENDA_INTEGRATION_MODULE_NAME', 'iubenda_integration');
 * Implements hook_permission().
 */
function iubenda_integration_permission() {
  return array(
    'administer iubenda_integration' => array(
  return [
    'administer iubenda_integration' => [
      'title' => t('Administer Iubenda Integration'),
    ),
  );
    ],
  ];
}

/**
 * Implements hook_libraries_info().
 */
function iubenda_integration_libraries_info() {
  $libraries[IUBENDA_INTEGRATION_CLASS_LIB_NAME] = array(
  $libraries[IUBENDA_INTEGRATION_CLASS_LIB_NAME] = [
    'name' => 'Iubenda PHP class',
    'vendor url' => 'https://www.iubenda.com',
    'download url' => 'http://simon.s3.iubenda.com/iubenda-cookie-class/iubenda-cookie-class.zip',
    'version arguments' => array(
    'version arguments' => [
      'file' => 'iubenda.class.php',
      'pattern' => '@version:\s+([0-9a-zA-Z\.-]+)@',
      'lines' => 5,
    ),
    'files' => array(
      'php' => array(
    ],
    'files' => [
      'php' => [
        'iubenda.class.php',
        'simple_html_dom.php',
      ),
    ),
  );

      ],
    ],
  ];
  return $libraries;
}

@@ -55,38 +54,38 @@ function iubenda_integration_libraries_info() {
 * Implements hook_menu().
 */
function iubenda_integration_menu() {
  $items = array();
  $items = [];
  $path = drupal_get_path('module', IUBENDA_INTEGRATION_MODULE_NAME);
  
  $items['admin/config/system/iubenda-integration'] = array(
  $items['admin/config/system/iubenda-integration'] = [
    'title' => 'Iubenda Integration',
    'description' => 'Configure Iubenda Integration settings.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('iubenda_integration_privacy_policy_settings_form'),
    'access arguments' => array('administer iubenda_integration'),
    'page arguments' => ['iubenda_integration_privacy_policy_settings_form'],
    'access arguments' => ['administer iubenda_integration'],
    'type' => MENU_NORMAL_ITEM,
    'file' => 'iubenda_integration.admin.inc',
    'file path' => $path . '/includes',
  );
  ];
  
  $items['admin/config/system/iubenda-integration/privacy-policy'] = array(
  $items['admin/config/system/iubenda-integration/privacy-policy'] = [
    'title' => 'Privacy Policy',
    'description' => 'Iubenda Privacy Policy Settings',
    'access arguments' => array('administer iubenda_integration'),
    'access arguments' => ['administer iubenda_integration'],
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
  ];
  
  $items['admin/config/system/iubenda-integration/cookie-policy'] = array(
  $items['admin/config/system/iubenda-integration/cookie-policy'] = [
    'title' => 'Cookie Policy',
    'description' => 'Iubenda Cookie Policy Settings',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('iubenda_integration_cookie_policy_settings_form'),
    'access arguments' => array('administer iubenda_integration'),
    'page arguments' => ['iubenda_integration_cookie_policy_settings_form'],
    'access arguments' => ['administer iubenda_integration'],
    'type' => MENU_LOCAL_TASK,
    'file' => 'iubenda_integration.admin.inc',
    'file path' => $path . '/includes',
    'weight' => 1,
  );
  ];
  
  return $items;
}
@@ -100,11 +99,11 @@ function iubenda_integration_form_alter(&$form, &$form_state, $form_id) {
    return;
  }
  
  $form['iubenda_integration_privacy_policy'] = array(
  $form['iubenda_integration_privacy_policy'] = [
    '#type' => variable_get('iubenda_integration_form_element_type', 'checkbox'),
    '#title' => iubenda_integration_build_string(),
    '#required' => TRUE,
  );
  ];
}

/**
@@ -119,7 +118,6 @@ function iubenda_integration_get_form_ids() {
  foreach ($form_ids as $i => $form_id) {
    $form_ids[$i] = trim($form_id);
  }

  return $form_ids;
}

@@ -127,13 +125,12 @@ function iubenda_integration_get_form_ids() {
 * Implements hook_block_info().
 */
function iubenda_integration_block_info() {
  $blocks = array();
  $blocks = [];
  
  $blocks['privacy_policy'] = array(
  $blocks['privacy_policy'] = [
    'info' => t('Iubenda Integration: Privacy policy'),
    'cache' => DRUPAL_CACHE_PER_ROLE,
  );

  ];
  return $blocks;
}

@@ -141,20 +138,19 @@ function iubenda_integration_block_info() {
 * Implements hook_block_view().
 */
function iubenda_integration_block_view($delta = '') {
  $block = array();
  $block = [];
  
  switch ($delta) {
    case 'privacy_policy':
      $block['subject'] = '';
      $block['content']['iubenda_integration_privacy_policy'] = array(
      $block['content']['iubenda_integration_privacy_policy'] = [
        '#theme' => 'iubenda_integration_privacy_policy_block',
        '#pre_text' => variable_get('iubenda_integration_block_pretext', ''),
        '#link' => iubenda_integration_build_link(variable_get('iubenda_integration_block_text', t('Privacy Policy'))),
        '#post_text' => variable_get('iubenda_integration_block_posttext', ''),
      );
      ];
      break;
  }

  return $block;
}

@@ -162,17 +158,17 @@ function iubenda_integration_block_view($delta = '') {
 * Implements hook_theme().
 */
function iubenda_integration_theme($existing, $type, $theme, $path) {
  return array(
    'iubenda_integration_privacy_policy_block' => array(
      'variables' => array(
  return [
    'iubenda_integration_privacy_policy_block' => [
      'variables' => [
        'pre_text' => NULL,
        'link' => NULL,
        'post_text' => NULL,
      ),
      ],
      'template' => 'iubenda-integration-privacy-policy-block',
      'path' => $path . '/templates',
    ),
  );
    ],
  ];
}

/**
@@ -196,10 +192,10 @@ function iubenda_integration_build_string() {
function iubenda_integration_build_link() {
  $text = variable_get('iubenda_integration_text', t('Privacy Policy'));
  $code = variable_get('iubenda_integration_policy_code', '');
  $link_classes = array(
  $link_classes = [
    variable_get('iubenda_integration_style', 'iubenda-nostyle'),
    'iubenda-embed',
  );
  ];
  
  if (variable_get('iubenda_integration_legal_only', FALSE)) {
    $link_classes[] = 'iub-legal-only';
@@ -209,13 +205,13 @@ function iubenda_integration_build_link() {
    $link_classes[] = 'no-brand';
  }
  
  $link_options = array(
  $link_options = [
    'external' => TRUE,
    'attributes' => array(
    'attributes' => [
      'class' => $link_classes,
      'title' => $text,
    ),
  );
    ],
  ];
  
  return l($text, IUBENDA_INTEGRATION_PRIVACY_POLICY_URL . $code, $link_options);
}
@@ -224,28 +220,26 @@ function iubenda_integration_build_link() {
 * Implements hook_token_info_alter().
 */
function iubenda_integration_token_info() {
  $info['tokens']['site'][IUBENDA_INTEGRATION_MODULE_NAME] = array(
  $info['tokens']['site'][IUBENDA_INTEGRATION_MODULE_NAME] = [
    'name' => t('Iubenda'),
    'description' => t('The Iubenda privacy policy link'),
  );

  ];
  return $info;
}

/**
 * Implements hook_tokens().
 */
function iubenda_integration_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();

  if ($type == 'site') {
function iubenda_integration_tokens($type, $tokens, array $data = [], array $options = []) {
  $replacements = [];
  if ($type !== 'site') {
    return $replacements;
  }
  foreach ($tokens as $name => $original) {
    if ($name == IUBENDA_INTEGRATION_MODULE_NAME) {
      $replacements[$original] = iubenda_integration_build_link();
    }
  }
  }

  return $replacements;
}

@@ -255,64 +249,55 @@ function iubenda_integration_tokens($type, $tokens, array $data = array(), array
function iubenda_integration_page_alter(&$page) {
  if (variable_get('iubenda_integration_cookie_policy_enabled', FALSE)) {
    // Create the array containing all the iubenda cookie settings.
    $setting = array(
      IUBENDA_INTEGRATION_MODULE_NAME => array(
    $setting = [
      IUBENDA_INTEGRATION_MODULE_NAME => [
        'cookie_policy' => iubenda_integration_cookie_policy_settings(),
      ),
    );
      ],
    ];
    
    // Add the current site language to settings
    global $language;
    $thelang = $language->language;
    $setting[IUBENDA_INTEGRATION_MODULE_NAME]['cookie_policy']['lang'] = $thelang;
    $setting[IUBENDA_INTEGRATION_MODULE_NAME]['cookie_policy']['lang'] = $language->language;
    
    // Inject all settings in js.
    drupal_add_js($setting, 'setting');
    // Add iubenda cookie js.
    drupal_add_js(drupal_get_path('module', IUBENDA_INTEGRATION_MODULE_NAME) . '/js/iubenda_cookie_policy.js', array(
    drupal_add_js(drupal_get_path('module', IUBENDA_INTEGRATION_MODULE_NAME) . '/js/iubenda_cookie_policy.js', [
      'scope' => 'footer',
      'type' => 'file',
      'group' => JS_THEME,
      'weight' => 9999,
    ));
  }
    ]);
    
  /*
  Add a post_render callback to allow the parse/repalce activity to check
  the Cookie Law compliance.
   */
    // Add a post_render callback to allow the parse/repalce activity to check
    // the Cookie Law compliance.
    $page['#post_render'][] = 'iubenda_integration_system';
  }
}

/**
 * Callback.
 *
 * A theme post_render callback to allow Iubenda to check if the user
 * who is visiting this page have already accepted the Cookie Law Solution.
 * It allows to block the most common widgets and third party cookies to
 * comply with Cookie Laws, particularly with the
 * Italian cookie law implementation in mind.
 */
function iubenda_integration_system($markup, $element) {
  /*
  A theme post_render callback to allow iubenda to check if the user
  who is visiting this page have already accepted the Cookie Law Solution.
  It allows to block the most common widgets and third party cookies to
  comply with Cookie Laws, particularly with the
  Italian cookie law implementation in mind.
   */
  if (!empty($markup)) {
    /*
    Load Iubenda PHP class library. Now you can use all functions and
    classes included in iubenda.class.php and simple_html_dom.php files.
     */
    if (($library = libraries_load(IUBENDA_INTEGRATION_CLASS_LIB_NAME))
      && $library['loaded']) {
      /*
      Parse all page's HTML and check for coockies intent lock. You can find
      more informations in this post https://www.iubenda.com/it/help/posts/1045.
       */
      if (!Page::consent_given() && !Page::bot_detected()) {
  // Load Iubenda PHP class library. Now you can use all functions and
  // classes included in iubenda.class.php and simple_html_dom.php files.
  // Parse all page's HTML and check for cookies intent lock. You can find
  // more info in this post: https://www.iubenda.com/it/help/posts/1045.
  if (
    !empty($markup) &&
    ($library = libraries_load(IUBENDA_INTEGRATION_CLASS_LIB_NAME))
    && $library['loaded'] && !Page::consent_given() && !Page::bot_detected()
  ) {
    $page = new Page($markup);
    $page->parse();
    $markup = $page->get_converted_page();
  }
    }
  }
  
  return $markup;
}
@@ -321,7 +306,7 @@ function iubenda_integration_system($markup, $element) {
 * Get Iubenda cookie policy settings.
 */
function iubenda_integration_cookie_policy_settings() {
  $settings = variable_get('iubenda_integration_cookie_policy', array());
  $settings = variable_get('iubenda_integration_cookie_policy', []);
  $settings = _iubenda_integration_cookie_policy_filter_settings($settings);
  $developers = $settings['developers'];
  unset($settings['developers']);
@@ -345,6 +330,5 @@ function _iubenda_integration_cookie_policy_filter_settings($settings) {
      }
    }
  }

  return $settings;
}
+9 −7
Original line number Diff line number Diff line
var _iub = _iub || [];
if (Drupal.hasOwnProperty('iubCallbacks')) {
  Drupal.settings.iubenda_integration.cookie_policy.callback = Drupal.iubCallbacks;
}
_iub.csConfiguration = Drupal.settings.iubenda_integration.cookie_policy;
(function (w, d) {
  var loader = function () {
    var s = d.createElement("script"),
        tag = d.getElementsByTagName("script")[0];
      s.src = "//cdn.iubenda.com/cookie_solution/iubenda_cs.js";

    s.type = 'text/javascript';
    s.src = "//cdn.iubenda.com/cs/iubenda_cs.js";
    s.async = true;
    tag.parentNode.insertBefore(s, tag);
  };

  if (w.addEventListener) {
    w.addEventListener("load", loader, false);
  }
  else if (w.attachEvent) {
  } else if (w.attachEvent) {
    w.attachEvent("onload", loader);
  }
  else {
  } else {
    w.onload = loader;
  }
})(window, document);