function ckeditor5_editor_presave
Implements hook_ENTITY_TYPE_presave() for editor entities.
File
-
core/
modules/ ckeditor5/ ckeditor5.module, line 631
Code
function ckeditor5_editor_presave(EditorInterface $editor) {
if ($editor->getEditor() === 'ckeditor5') {
$settings = $editor->getSettings();
// @see ckeditor5_post_update_code_block()
if (in_array('codeBlock', $settings['toolbar']['items'], TRUE) && !isset($settings['plugins']['ckeditor5_codeBlock'])) {
// @see \Drupal\ckeditor5\Plugin\CKEditor5Plugin\CodeBlock::defaultConfiguration()
$settings['plugins']['ckeditor5_codeBlock'] = [
'languages' => [
[
'label' => 'Plain text',
'language' => 'plaintext',
],
[
'label' => 'C',
'language' => 'c',
],
[
'label' => 'C#',
'language' => 'cs',
],
[
'label' => 'C++',
'language' => 'cpp',
],
[
'label' => 'CSS',
'language' => 'css',
],
[
'label' => 'Diff',
'language' => 'diff',
],
[
'label' => 'HTML',
'language' => 'html',
],
[
'label' => 'Java',
'language' => 'java',
],
[
'label' => 'JavaScript',
'language' => 'javascript',
],
[
'label' => 'PHP',
'language' => 'php',
],
[
'label' => 'Python',
'language' => 'python',
],
[
'label' => 'Ruby',
'language' => 'ruby',
],
[
'label' => 'TypeScript',
'language' => 'typescript',
],
[
'label' => 'XML',
'language' => 'xml',
],
],
];
}
// @see ckeditor5_post_update_list_multiblock()
if (array_key_exists('ckeditor5_list', $settings['plugins']) && !array_key_exists('properties', $settings['plugins']['ckeditor5_list'])) {
// Update to the new config structure.
$settings['plugins']['ckeditor5_list'] = [
'properties' => $settings['plugins']['ckeditor5_list'],
'multiBlock' => TRUE,
];
}
// @see ckeditor5_post_update_list_start_reversed()
if (in_array('numberedList', $settings['toolbar']['items'], TRUE) && array_key_exists('ckeditor5_sourceEditing', $settings['plugins'])) {
$source_edited = HTMLRestrictions::fromString(implode(' ', $settings['plugins']['ckeditor5_sourceEditing']['allowed_tags']));
$format_restrictions = HTMLRestrictions::fromTextFormat($editor->getFilterFormat());
// If <ol start> is not allowed through Source Editing (the only way it
// could possibly be supported until now), and it is not an unrestricted
// text format (such as "Full HTML"), then set the new "startIndex"
// setting for the List plugin to false.
// Except … that this update path was added too late, and many sites have
// in the meantime edited their text editor configuration through the UI,
// in which case they may already have set it. If that is the case: do not
// override it.
$ol_start = HTMLRestrictions::fromString('<ol start>');
if (!array_key_exists('ckeditor5_list', $settings['plugins']) || !array_key_exists('startIndex', $settings['plugins']['ckeditor5_list']['properties'])) {
$settings['plugins']['ckeditor5_list']['properties']['startIndex'] = $ol_start->diff($source_edited)
->allowsNothing() || $format_restrictions->isUnrestricted();
}
// Same for <ol reversed> and "reversed".
$ol_reversed = HTMLRestrictions::fromString('<ol reversed>');
if (!array_key_exists('ckeditor5_list', $settings['plugins']) || !array_key_exists('reversed', $settings['plugins']['ckeditor5_list']['properties'])) {
$settings['plugins']['ckeditor5_list']['properties']['reversed'] = $ol_reversed->diff($source_edited)
->allowsNothing() || $format_restrictions->isUnrestricted();
}
// Match the sort order in ListPlugin::defaultConfiguration().
ksort($settings['plugins']['ckeditor5_list']['properties']);
// Update the Source Editing configuration too.
$settings['plugins']['ckeditor5_sourceEditing']['allowed_tags'] = $source_edited->diff($ol_start)
->diff($ol_reversed)
->toCKEditor5ElementsArray();
}
$editor->setSettings($settings);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.