function HTMLRestrictions::findElementsOverridingGloballyDisallowedAttributes
Same name in other branches
- 9 core/modules/ckeditor5/src/HTMLRestrictions.php \Drupal\ckeditor5\HTMLRestrictions::findElementsOverridingGloballyDisallowedAttributes()
- 11.x core/modules/ckeditor5/src/HTMLRestrictions.php \Drupal\ckeditor5\HTMLRestrictions::findElementsOverridingGloballyDisallowedAttributes()
Finds elements overriding globally disallowed attributes.
Parameters
array $elements: The allowed elements.
Return value
null|array NULL if no conflict is found, an array containing otherwise, containing:
- the globally disallowed attribute restrictions
- the elements overriding globally disallowed attributes
2 calls to HTMLRestrictions::findElementsOverridingGloballyDisallowedAttributes()
- HTMLRestrictions::fromObjectWithHtmlRestrictions in core/
modules/ ckeditor5/ src/ HTMLRestrictions.php - Constructs a set of HTML restrictions matching the given object.
- HTMLRestrictions::validateAllowedRestrictionsPhase5 in core/
modules/ ckeditor5/ src/ HTMLRestrictions.php - Validates allowed elements — phase 5: disallowed attribute overrides.
File
-
core/
modules/ ckeditor5/ src/ HTMLRestrictions.php, line 339
Class
- HTMLRestrictions
- Represents a set of HTML restrictions.
Namespace
Drupal\ckeditor5Code
private static function findElementsOverridingGloballyDisallowedAttributes(array $elements) : ?array {
// Find the globally disallowed attributes.
// For example: `['*' => ['style' => FALSE, 'foo' => TRUE, 'bar' => FALSE]`
// has two globally disallowed attributes, the code below will extract
// `['*' => ['style' => FALSE, 'bar' => FALSE']]`.
$globally_disallowed_attribute_restrictions = !array_key_exists('*', $elements) ? [] : array_filter($elements['*'], function ($global_attribute_restrictions) : bool {
return $global_attribute_restrictions === FALSE;
});
if (empty($globally_disallowed_attribute_restrictions)) {
// No conflict possible.
return NULL;
}
// The elements which could potentially have a conflicting override.
$elements_with_attribute_level_restrictions = array_filter($elements, function ($attribute_restrictions, string $attribute_name) : bool {
return is_array($attribute_restrictions) && $attribute_name !== '*';
}, ARRAY_FILTER_USE_BOTH);
if (empty($elements_with_attribute_level_restrictions)) {
// No conflict possible.
return NULL;
}
// Construct a HTMLRestrictions object containing just the elements that are
// potentially overriding globally disallowed attributes.
// For example: `['p' => ['style' => TRUE]]`.
$potentially_overriding = new self($elements_with_attribute_level_restrictions);
// Construct a HTMLRestrictions object that contains the globally disallowed
// attribute restrictions, but pretends they are allowed. This allows using
// ::intersect() to detect a conflict.
$conflicting_restrictions = new self(array_fill_keys(array_keys($elements_with_attribute_level_restrictions), array_fill_keys(array_keys($globally_disallowed_attribute_restrictions), TRUE)));
// When there is a non-empty intersection at the attribute level, an
// override of a globally disallowed attribute was found.
$conflict = $potentially_overriding->intersect($conflicting_restrictions);
$elements_overriding_globally_disallowed_attributes = array_filter($conflict->getAllowedElements());
// No conflict found.
if (empty($elements_overriding_globally_disallowed_attributes)) {
return NULL;
}
return [
$globally_disallowed_attribute_restrictions,
$elements_overriding_globally_disallowed_attributes,
];
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.