You are here

panopoly_media.install in Panopoly 8.2

Install hooks for Panopoly Media.

File

modules/panopoly/panopoly_media/panopoly_media.install
View source
<?php

/**
 * @file
 * Install hooks for Panopoly Media.
 */
use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
use Drupal\Core\Config\FileStorage;
use Drupal\panopoly_media\Update\ContentModelUpdater;
use Drupal\system\Entity\Action;

/**
 * Implements hook_install().
 */
function panopoly_media_install() {
  _panopoly_media_set_delete_config();
}

/**
 * Adds the configuration entity for the file delete action.
 */
function _panopoly_media_set_delete_config() {
  if ($action = Action::load('panopoly_media_file_delete_action')) {
    return;
  }
  $action = Action::create([
    'langcode' => 'en',
    'status' => TRUE,
    'dependencies' => [
      'module' => [
        'file',
        'panopoly_media',
      ],
    ],
    'id' => 'panopoly_media_file_delete_action',
    'label' => 'Delete file',
    'type' => 'file',
    'plugin' => 'panopoly_media_file_delete_action',
    "configuration" => [],
  ]);
  $action
    ->save();
}

/**
 * Set WYSIWYG embed button icon.
 */
function panopoly_media_update_8201() {

  // We no longer set the embed button in this way.
}

/**
 * Enable Inline Entity Form dependency.
 */
function panopoly_media_update_8202() {
  \Drupal::service('module_installer')
    ->install([
    'inline_entity_form',
  ]);
}

/**
 * Add file delete action configuration.
 */
function panopoly_media_update_8203() {
  _panopoly_media_set_delete_config();
}

/**
 * Switch embed display modes to use responsive image styles.
 */
function panopoly_media_update_8204() {
  $options = [
    'media.image.embed_large' => [
      'type' => 'image',
      'settings' => [
        'image_style' => '',
      ],
    ],
    'media.image.embed_medium' => [
      'type' => 'responsive_image',
      'settings' => [
        'responsive_image_style' => 'panopoly_images_quarter',
      ],
    ],
    'media.image.embed_small' => [
      'type' => 'responsive_image',
      'settings' => [
        'responsive_image_style' => 'panopoly_images_thumbnail',
      ],
    ],
  ];

  /** @var \Drupal\Core\Entity\Display\EntityViewDisplayInterface[] $displays */
  $displays = Drupal::entityTypeManager()
    ->getStorage('entity_view_display')
    ->loadMultiple(array_keys($options));
  foreach ($displays as $display) {
    $display
      ->setComponent('field_media_image', $options[$display
      ->id()])
      ->save();
  }
}

/**
 * Media content model conversion.
 */
function panopoly_media_update_8205(&$context) {
  $updater = new ContentModelUpdater();

  // Set state first time through.
  if (empty($context['sandbox']['state'])) {
    $context['sandbox']['state'] = 'init';
  }
  $context['#finished'] = 0;

  // Update data.
  switch ($context['sandbox']['state']) {
    case 'init':
      $context['message'] = 'Updating config';
      $updater
        ->init();
      $context['sandbox']['state'] = 'convert_fields';
      break;
    case 'convert_fields':
      $context['message'] = 'Converting media reference fields';
      $updater
        ->convertFields();
      $context['sandbox']['state'] = 'convert_entities';
      break;
    case 'convert_entities':
      $context['message'] = 'Converting media entities';
      $context['#finished'] = $updater
        ->convertMedia($context);

      // Clean up when done.
      if ($context['#finished'] == 1) {
        $updater
          ->cleanup();
      }
      break;
  }
}

/**
 * Update config to use our custom entity browser view.
 */
