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;
}
}
});
}
}
}
}