Version 1
[yaffs-website] / web / modules / contrib / diff / src / Plugin / diff / Field / ImageFieldBuilder.php
diff --git a/web/modules/contrib/diff/src/Plugin/diff/Field/ImageFieldBuilder.php b/web/modules/contrib/diff/src/Plugin/diff/Field/ImageFieldBuilder.php
new file mode 100644 (file)
index 0000000..72a049f
--- /dev/null
@@ -0,0 +1,167 @@
+<?php
+
+namespace Drupal\diff\Plugin\diff\Field;
+
+use Drupal\diff\FieldDiffBuilderBase;
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Plugin to diff image fields.
+ *
+ * @FieldDiffBuilder(
+ *   id = "image_field_diff_builder",
+ *   label = @Translation("Image Field Diff"),
+ *   field_types = {
+ *     "image"
+ *   },
+ * )
+ */
+class ImageFieldBuilder 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();
+
+        // Compare file names.
+        if (isset($values['target_id'])) {
+          /** @var \Drupal\file\Entity\File $image */
+          $image = $fileManager->load($values['target_id']);
+          $result[$field_key][] = $this->t('Image: @image', [
+            '@image' => $image->getFilename(),
+          ]);
+        }
+
+        // Compare Alt fields.
+        if ($this->configuration['compare_alt_field']) {
+          if (isset($values['alt'])) {
+            $result[$field_key][] = $this->t('Alt: @alt', [
+              '@alt' => $values['alt'],
+            ]);
+          }
+        }
+
+        // Compare Title fields.
+        if ($this->configuration['compare_title_field']) {
+          if (!empty($values['title'])) {
+            $result[$field_key][] = $this->t('Title: @title', [
+              '@title' => $values['title'],
+            ]);
+          }
+        }
+
+        // Compare file id.
+        if ($this->configuration['show_id']) {
+          if (isset($values['target_id'])) {
+            $result[$field_key][] = $this->t('File ID: @fid', [
+              '@fid' => $values['target_id'],
+            ]);
+          }
+        }
+
+        $separator = $this->configuration['property_separator'] == 'nl' ? "\n" : $this->configuration['property_separator'];
+        $result[$field_key] = implode($separator, $result[$field_key]);
+
+        // EXPERIMENTAL: Attach thumbnail image data.
+        if ($this->configuration['show_thumbnail']) {
+          if (isset($values['target_id'])) {
+            $storage = $this->entityTypeManager->getStorage('entity_form_display');
+            $display = $storage->load($field_items->getFieldDefinition()->getTargetEntityTypeId() . '.' . $field_items->getEntity()->bundle() . '.default');
+            if ($image_field = $display->getComponent($field_item->getFieldDefinition()->getName())) {
+              $image = $fileManager->load($values['target_id']);
+
+              $image_style[$field_key]['#thumbnail'] = array(
+                '#theme' => 'image_style',
+                '#uri' => $image->getFileUri(),
+                '#style_name' => $image_field['settings']['preview_image_style'],
+              );
+              $result = array_merge($result, $image_style);
+            }
+          }
+        }
+      }
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['show_id'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show image ID'),
+      '#default_value' => $this->configuration['show_id'],
+    );
+    $form['compare_alt_field'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare <em>Alt</em> field'),
+      '#default_value' => $this->configuration['compare_alt_field'],
+      '#description' => $this->t('This is only used if the "Enable <em>Alt</em> field" is checked in the instance settings.'),
+    );
+    $form['compare_title_field'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Compare <em>Title</em> field'),
+      '#default_value' => $this->configuration['compare_title_field'],
+      '#description' => $this->t('This is only used if the "Enable <em>Title</em> field" is checked in the instance 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'),
+      ),
+    );
+    $form['show_thumbnail'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Show image thumbnail'),
+      '#default_value' => $this->configuration['show_thumbnail'],
+      '#description' => $this->t('Displays the image field as thumbnail.'),
+    ];
+
+    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_alt_field'] = $form_state->getValue('compare_alt_field');
+    $this->configuration['compare_title_field'] = $form_state->getValue('compare_title_field');
+    $this->configuration['property_separator'] = $form_state->getValue('property_separator');
+    $this->configuration['show_thumbnail'] = $form_state->getValue('show_thumbnail');
+
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    $default_configuration = array(
+      'show_id' => 0,
+      'compare_alt_field' => 1,
+      'compare_title_field' => 1,
+      'property_separator' => 'nl',
+      'show_thumbnail' => 1,
+    );
+    $default_configuration += parent::defaultConfiguration();
+
+    return $default_configuration;
+  }
+
+}