You are here

entity_browser.install in Entity Browser 8.2

Same filename and directory in other branches
  1. 8 entity_browser.install

Update hooks for the Entity browser module.

File

entity_browser.install
View source
<?php

/**
 * @file
 * Update hooks for the Entity browser module.
 */

/**
 * Implements hook_requirements().
 */
function entity_browser_requirements($phase) {
  $requirements = [];

  // This branch of Entity Browser shouldn't be used with core < 8.4.x or with
  // media_entity 1.x enabled.
  $incompatible = FALSE;
  if (\Drupal::moduleHandler()
    ->moduleExists('media_entity')) {
    $info = \Drupal::service('extension.list.module')
      ->getExtensionInfo('media_entity');
    if (empty($info['version'])) {

      // If the version being used is -dev, $info['version'] will be empty. Try
      // an alternative method to detect if we are using the 2.x branch in that
      // case.
      if (!file_exists(DRUPAL_ROOT . '/' . drupal_get_path('module', 'media_entity') . '/src/CliService.php')) {
        $incompatible = TRUE;
      }
    }
    elseif (version_compare($info['version'], '8.x-2') < 0) {
      $incompatible = TRUE;
    }
  }
  if ($incompatible) {
    $requirements['entity_browser_media'] = [
      'title' => t('Entity Browser'),
      'value' => t('This branch of Entity Browser is not compatible with the version of Media Entity installed.'),
      'description' => t('This branch of Entity Browser is not compatible with the version of Media Entity installed.'),
      'severity' => REQUIREMENT_ERROR,
    ];
  }
  return $requirements;
}

/**
 * Updates submit text for existing Entity browsers.
 */
function entity_browser_update_8001() {

  /** @var \Drupal\Core\Config\ConfigFactoryInterface $config_factory */
  $config_factory = \Drupal::service('config.factory');
  foreach ($config_factory
    ->listAll('entity_browser.browser') as $name) {
    $entity_browser = $config_factory
      ->getEditable($name);
    if ($text = $entity_browser
      ->get('submit_text')) {
      $entity_browser
        ->clear('submit_text');
      foreach ($entity_browser
        ->get('widgets') as $widget_uuid => $widget) {
        $entity_browser
          ->set("widgets.{$widget_uuid}.settings.submit_text", $text);
        $entity_browser
          ->save();
      }
    }
  }
}

/**
 * Migrates duplicated Views entity_browser_select fields.
 */
function entity_browser_update_8002() {

  // Map entity data tables to base tables.
  $table_map = [];
  foreach (\Drupal::entityTypeManager()
    ->getDefinitions() as $entity_type_name => $entity_type) {
    $base_table = $entity_type
      ->getBaseTable();
    $data_table = $entity_type
      ->getDataTable();
    if ($base_table && $data_table) {
      $table_map[$data_table] = $base_table;
    }
  }
  $config_factory = \Drupal::configFactory();
  foreach ($config_factory
    ->listAll('views.view.') as $view_config_name) {
    $save = FALSE;
    $view = $config_factory
      ->getEditable($view_config_name);
    $displays = $view
      ->get('display');
    foreach ($displays as $display_name => &$display) {
      if ($display['display_options'] && isset($display['display_options']['fields'])) {
        foreach ($display['display_options']['fields'] as $field_name => &$field) {
          if ($field['plugin_id'] === 'entity_browser_select' && isset($table_map[$field['table']])) {
            $field['table'] = $table_map[$field['table']];
            $save = TRUE;
          }
        }
      }
    }
    if ($save) {
      $view
        ->set('display', $displays);
      $view
        ->save(TRUE);
    }
  }
}

/**
 * Updates entity browsers to use the new media image upload widget plugin.
 */
function entity_browser_update_8201() {
  $config_factory = \Drupal::configFactory();
  foreach ($config_factory
    ->listAll('entity_browser.browser.') as $name) {
    $config = $config_factory
      ->getEditable($name);
    $widgets = $config
      ->get('widgets');
    $changed = FALSE;
    foreach ($widgets as &$widget) {
      if ($widget['id'] === 'media_entity_image_upload') {
        $widget['id'] = 'media_image_upload';
        $widget['settings']['media_type'] = $widget['settings']['media_bundle'];
        unset($widget['settings']['media_bundle']);
        $changed = TRUE;
      }
    }
    if ($changed) {
      $config
        ->set('widgets', $widgets)
        ->save(TRUE);
    }
  }
}

Functions

Namesort descending Description
entity_browser_requirements Implements hook_requirements().
entity_browser_update_8001 Updates submit text for existing Entity browsers.
entity_browser_update_8002 Migrates duplicated Views entity_browser_select fields.
entity_browser_update_8201 Updates entity browsers to use the new media image upload widget plugin.