function ckeditor_filter_format_edit_form_validate

Validate callback to ensure the DrupalMediaLibrary button can work correctly.

2 string references to 'ckeditor_filter_format_edit_form_validate'
ckeditor_form_filter_format_add_form_alter in core/modules/ckeditor/ckeditor.module
Implements hook_form_FORM_ID_alter().
ckeditor_form_filter_format_edit_form_alter in core/modules/ckeditor/ckeditor.module
Implements hook_form_FORM_ID_alter().

File

core/modules/ckeditor/ckeditor.module, line 214

Code

function ckeditor_filter_format_edit_form_validate($form, FormStateInterface $form_state) {
    if ($form_state->getTriggeringElement()['#name'] !== 'op') {
        return;
    }
    // The "DrupalMediaLibrary" button is for the CKEditor text editor.
    if ($form_state->getValue([
        'editor',
        'editor',
    ]) !== 'ckeditor') {
        return;
    }
    $button_group_path = [
        'editor',
        'settings',
        'toolbar',
        'button_groups',
    ];
    if ($button_groups = $form_state->getValue($button_group_path)) {
        $buttons = [];
        $button_groups = Json::decode($button_groups);
        foreach ($button_groups as $button_row) {
            foreach ($button_row as $button_group) {
                $buttons = array_merge($buttons, array_values($button_group['items']));
            }
        }
        $get_filter_label = function ($filter_plugin_id) use ($form) {
            return (string) $form['filters']['order'][$filter_plugin_id]['filter']['#markup'];
        };
        if (in_array('DrupalMediaLibrary', $buttons, TRUE)) {
            $media_embed_enabled = $form_state->getValue([
                'filters',
                'media_embed',
                'status',
            ]);
            if (!$media_embed_enabled) {
                $error_message = new TranslatableMarkup('The %media-embed-filter-label filter must be enabled to use the %drupal-media-library-button button.', [
                    '%media-embed-filter-label' => $get_filter_label('media_embed'),
                    '%drupal-media-library-button' => new TranslatableMarkup('Insert from Media Library'),
                ]);
                $form_state->setErrorByName('filters', $error_message);
            }
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.