3 namespace Drupal\link\Plugin\migrate\process\d6;
5 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
6 use Drupal\migrate\Plugin\MigrationInterface;
7 use Drupal\migrate\MigrateExecutableInterface;
8 use Drupal\migrate\ProcessPluginBase;
9 use Drupal\migrate\Row;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * @MigrateProcessPlugin(
14 * id = "d6_field_link"
17 class FieldLink extends ProcessPluginBase implements ContainerFactoryPluginInterface {
22 public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration) {
23 parent::__construct($configuration, $plugin_id, $plugin_definition);
24 $this->migration = $migration;
30 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
40 * Turn a Drupal 6 URI into a Drupal 8-compatible format.
43 * The 'url' value from Drupal 6.
46 * The Drupal 8-compatible URI.
48 * @see \Drupal\link\Plugin\Field\FieldWidget\LinkWidget::getUserEnteredStringAsUri()
50 protected function canonicalizeUri($uri) {
51 // If we already have a scheme, we're fine.
52 if (empty($uri) || !is_null(parse_url($uri, PHP_URL_SCHEME))) {
56 // Remove the <front> component of the URL.
57 if (strpos($uri, '<front>') === 0) {
58 $uri = substr($uri, strlen('<front>'));
61 // Add the internal: scheme and ensure a leading slash.
62 return 'internal:/' . ltrim($uri, '/');
68 public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
69 $attributes = unserialize($value['attributes']);
70 // Drupal 6 link attributes might be double serialized.
71 if (!is_array($attributes)) {
72 $attributes = unserialize($attributes);
79 // Massage the values into the correct form for the link.
80 $route['uri'] = $this->canonicalizeUri($value['url']);
81 $route['options']['attributes'] = $attributes;
82 $route['title'] = $value['title'];