Chris@14
|
1 <?php
|
Chris@14
|
2
|
Chris@14
|
3 namespace Drupal\migrate\Audit;
|
Chris@14
|
4
|
Chris@14
|
5 use Drupal\Core\StringTranslation\StringTranslationTrait;
|
Chris@14
|
6 use Drupal\migrate\Plugin\MigrationInterface;
|
Chris@14
|
7
|
Chris@14
|
8 /**
|
Chris@14
|
9 * Audits migrations that create content entities in the destination system.
|
Chris@14
|
10 */
|
Chris@14
|
11 class IdAuditor implements AuditorInterface {
|
Chris@14
|
12
|
Chris@14
|
13 use StringTranslationTrait;
|
Chris@14
|
14
|
Chris@14
|
15 /**
|
Chris@14
|
16 * {@inheritdoc}
|
Chris@14
|
17 */
|
Chris@14
|
18 public function audit(MigrationInterface $migration) {
|
Chris@14
|
19 // If the migration does not opt into auditing, it passes.
|
Chris@14
|
20 if (!$migration->isAuditable()) {
|
Chris@14
|
21 return AuditResult::pass($migration);
|
Chris@14
|
22 }
|
Chris@14
|
23
|
Chris@14
|
24 $interface = HighestIdInterface::class;
|
Chris@14
|
25
|
Chris@14
|
26 $destination = $migration->getDestinationPlugin();
|
Chris@14
|
27 if (!$destination instanceof HighestIdInterface) {
|
Chris@14
|
28 throw new AuditException($migration, "Destination does not implement $interface");
|
Chris@14
|
29 }
|
Chris@14
|
30
|
Chris@14
|
31 $id_map = $migration->getIdMap();
|
Chris@14
|
32 if (!$id_map instanceof HighestIdInterface) {
|
Chris@14
|
33 throw new AuditException($migration, "ID map does not implement $interface");
|
Chris@14
|
34 }
|
Chris@14
|
35
|
Chris@14
|
36 if ($destination->getHighestId() > $id_map->getHighestId()) {
|
Chris@14
|
37 return AuditResult::fail($migration, [
|
Chris@14
|
38 $this->t('The destination system contains data which was not created by a migration.'),
|
Chris@14
|
39 ]);
|
Chris@14
|
40 }
|
Chris@14
|
41 return AuditResult::pass($migration);
|
Chris@14
|
42 }
|
Chris@14
|
43
|
Chris@14
|
44 /**
|
Chris@14
|
45 * {@inheritdoc}
|
Chris@14
|
46 */
|
Chris@14
|
47 public function auditMultiple(array $migrations) {
|
Chris@14
|
48 $conflicts = [];
|
Chris@14
|
49
|
Chris@14
|
50 foreach ($migrations as $migration) {
|
Chris@14
|
51 $migration_id = $migration->getPluginId();
|
Chris@14
|
52 $conflicts[$migration_id] = $this->audit($migration);
|
Chris@14
|
53 }
|
Chris@14
|
54 ksort($conflicts);
|
Chris@14
|
55 return $conflicts;
|
Chris@14
|
56 }
|
Chris@14
|
57
|
Chris@14
|
58 }
|