View source
<?php
namespace Drupal\name\Plugin\diff\Field;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\diff\FieldDiffBuilderBase;
use Drupal\diff\DiffEntityParser;
use Drupal\name\NameFormatterInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class NameFieldBuilder extends FieldDiffBuilderBase {
protected $formatter;
public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, DiffEntityParser $entity_parser, NameFormatterInterface $formatter) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_parser);
$this->formatter = $formatter;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('entity_type.manager'), $container
->get('diff.entity_parser'), $container
->get('name.formatter'));
}
public function build(FieldItemListInterface $items) {
$result = [];
if ($this->configuration['compare_format']) {
foreach ($items as $item) {
$result[] = (string) $this->formatter
->format($item
->filteredArray(), $this->configuration['compare_format']);
}
}
else {
foreach ($items as $item) {
$output = [];
$values = $item
->toArray();
foreach ($item
->activeComponents() as $key => $label) {
$output[] = "{$label}: {$values[$key]}";
}
$result[] = implode("\n", $output);
}
}
return $result;
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['compare_format'] = [
'#type' => 'select',
'#title' => $this
->t('Name format'),
'#default_value' => $this->configuration['compare_format'],
'#options' => name_get_custom_format_options(),
'#empty_option' => $this
->t('-- components --'),
];
return parent::buildConfigurationForm($form, $form_state);
}
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['compare_format'] = $form_state
->getValue('compare_format');
parent::submitConfigurationForm($form, $form_state);
}
public function defaultConfiguration() {
$default_configuration = [
'format' => '',
];
$default_configuration += parent::defaultConfiguration();
return $default_configuration;
}
}