Version 1
[yaffs-website] / web / modules / contrib / video_embed_field / modules / video_embed_media / src / UpgradeManager.php
diff --git a/web/modules/contrib/video_embed_field/modules/video_embed_media/src/UpgradeManager.php b/web/modules/contrib/video_embed_field/modules/video_embed_media/src/UpgradeManager.php
new file mode 100644 (file)
index 0000000..4c8979b
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+namespace Drupal\video_embed_media;
+
+use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\media_entity\Entity\Media;
+use Drupal\media_entity\Entity\MediaBundle;
+use Drupal\video_embed_media\Plugin\MediaEntity\Type\VideoEmbedField;
+
+/**
+ * Upgrades existing media_entity_embedded_video bundles.
+ */
+class UpgradeManager implements UpgradeManagerInterface {
+
+  /**
+   * The entity query factory.
+   *
+   * @var \Drupal\Core\Entity\Query\QueryFactory
+   */
+  protected $entityQuery;
+
+  /**
+   * UpgradeManager constructor.
+   *
+   * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query
+   *   The entity query service.
+   */
+  public function __construct(QueryFactory $entity_query) {
+    $this->entityQuery = $entity_query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function upgrade() {
+    $entities = $this->entityQuery->get('media_bundle')->condition('type', 'embeddable_video')->execute();
+    foreach ($entities as $entity) {
+      $bundle = MediaBundle::load($entity);
+      $this->upgradeBundle($bundle);
+    }
+  }
+
+  /**
+   * Upgrade a whole bundle to use video_embed_field.
+   *
+   * @param \Drupal\media_entity\Entity\MediaBundle $bundle
+   *   The media bundle object.
+   */
+  protected function upgradeBundle(MediaBundle $bundle) {
+    // Create a video embed field on the media bundle.
+    VideoEmbedField::createVideoEmbedField($bundle->id());
+    // Load and update all of the existing media entities.
+    $media_entities = $this->entityQuery->get('media')->condition('bundle', $bundle->id())->execute();
+    foreach ($media_entities as $media_entity) {
+      $media_entity = Media::load($media_entity);
+      $this->upgradeEntity($media_entity, $bundle->getTypeConfiguration());
+    }
+    // Update the media bundle type.
+    $bundle->type = 'video_embed_field';
+    $bundle->save();
+  }
+
+  /**
+   * Upgrade an individual media entity.
+   *
+   * @param \Drupal\media_entity\Entity\Media $media_entity
+   *   The media entity.
+   * @param array $type_configuration
+   *   The media type configuration.
+   */
+  protected function upgradeEntity(Media $media_entity, $type_configuration) {
+    // Copy the existing media bundle field value to the new field value.
+    $existing_url_field = $media_entity->{$type_configuration['source_field']}->getValue();
+    $existing_url = isset($existing_url_field[0]['uri']) ? $existing_url_field[0]['uri'] : $existing_url_field[0]['value'];
+    $media_entity->{VideoEmbedField::VIDEO_EMBED_FIELD_DEFAULT_NAME} = [['value' => $existing_url]];
+    $media_entity->save();
+  }
+
+}