Version 1
[yaffs-website] / web / modules / contrib / diff / src / Plugin / diff / Field / FileFieldBuilder.php
diff --git a/web/modules/contrib/diff/src/Plugin/diff/Field/FileFieldBuilder.php b/web/modules/contrib/diff/src/Plugin/diff/Field/FileFieldBuilder.php
new file mode 100644 (file)
index 0000000..e9b16f5
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+
+namespace Drupal\diff\Plugin\diff\Field;
+
+use Drupal\diff\FieldDiffBuilderBase;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Plugin to diff file fields.
+ *
+ * @FieldDiffBuilder(
+ *   id = "file_field_diff_builder",
+ *   label = @Translation("File Field Diff"),
+ *   field_types = {
+ *     "file"
+ *   },
+ * )
+ */
+class FileFieldBuilder extends FieldDiffBuilderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(FieldItemListInterface $field_items) {
+    $result = array();
+    $fileManager = $this->entityTypeManager->getStorage('file');
+
+    // 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();
+
+        // Add file name to the comparison.
+        if (isset($values['target_id'])) {
+          /** @var \Drupal\file\Entity\File $file */
+          $file = $fileManager->load($values['target_id']);
+          $result[$field_key][] = $this->t('File: :image', [
+            ':image' => $file->getFilename(),
+          ]);
+        }
+
+        // Add file id to the comparison.
+        if ($this->configuration['show_id']) {
+          if (isset($values['target_id'])) {
+            $result[$field_key][] = $this->t('File ID: :fid', [
+              ':fid' => $values['target_id'],
+            ]);
+          }
+        }
+
+        // Compare file description fields.
+        if ($this->configuration['compare_description_field']) {
+          if (isset($values['description'])) {
+            $result[$field_key][] = $this->t('Description: @description', [
+              '@description' => $values['description'],
+            ]);
+          }
+        }
+
+        // Compare Enable Display property.
+        if ($this->configuration['compare_display_field']) {
+          if (isset($values['display'])) {
+            if ($values['display'] == 1) {
+              $result[$field_key][] = $this->t('Displayed');
+            }
+            else {
+              $result[$field_key][] = $this->t('Hidden');
+            }
+          }
+        }
+
+        // Add the requested separator between resulted strings.
+        if ($this->configuration['property_separator']) {
+          $separator = $this->configuration['property_separator'] == 'nl' ? "\n" : $this->configuration['property_separator'];
+          $result[$field_key] = implode($separator, $result[$field_key]);
+        }
+      }
+
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['show_id'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show file ID'),
+      '#default_value' => $this->configuration['show_id'],
+    );
+    $form['compare_description_field'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare description field'),
+      '#default_value' => $this->configuration['compare_description_field'],
+      '#description' => $this->t('This is only used if the "Enable <em>Description</em> field" is checked in the instance settings.'),
+    );
+    $form['compare_display_field'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare display state field'),
+      '#default_value' => $this->configuration['compare_display_field'],
+      '#description' => $this->t('This is only used if the "Enable <em>Display</em> field" is checked in the field settings.'),
+    );
+    $form['property_separator'] = array(
+      '#type' => 'select',
+      '#title' => $this->t('Property separator'),
+      '#default_value' => $this->configuration['property_separator'],
+      '#description' => $this->t('Provides the ability to show properties inline or across multiple lines.'),
+      '#options' => array(
+        ', ' => $this->t('Comma (,)'),
+        '; ' => $this->t('Semicolon (;)'),
+        ' ' => $this->t('Space'),
+        'nl' => $this->t('New line'),
+      ),
+    );
+
+    return parent::buildConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['show_id'] = $form_state->getValue('show_id');
+    $this->configuration['compare_description_field'] = $form_state->getValue('compare_description_field');
+    $this->configuration['compare_display_field'] = $form_state->getValue('compare_display_field');
+    $this->configuration['property_separator'] = $form_state->getValue('property_separator');
+
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    $default_configuration = array(
+      'show_id' => 1,
+      'compare_description_field' => 0,
+      'compare_display_field' => 0,
+      'property_separator' => 'nl',
+    );
+    $default_configuration += parent::defaultConfiguration();
+
+    return $default_configuration;
+  }
+
+}