You are here

function media_migration_migrate_d7_filter_format_prepare_row in Media Migration 8

Implements hook_migrate_MIGRATION_ID_prepare_row() for d7_filter_format.

File

./media_migration.module, line 25
Primary module hooks for Media migration module.

Code

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);
  }
}