Version 1
[yaffs-website] / web / core / modules / comment / src / Plugin / migrate / source / d7 / CommentType.php
diff --git a/web/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php b/web/core/modules/comment/src/Plugin/migrate/source/d7/CommentType.php
new file mode 100644 (file)
index 0000000..2ac7c97
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\comment\Plugin\migrate\source\d7;
+
+use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 comment type source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_comment_type",
+ *   source_provider = "comment"
+ * )
+ */
+class CommentType extends DrupalSqlBase {
+
+  /**
+   * A map of D7 node types to their labels.
+   *
+   * @var string[]
+   */
+  protected $nodeTypes = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->select('field_config_instance', 'fci')
+      ->distinct()
+      ->fields('fci', ['bundle'])
+      ->condition('fci.entity_type', 'comment');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializeIterator() {
+    $this->nodeTypes = $this->select('node_type', 'nt')
+      ->fields('nt', ['type', 'name'])
+      ->execute()
+      ->fetchAllKeyed();
+
+    return parent::initializeIterator();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $node_type = substr($row->getSourceProperty('bundle'), 13);
+    $row->setSourceProperty('node_type', $node_type);
+
+    $row->setSourceProperty('default_mode', $this->variableGet("comment_default_mode_$node_type", 1));
+    $row->setSourceProperty('per_page', $this->variableGet("comment_default_per_page_$node_type", 50));
+    $row->setSourceProperty('anonymous', $this->variableGet("comment_anonymous_$node_type", FALSE));
+    $row->setSourceProperty('form_location', $this->variableGet("comment_form_location_$node_type", CommentItemInterface::FORM_BELOW));
+    $row->setSourceProperty('preview', $this->variableGet("comment_preview_$node_type", TRUE));
+    $row->setSourceProperty('subject', $this->variableGet("comment_subject_field_$node_type", TRUE));
+
+    $label = $this->t('@node_type comment', [
+      '@node_type' => $this->nodeTypes[$node_type],
+    ]);
+    $row->setSourceProperty('label', $label);
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [
+      'label' => $this->t('The label of the comment type.'),
+      'bundle' => $this->t('Bundle ID of the comment type.'),
+      'node_type' => $this->t('The node type to which this comment type is attached.'),
+      'default_mode' => $this->t('Default comment mode.'),
+      'per_page' => $this->t('Number of comments visible per page.'),
+      'anonymous' => $this->t('Whether anonymous comments are allowed.'),
+      'form_location' => $this->t('Location of the comment form.'),
+      'preview' => $this->t('Whether previews are enabled for the comment type.'),
+      'subject' => $this->t('Whether a subject field is enabled for the comment type.'),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [
+      'bundle' => [
+        'type' => 'string',
+      ],
+    ];
+  }
+
+}