Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / drush / drush / src / Commands / generate / Generators / Migrate / migration.twig
diff --git a/vendor/drush/drush/src/Commands/generate/Generators/Migrate/migration.twig b/vendor/drush/drush/src/Commands/generate/Generators/Migrate/migration.twig
new file mode 100644 (file)
index 0000000..0fb1be4
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+namespace Drupal\{{ machine_name }}\Plugin\migrate\source;
+
+use Drupal\migrate\Plugin\migrate\source\SqlBase;
+use Drupal\migrate\Row;
+
+/**
+ * Migrate Source plugin.
+ *
+ * @MigrateSource(
+ *   id = "{{ plugin_id }}"
+ * )
+ */
+class {{ class }} extends SqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    /**
+     * An important point to note is that your query *must* return a single row
+     * for each item to be imported. Here we might be tempted to add a join to
+     * migrate_example_beer_topic_node in our query, to pull in the
+     * relationships to our categories. Doing this would cause the query to
+     * return multiple rows for a given node, once per related value, thus
+     * processing the same node multiple times, each time with only one of the
+     * multiple values that should be imported. To avoid that, we simply query
+     * the base node data here, and pull in the relationships in prepareRow()
+     * below.
+     */
+    $query = $this->select('migrate_example_beer_node', 'b')
+                 ->fields('b', ['bid', 'name', 'body', 'excerpt', 'aid',
+                   'countries', 'image', 'image_alt', 'image_title',
+                   'image_description']);
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = [
+      'bid' => $this->t('Beer ID'),
+      'name' => $this->t('Name of beer'),
+      'body' => $this->t('Full description of the beer'),
+      'excerpt' => $this->t('Abstract for this beer'),
+      'aid' => $this->t('Account ID of the author'),
+      'countries' => $this->t('Countries of origin. Multiple values, delimited by pipe'),
+      'image' => $this->t('Image path'),
+      'image_alt' => $this->t('Image ALT'),
+      'image_title' => $this->t('Image title'),
+      'image_description' => $this->t('Image description'),
+      // Note that this field is not part of the query above - it is populated
+      // by prepareRow() below. You should document all source properties that
+      // are available for mapping after prepareRow() is called.
+      'terms' => $this->t('Applicable styles'),
+    ];
+
+    return $fields;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [
+      'bid' => [
+        'type' => 'integer',
+        'alias' => 'b',
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    /**
+     * As explained above, we need to pull the style relationships into our
+     * source row here, as an array of 'style' values (the unique ID for
+     * the beer_term migration).
+     */
+    $terms = $this->select('migrate_example_beer_topic_node', 'bt')
+                 ->fields('bt', ['style'])
+      ->condition('bid', $row->getSourceProperty('bid'))
+      ->execute()
+      ->fetchCol();
+    $row->setSourceProperty('terms', $terms);
+
+    // As we did for favorite beers in the user migration, we need to explode
+    // the multi-value country names.
+    if ($value = $row->getSourceProperty('countries')) {
+      $row->setSourceProperty('countries', explode('|', $value));
+    }
+    return parent::prepareRow($row);
+  }
+
+}