You are here

abstract class FileBase in Media Migration 8

Abstract plugin class for file-based media migration source plugins.

Not every file entity will be migrated into a media file field: for example, remote ("YouTube" or "Vimeo") file entities are migrated into a media source field with type "string". This is a base plugin class for those file entity dealer plugins which needs to migrate file entities to media entities with file-based source field (linke "file" or "image").

Hierarchy

Expanded class hierarchy of FileBase

1 file declares its use of FileBase
Image.php in tests/modules/media_migration_test_dealer_plugins/src/Image.php

File

src/Plugin/media_migration/file_entity/FileBase.php, line 18

Namespace

Drupal\media_migration\Plugin\media_migration\file_entity
View source
abstract class FileBase extends FileEntityDealerBase {

  /**
   * {@inheritdoc}
   */
  public function alterMediaEntityMigrationDefinition(array &$migration_definition, Connection $connection) : void {
    $source_field_name = $this
      ->getDestinationMediaSourceFieldName();
    $migration_definition['process'][$source_field_name . '/target_id'] = 'fid';
    $migration_definition['process'][$source_field_name . '/display'] = 'display';
    $migration_definition['process'][$source_field_name . '/description'] = 'description';
  }

  /**
   * {@inheritdoc}
   */
  public function prepareMediaEntityRow(Row $row, Connection $connection) : void {
    parent::prepareMediaEntityRow($row, $connection);
    foreach ($this
      ->getFileData($connection, $row
      ->getSourceProperty('fid')) as $data_key => $data_value) {
      $row
        ->setSourceProperty($data_key, $data_value);
    }
  }

  /**
   * Get the name of the file fields from the source database.
   *
   * @param \Drupal\Core\Database\Connection $connection
   *   The database connection of the source Drupal 7 instance.
   * @param bool $field_names_only
   *   Whether only the name of the file fields should be returned. Defaults to
   *   TRUE.
   *
   * @return array
   *   The array of the available file fields.
   */
  protected function getFileFieldData(Connection $connection, bool $field_names_only = TRUE) : array {
    $field_query = $connection
      ->select('field_config', 'fs')
      ->fields('fs', [
      'field_name',
    ])
      ->condition('fs.type', 'file')
      ->condition('fs.active', 1)
      ->condition('fs.deleted', 0)
      ->condition('fs.storage_active', 1)
      ->condition('fi.deleted', 0);
    $field_query
      ->join('field_config_instance', 'fi', 'fs.id = fi.field_id');
    if ($field_names_only) {
      return array_keys($field_query
        ->execute()
        ->fetchAllAssoc('field_name'));
    }
    $field_query
      ->addField('fs', 'data', 'field_storage_data');
    $field_query
      ->addField('fi', 'data', 'field_instance_data');
    $fields_data = [];
    foreach ($field_query
      ->execute()
      ->fetchAll(\PDO::FETCH_ASSOC) as $item) {
      foreach ([
        'field_storage_data',
        'field_instance_data',
      ] as $data_key) {
        $item[$data_key] = unserialize($item[$data_key]);
      }
      $fields_data[] = $item;
    }
    return $fields_data;
  }

  /**
   * Returns display and description properties of the specified file.
   *
   * @param \Drupal\Core\Database\Connection $connection
   *   The database connection of the source Drupal 7 instance.
   * @param string|int $file_id
   *   The ID of the file.
   *
   * @return array
   *   An array of those properties whose value is not empty.
   */
  protected function getFileData(Connection $connection, $file_id) : array {
    foreach ($this
      ->getFileFieldData($connection) as $field_name) {
      $field_table_name = "field_data_{$field_name}";
      $data_query = $connection
        ->select($field_table_name, $field_name);
      $data_query
        ->addField($field_name, "{$field_name}_display", 'display');
      $data_query
        ->addField($field_name, "{$field_name}_description", 'description');
      $data_query
        ->condition("{$field_name}_fid", $file_id);
      if (!empty($results = $data_query
        ->execute()
        ->fetchAll(\PDO::FETCH_ASSOC))) {
        $result = reset($results);
        return array_filter($result);
      }
    }
    return [];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FileBase::alterMediaEntityMigrationDefinition public function Overrides MediaDealerBase::alterMediaEntityMigrationDefinition 1
FileBase::getFileData protected function Returns display and description properties of the specified file.
FileBase::getFileFieldData protected function Get the name of the file fields from the source database.
FileBase::prepareMediaEntityRow public function Overrides MediaDealerBase::prepareMediaEntityRow 1
MediaDealerBase::$entityTypeManager protected property The entity type manager.
MediaDealerBase::$fieldTypeManager protected property The field type plugin manager service.
MediaDealerBase::$mediaSourceManager protected property The media source plugin manager.
MediaDealerBase::alterMediaFieldFormatterMigrationDefinition public function
MediaDealerBase::alterMediaSourceFieldInstanceMigrationDefinition public function
MediaDealerBase::alterMediaSourceFieldStorageMigrationDefinition public function
MediaDealerBase::alterMediaSourceFieldWidgetMigrationDefinition public function
MediaDealerBase::alterMediaTypeMigrationDefinition public function
MediaDealerBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
MediaDealerBase::getDestinationMediaSourceFieldName public function 4
MediaDealerBase::getDestinationMediaSourcePluginId public function 2
MediaDealerBase::getDestinationMediaTypeId public function 1
MediaDealerBase::getDestinationMediaTypeIdBase public function 3
MediaDealerBase::getDestinationMediaTypeLabel public function 3
MediaDealerBase::getDestinationMediaTypeSourceFieldLabel public function 4
MediaDealerBase::getImageData protected function Returns alt, title, with and height properties of the specified file.
MediaDealerBase::getImageFieldData protected function Get the names of the image type fields from the source database.
MediaDealerBase::getMediaSourceFieldInstance protected function Returns a media source field instance.
MediaDealerBase::getMediaSourceFieldStorage protected function Returns a media source field storage.
MediaDealerBase::prepareMediaSourceFieldFormatterRow public function 6
MediaDealerBase::prepareMediaSourceFieldInstanceRow public function 2
MediaDealerBase::prepareMediaSourceFieldStorageRow public function 1
MediaDealerBase::prepareMediaSourceFieldWidgetRow public function
MediaDealerBase::prepareMediaTypeRow public function
MediaDealerBase::__construct public function Constructs a new plugin instance. Overrides PluginBase::__construct
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.