. namespace core\hook\output; /** * Class before_html_attributes * * @package core * @copyright 2024 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @property-read \renderer_base $renderer The page renderer object * @property array $attributes The list of HTML attributes to be added to the tag. */ #[\core\attribute\tags('output')] #[\core\attribute\label('Allows plugins to add, remove or modify any attributes of the html tag.')] #[\core\attribute\hook\replaces_callbacks('add_htmlattributes')] final class before_html_attributes { /** * Constructor for the before_html_attributes hook. * * @param \renderer_base $renderer The page renderer object * @param array $attributes The list of HTML attributes initially on the tag */ public function __construct( /** @var \renderer_base The page renderer */ public readonly \renderer_base $renderer, /** @var array The list of HTML attributes initially on the tag */ private array $attributes = [], ) { } /** * Add an HTML attribute to the list. * * @param string $name * @param string $value */ public function add_attribute(string $name, string $value): void { $this->attributes[$name] = $value; } /** * Get the list of attributes. * * @return array */ public function get_attributes(): array { return $this->attributes; } /** * Remove an HTML attribute from the list. * * @param string $name */ public function remove_attribute(string $name): void { unset($this->attributes[$name]); } /** * Process legacy callbacks. */ public function process_legacy_callbacks(): void { // Legacy callback 'add_htmlattributes' is deprecated since Moodle 4.4. // This function should return an array of html attribute names => values. $pluginswithfunction = get_plugins_with_function( function: 'add_htmlattributes', migratedtohook: true, ); foreach ($pluginswithfunction as $plugins) { foreach ($plugins as $function) { $newattrs = $function(); unset($newattrs['dir']); unset($newattrs['lang']); unset($newattrs['xmlns']); unset($newattrs['xml:lang']); foreach ($newattrs as $name => $value) { $this->add_attribute($name, $value); } } } } }