Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ableplayer.install 5.98 KiB
<?php

/**
 * @file
 * Install file for Able Player.
 */

use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;

/**
 * Implements hook_install().
 */
function ableplayer_install() {
  $fields = _ableplayer_fields();
  $remote_video_fields = _ableplayer_remote_video_fields();
  $bundles = \Drupal::entityTypeManager()->getListBuilder('media_type')->load();

  foreach ($bundles as $bundle) {
    if (!in_array($bundle->get('source'), ['video_file', 'audio_file'])) {
      continue;
    }

    foreach ($fields as $field) {
      $storage = FieldStorageConfig::loadByName('media', $field['storage']['field_name']);

      if (is_null($storage)) {
        $storage = FieldStorageConfig::create($field['storage']);
        $storage->save();
      }

      $field['instance']['bundle'] = $bundle->get('id');
      $field['instance']['storage'] = $storage;

      if (is_null(FieldConfig::loadByName('media', $bundle->get('id'), $field['storage']['field_name']))) {
        $instance = FieldConfig::create($field['instance']);
        $instance->save();
      }

      $form = \Drupal::entityTypeManager()->getStorage('entity_form_display')->load('media.' . $bundle->get('id') . '.default');
      if (!empty($form)) {
        $options = [
          'weight' => $form->getHighestWeight() - 3,
        ];

        $form->setComponent($field['storage']['field_name'], $options)->save();
      }
      else {
        \Drupal::logger('ableplayer')->warning(t('Skipping %field due to missing entity form.', [
          '%field' => $bundle->get('id'),
        ]));
      }
    }
  }

  foreach ($bundles as $bundle) {
    if (!in_array($bundle->get('source'), ['oembed:video'])) {
      continue;
    }

    foreach ($remote_video_fields as $remote_video_field) {
      $storage = FieldStorageConfig::loadByName('media', $remote_video_field['storage']['field_name']);

      if (is_null($storage)) {
        $storage = FieldStorageConfig::create($remote_video_field['storage']);
        $storage->save();
      }

      $remote_video_field['instance']['bundle'] = $bundle->get('id');
      $remote_video_field['instance']['storage'] = $storage;

      if (is_null(FieldConfig::loadByName('media', $bundle->get('id'), $remote_video_field['storage']['field_name']))) {
        $instance = FieldConfig::create($remote_video_field['instance']);
        $instance->save();
      }

      $form = \Drupal::entityTypeManager()->getStorage('entity_form_display')->load('media.' . $bundle->get('id') . '.default');
      if (!empty($form)) {
        $form->setComponent($remote_video_field['storage']['field_name'])->save();
      }
      else {
        \Drupal::logger('ableplayer')->warning(t('Skipping %field due to missing entity form.', [
          '%field' => $bundle->get('id'),
        ]));
      }
    }
  }

  $factory = \Drupal::configFactory();

  $video_entity_form_display = $factory->getEditable('core.entity_form_display.media.video.default');
  $video_entity_form_display->set('content.field_ableplayer_media_caption.type', 'media_library_widget');
  $video_entity_form_display->save();

  $video_entity_view_display = $factory->getEditable('core.entity_view_display.media.video.default');
  $video_entity_view_display->set('content.field_media_video_file.type', 'ableplayer_video');
  $video_entity_view_display->set('content.field_media_video_file.settings', [
    'controls' => FALSE,
    'autoplay' => FALSE,
    'loop' => FALSE,
    'multiple_file_display_type' => 'tags',
  ]);
  $video_entity_view_display->save();
}

/**
 * Adds support for swappable audio description.
 *
 * If videos are hosted on YouTube or Vimeo.
 */
function ableplayer_update_9001() {
  $remote_video_fields = _ableplayer_remote_video_fields();
  $bundles = \Drupal::entityTypeManager()->getListBuilder('media_type')->load();

  foreach ($bundles as $bundle) {
    if (!in_array($bundle->get('source'), ['oembed:video'])) {
      continue;
    }

    foreach ($remote_video_fields as $remote_video_field) {
      $storage = FieldStorageConfig::loadByName('media', $remote_video_field['storage']['field_name']);

      if (is_null($storage)) {
        $storage = FieldStorageConfig::create($remote_video_field['storage']);
        $storage->save();
      }

      $remote_video_field['instance']['bundle'] = $bundle->get('id');
      $remote_video_field['instance']['storage'] = $storage;

      if (is_null(FieldConfig::loadByName('media', $bundle->get('id'), $remote_video_field['storage']['field_name']))) {
        $instance = FieldConfig::create($remote_video_field['instance']);
        $instance->save();
      }

      $form = \Drupal::entityTypeManager()->getStorage('entity_form_display')->load('media.' . $bundle->get('id') . '.default');
      if (!empty($form)) {
        $weight = $form->getHighestWeight() - 1;
        $options = [
          'weight' => $weight,
        ];
        $form->setComponent($remote_video_field['storage']['field_name'], $options)->save();
      }
      else {
        \Drupal::logger('ableplayer')->warning(t('Skipping %field due to missing entity form.', [
          '%field' => $bundle->get('id'),
        ]));
      }
    }
  }
}

/**
 * Adjust weight of audio description field.
 */
function ableplayer_update_9002() {
  $remote_video_fields = _ableplayer_remote_video_fields();
  $bundles = \Drupal::entityTypeManager()->getListBuilder('media_type')->load();

  foreach ($bundles as $bundle) {
    if (!in_array($bundle->get('source'), ['oembed:video'])) {
      continue;
    }

    foreach ($remote_video_fields as $remote_video_field) {
      $form = \Drupal::entityTypeManager()->getStorage('entity_form_display')->load('media.' . $bundle->get('id') . '.default');

      if (!empty($form)) {
        $options = [
          'weight' => $form->getHighestWeight() - 3,
        ];

        $form->setComponent($remote_video_field['storage']['field_name'], $options)->save();
      }
      else {
        \Drupal::logger('ableplayer')->warning(t('Skipping %field due to missing entity form.', [
          '%field' => $bundle->get('id'),
        ]));
      }
    }
  }
}