media_migration-8.x-1.x-dev/media_migration.module

media_migration.module
<?php

/**
 * @file
 * Primary module hooks for Media migration module.
 */

use Drupal\Component\Plugin\PluginBase;
use Drupal\media_migration\MediaMigration;
use Drupal\media_migration\Utility\SourceDatabase;
use Drupal\migmag\Utility\MigMagMigrationUtility;
use Drupal\migrate\Plugin\MigrateSourceInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Row;
use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;

/**
 * Implements hook_migration_plugins_alter().
 */
function media_migration_migration_plugins_alter(array &$migrations) {
  \Drupal::service('media_migration.migrate_plugin_alterer')->alter($migrations);

  // File entity source field migrations are depending on d7_file_plain_type
  // migrations with the matching derivative ID. But if the matching
  // d7_file_plain_type migrations aren't present, contribs (Drush,
  // Migrate Tools) throw errors.
  // So we have to remove those d7_file_plain_type dependencies from the file
  // entity source field storage migrations which aren't available.
  $file_entity_source_field_migrations = array_filter(
    $migrations,
    function ($definition) {
      $original_id = $definition['source']['media_migration_original_id'] ?? NULL;
      return is_string($original_id) && strpos($original_id, 'd7_file_entity_source_field' . PluginBase::DERIVATIVE_SEPARATOR) === 0;
    }
  );

  $migration_ids = array_keys($migrations);
  foreach (array_keys($file_entity_source_field_migrations) as $id) {
    MigMagMigrationUtility::removeMissingMigrationDependencies(
      $migrations[$id],
      $migration_ids
    );
  }
}

/**
 * Implements hook_migrate_MIGRATION_ID_prepare_row() for d7_filter_format.
 */
function media_migration_migrate_d7_filter_format_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  assert($migration->getSourcePlugin() instanceof DrupalSqlBase);
  $source_connection = $migration->getSourcePlugin()->getDatabase();
  $filter_format_id = $row->getSourceProperty('format');
  $filters = $row->getSourceProperty('filters');
  $media_filter_is_mapped = MediaMigration::embedTokenDestinationFilterPluginIsValid();
  $formats_formatting_img_tag = SourceDatabase::getFormatsUsingTag($source_connection, 'img');

  // Add the media_embed (and accompanying filter_align, filter_caption) filter
  // to text formats using <img> tags, to convert those to <drupal-media>.
  // @see \Drupal\media_migration\Plugin\migrate\process\ImgTagToEmbedFilter
  if (
    in_array($filter_format_id, $formats_formatting_img_tag) ||
    (in_array('media_filter', $filters) && $media_filter_is_mapped)
  ) {
    // Ensure they're added with the appropriate weight.
    if (isset($filters['filter_htmlcorrector'])) {
      $appropriate_weight = (int) $filters['filter_htmlcorrector']['weight'] + 1;
    }
    elseif (isset($filters['filter_html'])) {
      $appropriate_weight = (int) $filters['filter_html']['weight'] + 1;
    }
    elseif (isset($filters['filter_html_image_secure'])) {
      $appropriate_weight = (int) $filters['filter_html_image_secure']['weight'] + 1;
    }
    else {
      $appropriate_weight = -1000;
      foreach ($filters as $filter) {
        $appropriate_weight = max($appropriate_weight, (int) $filter['weight']);
      }
    }

    $filters['media_migration_added__filter_align'] = [
      // Only name, weight and settings are truly necessary for
      // core/modules/filter/migrations/d7_filter_format.yml.
      'name' => 'filter_align',
      'weight' => $appropriate_weight + 0,
      'settings' => [],
    ];
    $filters['media_migration_added__filter_caption'] = [
      'name' => 'filter_caption',
      'weight' => $appropriate_weight + 1,
      'settings' => [],
    ];
    if (in_array('media_filter', $filters)) {
      $filters['media_filter']['weight'] = $appropriate_weight + 2;
    }
    else {
      $filters['media_migration_added__media_filter'] = [
        'name' => MediaMigration::getEmbedTokenDestinationFilterPlugin(),
        'weight' => $appropriate_weight + 2,
        'settings' => [],
      ];
    }

    $row->setSourceProperty('filters', $filters);
  }

  // Add the linkit filter to text formats using <a href="/file/%">, to convert
  // them to <a data-entity-substitution="media" data-entity-type="media"
  // data-entity-uuid="<media UUID>" href="/file/%">.
  // @see \Drupal\media_migration\Plugin\migrate\process\CKEditorLinkFileToLinkitFilter
  $formats_formatting_linkit = SourceDatabase::getFormatsHavingFileLink($source_connection);
  if (in_array($filter_format_id, $formats_formatting_linkit)) {
    $filters['media_migration_added__linkit'] = [
      'name' => 'linkit',
      'weight' => 0,
      'settings' => [],
    ];
    $row->setSourceProperty('filters', $filters);
  }
}

/**
 * Implements hook_migrate_field_info_alter().
 *
 * If destination site has video embed field module enabled then we don't want
 * to migrate data from source to video embed field so unsetting that.
 */
function media_migration_migrate_field_info_alter(array &$definitions) {
  unset($definitions['video_embed_field']);
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc