You are here

function eu_cookie_compliance_page_attachments_alter in EU Cookie Compliance (GDPR Compliance) 8

Implements hook_page_attachments_alter().

File

./eu_cookie_compliance.module, line 797
The main file for the EU Cookie Compliance module.

Code

function eu_cookie_compliance_page_attachments_alter(array &$attachments) {
  $config = Drupal::config('eu_cookie_compliance.settings');
  $disabled_javascripts = $config
    ->get('disabled_javascripts');
  $disabled_javascripts = _eu_cookie_compliance_explode_multiple_lines($disabled_javascripts);
  foreach ($disabled_javascripts as $script) {

    // Remove 'category:' if present.
    $parts = explode('%3A', $script);

    // The script can use filesystem stream wrappers, so considerate them.
    if (count($parts) > 2) {
      array_shift($parts);
      $script = implode(':', $parts);
    }
    else {
      $script = end($parts);
    }

    // Parse the string and drop the parameter that is a behavior name.
    if (strpos($script, '%7C') !== FALSE) {
      @(list($script, $attach_name) = explode('%7C', $script));
    }
    if (!UrlHelper::isExternal($script)) {
      _eu_cookie_compliance_convert_relative_uri($script);
      $script = '/' . $script;
    }
    if (!empty($attachments['#attached']['html_head'])) {

      // html_head is a 2 level array.
      foreach ($attachments['#attached']['html_head'] as &$head_section) {
        array_walk($head_section, function (&$html_head, $key) use ($script) {

          // Filter only script tags.
          if (!empty($html_head['#attributes']['src']) && !empty($html_head['#tag']) && $html_head['#tag'] === 'script') {

            // Remove possible querystring.
            $head_script = $html_head['#attributes']['src'];
            $query_string_pos = strpos($head_script, '?');
            if ($query_string_pos !== FALSE) {
              $head_script = substr($head_script, 0, $query_string_pos);
            }
            if ($head_script === $script) {
              $html_head['#access'] = FALSE;
            }
          }
        });
      }
    }
  }
}