Mercurial > hg > isophonics-drupal-site
comparison core/modules/node/src/Plugin/migrate/D7NodeDeriver.php @ 18:af1871eacc83
Update to Drupal core 8.7.1
author | Chris Cannam |
---|---|
date | Thu, 09 May 2019 15:33:08 +0100 |
parents | 129ea1e6d783 |
children |
comparison
equal
deleted
inserted
replaced
17:129ea1e6d783 | 18:af1871eacc83 |
---|---|
1 <?php | 1 <?php |
2 | 2 |
3 namespace Drupal\node\Plugin\migrate; | 3 namespace Drupal\node\Plugin\migrate; |
4 | 4 |
5 use Drupal\Component\Plugin\Derivative\DeriverBase; | 5 use Drupal\Component\Plugin\Derivative\DeriverBase; |
6 use Drupal\Component\Plugin\Exception\PluginNotFoundException; | |
7 use Drupal\Core\Database\DatabaseExceptionWrapper; | 6 use Drupal\Core\Database\DatabaseExceptionWrapper; |
8 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface; | 7 use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface; |
9 use Drupal\migrate\Exception\RequirementsException; | 8 use Drupal\migrate\Exception\RequirementsException; |
10 use Drupal\migrate\Plugin\MigrationDeriverTrait; | 9 use Drupal\migrate\Plugin\MigrationDeriverTrait; |
11 use Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface; | 10 use Drupal\migrate_drupal\FieldDiscoveryInterface; |
12 use Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface; | |
13 use Symfony\Component\DependencyInjection\ContainerInterface; | 11 use Symfony\Component\DependencyInjection\ContainerInterface; |
14 | 12 |
15 /** | 13 /** |
16 * Deriver for Drupal 7 node and node revision migrations based on node types. | 14 * Deriver for Drupal 7 node and node revision migrations based on node types. |
17 */ | 15 */ |
24 * @var string | 22 * @var string |
25 */ | 23 */ |
26 protected $basePluginId; | 24 protected $basePluginId; |
27 | 25 |
28 /** | 26 /** |
29 * Already-instantiated cckfield plugins, keyed by ID. | |
30 * | |
31 * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldInterface[] | |
32 */ | |
33 protected $cckPluginCache; | |
34 | |
35 /** | |
36 * The CCK plugin manager. | |
37 * | |
38 * @var \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface | |
39 */ | |
40 protected $cckPluginManager; | |
41 | |
42 /** | |
43 * Already-instantiated field plugins, keyed by ID. | |
44 * | |
45 * @var \Drupal\migrate_drupal\Plugin\MigrateFieldInterface[] | |
46 */ | |
47 protected $fieldPluginCache; | |
48 | |
49 /** | |
50 * The field plugin manager. | |
51 * | |
52 * @var \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface | |
53 */ | |
54 protected $fieldPluginManager; | |
55 | |
56 /** | |
57 * Whether or not to include translations. | 27 * Whether or not to include translations. |
58 * | 28 * |
59 * @var bool | 29 * @var bool |
60 */ | 30 */ |
61 protected $includeTranslations; | 31 protected $includeTranslations; |
62 | 32 |
63 /** | 33 /** |
34 * The migration field discovery service. | |
35 * | |
36 * @var \Drupal\migrate_drupal\FieldDiscoveryInterface | |
37 */ | |
38 protected $fieldDiscovery; | |
39 | |
40 /** | |
64 * D7NodeDeriver constructor. | 41 * D7NodeDeriver constructor. |
65 * | 42 * |
66 * @param string $base_plugin_id | 43 * @param string $base_plugin_id |
67 * The base plugin ID for the plugin ID. | 44 * The base plugin ID for the plugin ID. |
68 * @param \Drupal\migrate_drupal\Plugin\MigrateCckFieldPluginManagerInterface $cck_manager | |
69 * The CCK plugin manager. | |
70 * @param \Drupal\migrate_drupal\Plugin\MigrateFieldPluginManagerInterface $field_manager | |
71 * The field plugin manager. | |
72 * @param bool $translations | 45 * @param bool $translations |
73 * Whether or not to include translations. | 46 * Whether or not to include translations. |
47 * @param \Drupal\migrate_drupal\FieldDiscoveryInterface $field_discovery | |
48 * The migration field discovery service. | |
74 */ | 49 */ |
75 public function __construct($base_plugin_id, MigrateCckFieldPluginManagerInterface $cck_manager, MigrateFieldPluginManagerInterface $field_manager, $translations) { | 50 public function __construct($base_plugin_id, $translations, FieldDiscoveryInterface $field_discovery) { |
76 $this->basePluginId = $base_plugin_id; | 51 $this->basePluginId = $base_plugin_id; |
77 $this->cckPluginManager = $cck_manager; | |
78 $this->fieldPluginManager = $field_manager; | |
79 $this->includeTranslations = $translations; | 52 $this->includeTranslations = $translations; |
53 $this->fieldDiscovery = $field_discovery; | |
80 } | 54 } |
81 | 55 |
82 /** | 56 /** |
83 * {@inheritdoc} | 57 * {@inheritdoc} |
84 */ | 58 */ |
85 public static function create(ContainerInterface $container, $base_plugin_id) { | 59 public static function create(ContainerInterface $container, $base_plugin_id) { |
86 // Translations don't make sense unless we have content_translation. | 60 // Translations don't make sense unless we have content_translation. |
87 return new static( | 61 return new static( |
88 $base_plugin_id, | 62 $base_plugin_id, |
89 $container->get('plugin.manager.migrate.cckfield'), | 63 $container->get('module_handler')->moduleExists('content_translation'), |
90 $container->get('plugin.manager.migrate.field'), | 64 $container->get('migrate_drupal.field_discovery') |
91 $container->get('module_handler')->moduleExists('content_translation') | |
92 ); | 65 ); |
93 } | 66 } |
94 | 67 |
95 /** | 68 /** |
96 * {@inheritdoc} | 69 * {@inheritdoc} |
107 } | 80 } |
108 catch (RequirementsException $e) { | 81 catch (RequirementsException $e) { |
109 // If the d7_node_type requirements failed, that means we do not have a | 82 // If the d7_node_type requirements failed, that means we do not have a |
110 // Drupal source database configured - there is nothing to generate. | 83 // Drupal source database configured - there is nothing to generate. |
111 return $this->derivatives; | 84 return $this->derivatives; |
112 } | |
113 | |
114 $fields = []; | |
115 try { | |
116 $source_plugin = static::getSourcePlugin('d7_field_instance'); | |
117 $source_plugin->checkRequirements(); | |
118 | |
119 // Read all field instance definitions in the source database. | |
120 foreach ($source_plugin as $row) { | |
121 if ($row->getSourceProperty('entity_type') == 'node') { | |
122 $fields[$row->getSourceProperty('bundle')][$row->getSourceProperty('field_name')] = $row->getSource(); | |
123 } | |
124 } | |
125 } | |
126 catch (RequirementsException $e) { | |
127 // If checkRequirements() failed then the field module did not exist and | |
128 // we do not have any fields. Therefore, $fields will be empty and below | |
129 // we'll create a migration just for the node properties. | |
130 } | 85 } |
131 | 86 |
132 try { | 87 try { |
133 foreach ($node_types as $row) { | 88 foreach ($node_types as $row) { |
134 $node_type = $row->getSourceProperty('type'); | 89 $node_type = $row->getSourceProperty('type'); |
156 // corresponding d7_node variant. | 111 // corresponding d7_node variant. |
157 if ($base_plugin_definition['id'] == ['d7_node_revision'] || in_array('translation', $base_plugin_definition['migration_tags'])) { | 112 if ($base_plugin_definition['id'] == ['d7_node_revision'] || in_array('translation', $base_plugin_definition['migration_tags'])) { |
158 $values['migration_dependencies']['required'][] = 'd7_node:' . $node_type; | 113 $values['migration_dependencies']['required'][] = 'd7_node:' . $node_type; |
159 } | 114 } |
160 | 115 |
116 /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */ | |
161 $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($values); | 117 $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($values); |
162 if (isset($fields[$node_type])) { | 118 $this->fieldDiscovery->addBundleFieldProcesses($migration, 'node', $node_type); |
163 foreach ($fields[$node_type] as $field_name => $info) { | |
164 $field_type = $info['type']; | |
165 try { | |
166 $plugin_id = $this->fieldPluginManager->getPluginIdFromFieldType($field_type, ['core' => 7], $migration); | |
167 if (!isset($this->fieldPluginCache[$field_type])) { | |
168 $this->fieldPluginCache[$field_type] = $this->fieldPluginManager->createInstance($plugin_id, ['core' => 7], $migration); | |
169 } | |
170 $this->fieldPluginCache[$field_type] | |
171 ->defineValueProcessPipeline($migration, $field_name, $info); | |
172 } | |
173 catch (PluginNotFoundException $ex) { | |
174 try { | |
175 $plugin_id = $this->cckPluginManager->getPluginIdFromFieldType($field_type, ['core' => 7], $migration); | |
176 if (!isset($this->cckPluginCache[$field_type])) { | |
177 $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($plugin_id, ['core' => 7], $migration); | |
178 } | |
179 $this->cckPluginCache[$field_type] | |
180 ->processCckFieldValues($migration, $field_name, $info); | |
181 } | |
182 catch (PluginNotFoundException $ex) { | |
183 $migration->setProcessOfProperty($field_name, $field_name); | |
184 } | |
185 } | |
186 } | |
187 } | |
188 $this->derivatives[$node_type] = $migration->getPluginDefinition(); | 119 $this->derivatives[$node_type] = $migration->getPluginDefinition(); |
189 } | 120 } |
190 } | 121 } |
191 catch (DatabaseExceptionWrapper $e) { | 122 catch (DatabaseExceptionWrapper $e) { |
192 // Once we begin iterating the source plugin it is possible that the | 123 // Once we begin iterating the source plugin it is possible that the |