migrate_visualize-1.0.x-dev/src/Controller/VisualizeController.php
src/Controller/VisualizeController.php
<?php
namespace Drupal\migrate_visualize\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
use Drupal\migrate_plus\Entity\Migration;
use Drupal\migrate_visualize\MigrateGraph;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Returns responses for visualization route.
*/
class VisualizeController extends ControllerBase {
/**
* The migration plugin manager.
*
* @var \Drupal\migrate\Plugin\MigrationPluginManagerInterface
*/
protected $migrationPluginManager;
/**
* The migration graph service.
*
* @var \Drupal\migrate_visualize\MigrateGraph
*/
protected $migrationGraph;
/**
* The controller constructor.
*
* @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $migration_plugin_manager
* The migration plugin manager.
* @param Drupal\migrate_visualize\MigrateGraph $migrate_graph
* The migration graph service.
*/
public function __construct(MigrationPluginManagerInterface $migration_plugin_manager, MigrateGraph $migrate_graph) {
$this->migrationPluginManager = $migration_plugin_manager;
$this->migrationGraph = $migrate_graph;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('plugin.manager.migration'),
$container->get('migrate_visualize.migrate_graph')
);
}
/**
* Visualize the migration.
*/
public function build(Migration $migration) {
$migrationPlugin = $this->migrationPluginManager->createInstance($migration->id(), $migration->toArray());
$build['switcher'] = $this->formBuilder()
->getForm('Drupal\migrate_visualize\Form\VisualizeMigrationSwitcherForm');
try {
$this->migrationGraph->graph($migrationPlugin);
}
catch (\Exception $exception) {
$this->messenger()
->addError($this->t('@class Unable to graph migration: @message', [
'@message' => $exception->getMessage(),
'@class' => get_class($exception),
]));
// There's a partial graph built, but we won't display it.
return $build;
}
$build['visualize'] = [
'#migration' => $migrationPlugin,
'#weight' => 110,
];
/** @var \Fhaculty\Graph\Graph $build['visualize']['#graph'] */
$build['visualize']['#graph'] = $this->migrationGraph->getGraph();
switch ($this->config('migrate_visualize.settings')->get('display_mode')) {
case 'mermaidjs':
$build['visualize']['#attached']['library'][] = 'migrate_visualize/mermaid';
$build['visualize']['#theme'] = 'migration_visualize_mermaid';
break;
case 'graphviz':
$build['visualize']['#theme'] = 'migration_visualize_graphviz';
break;
}
return $build;
}
}
