Skip to content
Snippets Groups Projects

Issue #3521036: added diff field builder plugin for viewsreference fields

1 file
+ 70
0
Compare changes
  • Side-by-side
  • Inline
<?php
namespace Drupal\viewsreference\Plugin\diff\Field;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\diff\FieldDiffBuilderBase;
/**
* Plugin to diff viewsreference fields.
*
* @FieldDiffBuilder(
* id = "viewsreference_field_diff_builder",
* label = @Translation("Views Reference Field Diff"),
* field_types = {
* "viewsreference"
* },
* )
*/
class ViewsReferenceFieldBuilder extends FieldDiffBuilderBase {
/**
* {@inheritdoc}
*/
public function build(FieldItemListInterface $field_items) {
$result = [];
// 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();
if (isset($values['target_id'])) {
$result[$field_key][] = $this->t('View ID: :view_id', [
':view_id' => $values['target_id'] ?: $this->t('Empty'),
]);
}
if (isset($values['display_id'])) {
$result[$field_key][] = $this->t('View Display ID: :display_id', [
':display_id' => $values['display_id'] ?: $this->t('Empty'),
]);
}
if (isset($values['data'])) {
$data_values = $values['data'] ?
(array) unserialize($values['data'], ['allowed_classes' => FALSE]) :
[];
$data_values_filtered = array_filter($data_values, function ($value) {
return isset($value) && $value !== '';
});
if (empty($data_values_filtered)) {
$result[$field_key][] = $this->t('View Data: Empty');
}
else {
foreach ($data_values as $data_prop => $data_value) {
$result[$field_key][] = $this->t('View Data: @data_prop: @data_value', [
'@data_prop' => $data_prop,
'@data_value' => $data_value ?: $this->t('Empty'),
]);
}
}
}
}
}
return $result;
}
}
Loading