123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
- use Drupal\Core\Entity\EntityTypeManagerInterface;
- use Drupal\Core\Field\FieldDefinitionInterface;
- use Drupal\Core\Field\FieldItemInterface;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\Language\LanguageInterface;
- use Drupal\Core\Language\LanguageManagerInterface;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- /**
- * Plugin implementation of the 'language' formatter.
- *
- * @FieldFormatter(
- * id = "language",
- * label = @Translation("Language"),
- * field_types = {
- * "language"
- * }
- * )
- */
- class LanguageFormatter extends StringFormatter {
- /**
- * The language manager.
- *
- * @var \Drupal\Core\Language\LanguageManagerInterface
- */
- protected $languageManager;
- /**
- * Constructs a LanguageFormatter instance.
- *
- * @param string $plugin_id
- * The plugin_id for the formatter.
- * @param mixed $plugin_definition
- * The plugin implementation definition.
- * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
- * The definition of the field to which the formatter is associated.
- * @param array $settings
- * The formatter settings.
- * @param string $label
- * The formatter label display setting.
- * @param string $view_mode
- * The view mode.
- * @param array $third_party_settings
- * Any third party settings settings.
- * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
- * The entity type manager.
- * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
- * The language manager.
- */
- public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager) {
- parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings, $entity_type_manager);
- $this->languageManager = $language_manager;
- }
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
- return new static(
- $plugin_id,
- $plugin_definition,
- $configuration['field_definition'],
- $configuration['settings'],
- $configuration['label'],
- $configuration['view_mode'],
- $configuration['third_party_settings'],
- $container->get('entity_type.manager'),
- $container->get('language_manager')
- );
- }
- /**
- * {@inheritdoc}
- */
- public static function defaultSettings() {
- $settings = parent::defaultSettings();
- $settings['native_language'] = FALSE;
- return $settings;
- }
- /**
- * {@inheritdoc}
- */
- public function settingsForm(array $form, FormStateInterface $form_state) {
- $form = parent::settingsForm($form, $form_state);
- $form['native_language'] = [
- '#title' => $this->t('Display in native language'),
- '#type' => 'checkbox',
- '#default_value' => $this->getSetting('native_language'),
- ];
- return $form;
- }
- /**
- * {@inheritdoc}
- */
- public function settingsSummary() {
- $summary = parent::settingsSummary();
- if ($this->getSetting('native_language')) {
- $summary[] = $this->t('Displayed in native language');
- }
- return $summary;
- }
- /**
- * {@inheritdoc}
- */
- protected function viewValue(FieldItemInterface $item) {
- // The 'languages' cache context is not necessary because the language is
- // either displayed in its configured form (loaded directly from config
- // storage by LanguageManager::getLanguages()) or in its native language
- // name. That only depends on formatter settings and no language condition.
- $languages = $this->getSetting('native_language') ? $this->languageManager->getNativeLanguages(LanguageInterface::STATE_ALL) : $this->languageManager->getLanguages(LanguageInterface::STATE_ALL);
- return [
- '#plain_text' => $item->language && isset($languages[$item->language->getId()]) ? $languages[$item->language->getId()]->getName() : '',
- ];
- }
- }
|