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