The title attribute with value "View profile" on profile links is
not necessary as the user's name on the link itself is sufficient
to convey the purpose of the link.
The `viewfullnames` capability check was overeager in restricting
the inclusion of user first and lastname properties in the returned
structure. Especially given that the same data was almost always
present in the fullname property of the same structure.
Some references can remain, and others should remain until we drop
support for YUI, or Atto is no longer supported in the plugins database.
Note: Some reference to Atto will remain until such a time as it is no
longer possible to support the editor via the plugins database.
- .custom-check is now .form-check.
- .custom-check.custom-switch is now .form-check.form-switch.
- .custom-select is now .form-select.
- .custom-file and .form-file have been replaced by custom styles on top of .form-control.
- .custom-range is now .form-range.
- Dropped .input-group-append and .input-group-prepend. You can now just add buttons
and .input-group-text as direct children of the input groups.
Where course entity select elements theme, language and calendar are
defined we should prepend with "Do not force" in order to match the
interface when editing the same fields.
The select filter has been updated to ensure it supports empty values
when switched to simplified version (a0ef4bb8) as well as improving
validation to ensure only present options can be used for filtering.
This allows filter fields to use client-side form validation attributes to check for valid values,
and adds a validation() method for filters to implement custom validation conditions.
In the event of a validation failure, the invalid filters will not be applied, and the URL will
not be updated to avoid user sharing a URL that will generate an error. Filter conditions should
still implement server-side validation and throw exceptions to avoid erroneous values being
manually inserted into the URL.
It's possible the first returned field contains a null value, while
subsequent fields may be non-null - in this case we should still
populate the fullname in column callback.