From 22a2e51144247ae94e31e5c7d7a44880ff0c0c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=20=F0=9F=A4=98=20Shindelar?= <13118-eojthebrave@users.noreply.drupalcode.org> Date: Tue, 2 Apr 2024 10:38:38 +0000 Subject: [PATCH] [#3436455] Fix insert_media after upgrades to Insert to make it work with CKEditor. --- insert.api.php | 3 +- insert.module | 9 +-- js/Inserter.js | 2 +- modules/insert_media/insert_media.module | 76 +++++++++++++----------- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/insert.api.php b/insert.api.php index ea8dce4..a9110ab 100644 --- a/insert.api.php +++ b/insert.api.php @@ -108,9 +108,10 @@ function hook_insert_variables($insertType, array &$element, $styleName, &$vars) * * @param string $styleName * @param array $vars + * @param array $insertElement * * @return array */ -function hook_insert_render($styleName, array $vars) { +function hook_insert_render($styleName, array $vars, array $insertElement) { return []; } diff --git a/insert.module b/insert.module index 65fada0..162f4a1 100644 --- a/insert.module +++ b/insert.module @@ -216,7 +216,7 @@ function _insert_field_process(array $element, FormStateInterface $form_state, a $insertElement['insert']['insert_templates'][$styleName] = [ '#type' => 'hidden', - '#value' => _insert_render($styleName, $vars), + '#value' => _insert_render($styleName, $vars, $insertElement), '#id' => $vars['id'] . '-insert-template-' . str_replace('_', '-', $styleName), '#name' => $element['#name'] . '[insert_template][' . $styleName . ']', '#attributes' => ['class' => ['insert-template']], @@ -373,12 +373,13 @@ function _insert_get_style_classes(array $styles) { * * @param string $styleName * @param array $vars + * @param array $insertElement * * @return string */ -function _insert_render($styleName, array $vars) { +function _insert_render($styleName, array $vars, array $insertElement) { $rendered - = \Drupal::moduleHandler()->invokeAll('insert_render', [$styleName, $vars]); + = \Drupal::moduleHandler()->invokeAll('insert_render', [$styleName, $vars, $insertElement]); if (count($rendered)) { $rendered = $rendered[0]; @@ -1048,4 +1049,4 @@ function insert_migrate_prepare_row(Row $row, MigrateSourceInterface $source, Mi } $insert_settings = $row->getSourceProperty('widget/settings'); $row->setSourceProperty('insert_config', MigrateInsertWidgetSettings::getInsertWidgetSettings($insert_settings)); -} \ No newline at end of file +} diff --git a/js/Inserter.js b/js/Inserter.js index 58cb109..ec55303 100644 --- a/js/Inserter.js +++ b/js/Inserter.js @@ -114,4 +114,4 @@ } } -})(Drupal); \ No newline at end of file +})(Drupal); diff --git a/modules/insert_media/insert_media.module b/modules/insert_media/insert_media.module index 58692f8..18f8935 100644 --- a/modules/insert_media/insert_media.module +++ b/modules/insert_media/insert_media.module @@ -107,6 +107,46 @@ function _insert_media_settings_form(array $settings) { return $element; } +/** + * Implements hook_insert_styles(). + */ +function insert_media_insert_styles($insertType) { + if ($insertType !== INSERT_TYPE_MEDIA) { + return []; + } + + $insertStyles = []; + + foreach (_insert_media_get_view_modes() as $id => $label) { + $insertStyles[$id] = [ + 'label' => $label, + ]; + } + + return $insertStyles; +} + +/** + * Implements hook_insert_variables(). + */ +function insert_media_insert_variables($insertType, array &$element, $styleName, &$vars) { + if ($insertType === INSERT_TYPE_MEDIA) { + $vars['media_entity'] = $element['selection'][0]['rendered_entity']['#media']; + $element['#name'] = 'media_ ' . $vars['media_entity']->id(); + } +} + +/** + * Implements hook_insert_render(). + */ +function insert_media_insert_render($styleName, array $vars, $insertElement) { + if ($vars['field_type'] === INSERT_TYPE_MEDIA && isset($vars['media_entity'])) { + /** @var \Drupal\media\MediaInterface $media */ + $media = $insertElement['rendered_entity']['#media']; + return ['<drupal-media data-entity-type="media" data-view-mode="' . $vars['style_name'] .'" data-entity-uuid="' . $media->uuid() . '"></drupal-media>']; + } +} + /** * Implements hook_insert_process(). */ @@ -128,43 +168,7 @@ function insert_media_insert_process(&$insertType, array &$element) { continue; } - $media = Media::load($element['selection'][$key]['target_id']['#value']); $selectionElement['insert'] = $element['insert']; - - $selectionElement['insert']['templates'] = [ - '#type' => 'container', - '#attributes' => ['class' => ['insert-templates']], - ]; - - $options = []; - - foreach ($settings['view_modes'] as $viewMode => $viewModeLabel) { - if ($viewModeLabel === 0) { - continue; - } - - $selectionElement['insert']['templates'][$viewMode] = [ - '#type' => 'hidden', - '#name' => 'template[' . $viewMode . ']', - '#value' => '<drupal-media data-entity-type="media" data-view-mode="' . $viewMode .'" data-entity-uuid="' . $media->uuid() . '"></drupal-media>', - ]; - - $options[$viewMode] = $viewModeLabel; - } - - if (count($options) === 1) { - $selectionElement['insert']['view_modes'] = [ - '#type' => 'hidden', - '#value' => array_keys($options)[0], - ]; - } - else { - $selectionElement['insert']['view_modes'] = [ - '#type' => 'select', - '#options' => $options, - '#default_value' => $settings['default'], - ]; - } } $element['#attached']['library'][] = 'insert_media/insert_media'; -- GitLab