function panopoly_media_update_8206() {

  // Import new entity browser view.
  $view_config_name = 'views.view.panopoly_media_browser';
  $config_path = drupal_get_path('module', 'panopoly_media') . '/config/install';
  $source = new FileStorage($config_path);

  /** @var \Drupal\Core\Config\StorageInterface $config_storage */
  $config_storage = \Drupal::service('config.storage');
  $config_storage
    ->write($view_config_name, $source
    ->read($view_config_name));

  /** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
  $config_factory = \Drupal::service('config.factory');

  // Update our two entity browsers to use it.
  $media_browsers_to_update = [
    'entity_browser.browser.panopoly_media_field_media_browser' => '828212e6-5506-4f23-a333-4b56a08ac85b',
    'entity_browser.browser.panopoly_media_wysiwyg_media_browser' => 'a1ed5dca-2adc-478d-a9b0-014a7df6bb6e',
  ];
  foreach ($media_browsers_to_update as $config_name => $widget_uuid) {
    $config = $config_factory
      ->getEditable($config_name);

    // Only update this value if it hasn't been changed by the site admin.
    if ($config
      ->get("widgets.{$widget_uuid}.settings.view") === 'media_entity_browser') {
      $config
        ->set("widgets.{$widget_uuid}.settings.view", 'panopoly_media_browser');
      $config
        ->save();
    }
  }

  // Update the media entity browser thumbnail image style.
  $config = $config_factory
    ->getEditable('image.style.panopoly_media_entity_browser_thumbnail');
  $data = $config
    ->getRawData();
  if ($data['label'] === 'Entity Browser Thumbnail') {
    $data['label'] = 'Media Entity Browser Thumbnail';
  }
  if (isset($data['effects']['384c8fe8-d61d-42df-a0ac-f006a5f9b232'])) {
    unset($data['effects']['384c8fe8-d61d-42df-a0ac-f006a5f9b232']);
    $data['effects']['793bbd62-5859-4049-8b02-967dd91084c4'] = [
      'uuid' => '793bbd62-5859-4049-8b02-967dd91084c4',
      'id' => 'image_scale_and_crop',
      'weight' => 1,
      'data' => [
        'width' => 350,
        'height' => 200,
        'anchor' => 'center-center',
      ],
    ];
  }
  $config
    ->setData($data);
  $config
    ->save();
}

/**
 * Add missing embed displays for File and Remote video.
 */
function panopoly_media_update_8207() {
  $new_config_entities = [
    'core.entity_view_display.media.panopoly_media_file.embed_medium',
    'core.entity_view_display.media.panopoly_media_file.embed_small',
    'core.entity_view_display.media.panopoly_media_remote_video.embed_medium',
    'core.entity_view_display.media.panopoly_media_remote_video.embed_small',
  ];
  foreach ($new_config_entities as $config_name) {
    $config_path = drupal_get_path('module', 'panopoly_media') . '/config/install';
    $source = new FileStorage($config_path);

    /** @var \Drupal\Core\Config\StorageInterface $config_storage */
    $config_storage = \Drupal::service('config.storage');
    $config_storage
      ->write($config_name, $source
      ->read($config_name));
  }
}

/**
 * Add video type block.
 */
function panopoly_media_update_8208() {
  $new_config_entities = [
    'block_content.type.video',
    'entity_browser.browser.panopoly_media_field_video_browser',
    'field.storage.block_content.field_panopoly_media_video_video',
    'field.field.block_content.video.field_panopoly_media_video_video',
    'core.entity_form_display.block_content.video.default',
    'core.entity_view_display.block_content.video.default',
  ];

  /** @var \Drupal\Core\Config\StorageInterface $config_storage */
  $config_storage = \Drupal::service('config.storage');

  /** @var \Drupal\Core\Config\ConfigManagerInterface $config_manager */
  $config_manager = \Drupal::service('config.manager');

  /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
  $entity_type_manager = \Drupal::entityTypeManager();
  foreach ($new_config_entities as $config_name) {
    if ($config_storage
      ->read($config_name)) {

      // If this config already exists, skip it.
      continue;
    }
    $config_path = drupal_get_path('module', 'panopoly_media') . '/config/install';
    $source = new FileStorage($config_path);
    $config_data = $source
      ->read($config_name);
    $type = $config_manager
      ->getEntityTypeIdByName($config_name);
    $entity_storage = $entity_type_manager
      ->getStorage($type);
    if ($entity_storage instanceof ConfigEntityStorageInterface) {
      $entity = $entity_storage
        ->createFromStorageRecord($config_data);
      $entity
        ->save();
    }
  }
}

Functions

Namesort descending Description
panopoly_media_install Implements hook_install().
panopoly_media_update_8201 Set WYSIWYG embed button icon.
panopoly_media_update_8202 Enable Inline Entity Form dependency.
panopoly_media_update_8203 Add file delete action configuration.
panopoly_media_update_8204 Switch embed display modes to use responsive image styles.
panopoly_media_update_8205 Media content model conversion.
panopoly_media_update_8206 Update config to use our custom entity browser view.
panopoly_media_update_8207 Add missing embed displays for File and Remote video.
panopoly_media_update_8208 Add video type block.
_panopoly_media_set_delete_config Adds the configuration entity for the file delete action.