MigrationHelper.php in Inline Entity Form 8
File
src/MigrationHelper.php
View source
<?php
namespace Drupal\inline_entity_form;
use Drupal\Component\Utility\NestedArray;
use Drupal\field\Plugin\migrate\source\d7\FieldInstance;
use Drupal\field\Plugin\migrate\source\d7\FieldInstancePerFormDisplay;
use Drupal\migrate\Exception\RequirementsException;
use Drupal\migrate\Plugin\MigrateSourceInterface;
use Drupal\migrate\Plugin\MigrationInterface;
use Drupal\migrate\Row;
class MigrationHelper {
public function alterPlugins(array &$migrations) {
foreach ($migrations as &$migration) {
$migration_plugin_manager = \Drupal::service('plugin.manager.migration');
$migration_stub = $migration_plugin_manager
->createStubMigration($migration);
$source_plugin_manager = \Drupal::service('plugin.manager.migrate.source');
$source = NULL;
$configuration = $migration['source'];
$source = $source_plugin_manager
->createInstance($migration['source']['plugin'], $configuration, $migration_stub);
if ($source) {
if (get_class($source) === FieldInstance::class) {
$settings[] = $migration['process']['settings'];
$addition = [
'inline_entity_form' => [
'plugin' => 'inline_entity_form_field_instance_settings',
],
];
$settings = NestedArray::mergeDeepArray([
$settings,
$addition,
], TRUE);
$migration['process']['settings'] = $settings;
}
if (is_a($source, FieldInstancePerFormDisplay::class)) {
$addition = [
'inline_entity_form_single' => 'inline_entity_form_simple',
'inline_entity_form' => 'inline_entity_form_complex',
];
$migration['process']['options/type']['type']['map'] = array_merge($migration['process']['options/type']['type']['map'], $addition);
}
}
}
}
public function alterRow(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
if ($source) {
if (get_class($source) === FieldInstance::class && $row
->get('type') === 'entityreference') {
$widget = $row
->get('widget/type');
if ($widget === 'inline_entity_form_single' || $widget === 'inline_entity_form') {
$data = $row
->get('field_definition/data');
$definition = unserialize($data);
if (empty($definition['settings']['handler_settings']['target_bundles'])) {
$entity_type = $row
->get('entity_type');
$bundles = $this
->getBundles($source, $entity_type);
}
}
}
$bundles = $bundles ?? [];
$row
->setSourceProperty('target_bundles', $bundles);
}
}
protected function getBundles(MigrateSourceInterface $source_plugin, $entity_type) {
$bundles = NULL;
$connection = NULL;
try {
$connection = $source_plugin
->getDatabase();
} catch (RequirementsException $e) {
}
if ($connection) {
switch ($entity_type) {
case 'node':
if ($connection
->schema()
->tableExists('node_type')) {
$query = $connection
->select('node_type', 't')
->fields('t');
$bundles = $query
->execute()
->fetchCol();
}
break;
default:
break;
}
}
return $bundles;
}
}