public static function CKEditor5::validatePair in Drupal 10
Validates a Text Editor + Text Format pair.
Drupal is designed to only verify schema conformity (and validation) of individual config entities. The Text Editor module layers a tightly coupled Editor entity on top of the Filter module's FilterFormat config entity. This inextricable coupling is clearly visible in EditorInterface: \Drupal\editor\EditorInterface::getFilterFormat(). They are always paired. Because not every text editor is guaranteed to be compatible with every text format, the pair must be validated.
Parameters
\Drupal\editor\EditorInterface $text_editor: The paired text editor to validate.
\Drupal\filter\FilterFormatInterface $text_format: The paired text format to validate.
bool $all_compatibility_problems: Get all compatibility problems (default) or only fundamental ones.
Return value
\Symfony\Component\Validator\ConstraintViolationListInterface The validation constraint violations.
Throws
\InvalidArgumentException Thrown when the text editor is not configured to use CKEditor 5.
See also
\Drupal\editor\EditorInterface::getFilterFormat()
20 calls to CKEditor5::validatePair()
- CKEditor5::validateConfigurationForm in core/
modules/ ckeditor5/ src/ Plugin/ Editor/ CKEditor5.php - CKEditor5::validateSwitchingToCKEditor5 in core/
modules/ ckeditor5/ src/ Plugin/ Editor/ CKEditor5.php - Validate callback to inform the user of CKEditor 5 compatibility problems.
- CKEditor5CKEditor4Compatibility::setUp in core/
modules/ ckeditor5/ tests/ src/ FunctionalJavascript/ CKEditor5CKEditor4Compatibility.php - CKEditor5DialogTest::testCKEditor5FocusInTooltipsInDialog in core/
modules/ ckeditor5/ tests/ src/ FunctionalJavascript/ CKEditor5DialogTest.php - Tests if CKEditor 5 tooltips can be interacted with in dialogs.
- CKEditor5IntegrationTest::setUp in core/
modules/ quickedit/ tests/ src/ FunctionalJavascript/ CKEditor5IntegrationTest.php
File
- core/
modules/ ckeditor5/ src/ Plugin/ Editor/ CKEditor5.php, line 212
Class
- CKEditor5
- Defines a CKEditor 5-based text editor for Drupal.
Namespace
Drupal\ckeditor5\Plugin\EditorCode
public static function validatePair(EditorInterface $text_editor, FilterFormatInterface $text_format, bool $all_compatibility_problems = TRUE) : ConstraintViolationListInterface {
if ($text_editor
->getEditor() !== 'ckeditor5') {
throw new \InvalidArgumentException('This text editor is not configured to use CKEditor 5.');
}
$typed_config_manager = \Drupal::getContainer()
->get('config.typed');
$typed_config = $typed_config_manager
->createFromNameAndData('ckeditor5_valid_pair__format_and_editor', [
// A mix of:
// - editor.editor.*.settings — note that "settings" is top-level in
// editor.editor.*, and so it is here, so all validation constraints
// will continue to work fine.
'settings' => $text_editor
->toArray()['settings'],
// - filter.format.*.filters — note that "filters" is top-level in
// filter.format.*, and so it is here, so all validation constraints
// will continue to work fine.
'filters' => $text_format
->toArray()['filters'],
// - editor.editor.*.image_upload — note that "image_upload" is
// top-level in editor.editor.*, and so it is here, so all validation
// constraints will continue to work fine.
'image_upload' => $text_editor
->toArray()['image_upload'],
]);
$violations = $typed_config
->validate();
// Only consider validation constraint violations covering the pair, so not
// irrelevant details such as a PrimitiveTypeConstraint in filter settings,
// which do not affect CKEditor 5 anyway.
foreach ($violations as $i => $violation) {
assert($violation instanceof ConstraintViolation);
if (explode('.', $violation
->getPropertyPath())[0] === 'filters' && is_a($violation
->getConstraint(), PrimitiveTypeConstraint::class)) {
$violations
->remove($i);
}
}
if (!$all_compatibility_problems) {
foreach ($violations as $i => $violation) {
// Remove all violations that are not fundamental — these are at the
// root (property path '').
if ($violation
->getPropertyPath() !== '') {
$violations
->remove($i);
}
}
}
return $violations;
}