Version 1
[yaffs-website] / web / modules / contrib / diff / src / Plugin / diff / Field / CommentFieldBuilder.php
diff --git a/web/modules/contrib/diff/src/Plugin/diff/Field/CommentFieldBuilder.php b/web/modules/contrib/diff/src/Plugin/diff/Field/CommentFieldBuilder.php
new file mode 100644 (file)
index 0000000..ee3c3c0
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+
+namespace Drupal\diff\Plugin\diff\Field;
+
+use Drupal\diff\FieldDiffBuilderBase;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+
+/**
+ * Plugin to diff comment fields.
+ *
+ * @FieldDiffBuilder(
+ *   id = "comment_field_diff_builder",
+ *   label = @Translation("Comment Field Diff"),
+ *   field_types = {
+ *     "comment"
+ *   },
+ * )
+ */
+class CommentFieldBuilder extends FieldDiffBuilderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(FieldItemListInterface $field_items) {
+    $result = array();
+
+    // Every item from $field_items is of type FieldItemInterface.
+    foreach ($field_items as $field_key => $field_item) {
+      if (!$field_item->isEmpty()) {
+        $values = $field_item->getValue();
+        // Compare the key of the comment status.
+        if ($this->configuration['compare_key']) {
+          if (isset($values['status'])) {
+            $result[$field_key][] = $values['status'];
+          }
+        }
+        // A more human friendly representation.
+        if ($this->configuration['compare_string']) {
+          if (isset($values['status'])) {
+            switch ($values['status']) {
+              case CommentItemInterface::OPEN:
+                $result[$field_key][] = $this->t('Comments for this entity are open.');
+                break;
+
+              case CommentItemInterface::CLOSED:
+                $result[$field_key][] = $this->t('Comments for this entity are closed.');
+                break;
+
+              case CommentItemInterface::HIDDEN:
+                $result[$field_key][] = $this->t('Comments for this entity are hidden.');
+                break;
+            }
+          }
+        }
+      }
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['compare_key'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare comment status key'),
+      '#default_value' => $this->configuration['compare_key'],
+    );
+    $form['compare_string'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare comment status string'),
+      '#default_value' => $this->configuration['compare_string'],
+    );
+
+    return parent::buildConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['compare_key'] = $form_state->getValue('compare_key');
+    $this->configuration['compare_string'] = $form_state->getValue('compare_string');
+
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    $default_configuration = array(
+      'compare_key' => 0,
+      'compare_string' => 1,
+    );
+    $default_configuration += parent::defaultConfiguration();
+
+    return $default_configuration;
+  }
+
+}