Version 1
[yaffs-website] / web / modules / contrib / migrate_tools / src / Controller / MigrationController.php
diff --git a/web/modules/contrib/migrate_tools/src/Controller/MigrationController.php b/web/modules/contrib/migrate_tools/src/Controller/MigrationController.php
new file mode 100644 (file)
index 0000000..09ae154
--- /dev/null
@@ -0,0 +1,262 @@
+<?php
+
+namespace Drupal\migrate_tools\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\Component\Utility\Xss;
+use Drupal\Component\Utility\Html;
+use Drupal\migrate_plus\Plugin\MigrationConfigEntityPluginManager;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Returns responses for migrate_tools migration view routes.
+ */
+class MigrationController extends ControllerBase implements ContainerInjectionInterface {
+
+  /**
+   * Plugin manager for migration plugins.
+   *
+   * @var \Drupal\migrate_plus\Plugin\MigrationConfigEntityPluginManager
+   */
+  protected $migrationConfigEntityPluginManager;
+
+  /**
+   * Constructs a new MigrationController object.
+   *
+   * @param \Drupal\migrate_plus\Plugin\MigrationConfigEntityPluginManager $migration_config_entity_plugin_manager
+   *   The plugin manager for config entity-based migrations.
+   */
+  public function __construct(MigrationConfigEntityPluginManager $migration_config_entity_plugin_manager) {
+    $this->migrationConfigEntityPluginManager = $migration_config_entity_plugin_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.config_entity_migration')
+    );
+  }
+
+  /**
+   * Displays an overview of a migration entity.
+   *
+   * @param string $migration_group
+   *   Machine name of the migration's group.
+   * @param string $migration
+   *   Machine name of the migration.
+   *
+   * @return array
+   *   A render array as expected by drupal_render().
+   */
+  public function overview($migration_group, $migration) {
+
+    /** @var MigrationInterface $migration */
+    $migration = $this->migrationConfigEntityPluginManager->createInstance($migration);
+
+    $build['overview'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Overview'),
+    ];
+
+    $build['overview']['group'] = [
+      '#title' => $this->t('Group:'),
+      '#markup' => Xss::filterAdmin($migration_group),
+      '#type' => 'item',
+    ];
+
+    $build['overview']['description'] = [
+      '#title' => $this->t('Description:'),
+      '#markup' => Xss::filterAdmin($migration->label()),
+      '#type' => 'item',
+    ];
+
+    $migration_dependencies = $migration->getMigrationDependencies();
+    if (!empty($migration_dependencies['required'])) {
+      $build['overview']['dependencies'] = [
+        '#title' => $this->t('Migration Dependencies') ,
+        '#markup' => Xss::filterAdmin(implode(', ', $migration_dependencies['required'])),
+        '#type' => 'item',
+      ];
+    }
+    if (!empty($migration_dependencies['optional'])) {
+      $build['overview']['soft_dependencies'] = [
+        '#title' => $this->t('Soft Migration Dependencies'),
+        '#markup' => Xss::filterAdmin(implode(', ', $migration_dependencies['optional'])),
+        '#type' => 'item',
+      ];
+    }
+
+    return $build;
+  }
+
+  /**
+   * Display source information of a migration entity.
+   *
+   * @param string $migration_group
+   *   Machine name of the migration's group.
+   * @param string $migration
+   *   Machine name of the migration.
+   *
+   * @return array
+   *   A render array as expected by drupal_render().
+   */
+  public function source($migration_group, $migration) {
+
+    /** @var MigrationInterface $migration */
+    $migration = $this->migrationConfigEntityPluginManager->createInstance($migration);
+
+    // Source field information.
+    $build['source'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Source'),
+      '#group' => 'detail',
+      '#description' => $this->t('<p>These are the fields available from the source of this migration task. The machine names listed here may be used as sources in the process pipeline.</p>'),
+      '#attributes' => [
+        'id' => 'migration-detail-source',
+      ],
+    ];
+
+    $source = $migration->getSourcePlugin();
+    $build['source']['query'] = [
+      '#type' => 'item',
+      '#title' => $this->t('Query'),
+      '#markup' => '<pre>' . Xss::filterAdmin($source) . '</pre>',
+    ];
+    $header = [$this->t('Machine name'), $this->t('Description')];
+    $rows = [];
+    foreach ($source->fields($migration) as $machine_name => $description) {
+      $rows[] = [
+        ['data' => Html::escape($machine_name)],
+        ['data' => Xss::filterAdmin($description)],
+      ];
+    }
+
+    $build['source']['fields'] = [
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#empty' => $this->t('No fields'),
+    ];
+
+    return $build;
+  }
+
+  /**
+   * Display process information of a migration entity.
+   *
+   * @param string $migration_group
+   *   Machine name of the migration's group.
+   * @param string $migration
+   *   Machine name of the migration.
+   *
+   * @return array
+   *   A render array as expected by drupal_render().
+   */
+  public function process($migration_group, $migration) {
+
+    /** @var MigrationInterface $migration */
+    $migration = $this->migrationConfigEntityPluginManager->createInstance($migration);
+
+    // Process information.
+    $build['process'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Process'),
+    ];
+
+    $header = [
+      $this->t('Destination'),
+      $this->t('Source'),
+      $this->t('Process plugin'),
+      $this->t('Default'),
+    ];
+    $rows = [];
+    foreach ($migration->getProcess() as $destination_id => $process_line) {
+      $row = [];
+      $row[] = ['data' => Html::escape($destination_id)];
+      if (isset($process_line[0]['source'])) {
+        $row[] = ['data' => Xss::filterAdmin($process_line[0]['source'])];
+      }
+      else {
+        $row[] = '';
+      }
+      if (isset($process_line[0]['plugin'])) {
+        $row[] = ['data' => Xss::filterAdmin($process_line[0]['plugin'])];
+      }
+      else {
+        $row[] = '';
+      }
+      if (isset($process_line[0]['default_value'])) {
+        $row[] = ['data' => Xss::filterAdmin($process_line[0]['default_value'])];
+      }
+      else {
+        $row[] = '';
+      }
+      $rows[] = $row;
+    }
+
+    $build['process']['fields'] = [
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#empty' => $this->t('No process defined.'),
+    ];
+
+    return $build;
+  }
+
+  /**
+   * Displays destination information of a migration entity.
+   *
+   * @param string $migration_group
+   *   Machine name of the migration's group.
+   * @param string $migration
+   *   Machine name of the migration.
+   *
+   * @return array
+   *   A render array as expected by drupal_render().
+   */
+  public function destination($migration_group, $migration) {
+    /** @var MigrationInterface $migration */
+    $migration = $this->migrationConfigEntityPluginManager->createInstance($migration);
+
+    // Destination field information.
+    $build['destination'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Destination'),
+      '#group' => 'detail',
+      '#description' => $this->t('<p>These are the fields available in the destination plugin of this migration task. The machine names are those available to be used as the keys in the process pipeline.</p>'),
+      '#attributes' => [
+        'id' => 'migration-detail-destination',
+      ],
+    ];
+    $destination = $migration->getDestinationPlugin();
+    $build['destination']['type'] = [
+      '#type' => 'item',
+      '#title' => $this->t('Type'),
+      '#markup' => Xss::filterAdmin($destination->getPluginId()),
+    ];
+    $header = [$this->t('Machine name'), $this->t('Description')];
+    $rows = [];
+    $destination_fields = $destination->fields() ?: [];
+    foreach ($destination_fields as $machine_name => $description) {
+      $rows[] = [
+        ['data' => Html::escape($machine_name)],
+        ['data' => Xss::filterAdmin($description)],
+      ];
+    }
+
+    $build['destination']['fields'] = [
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#empty' => $this->t('No fields'),
+    ];
+
+    return $build;
+  }
+
+}