You are here

RadioactivityFieldFormatter.php in Radioactivity 8.2

File

src/Plugin/Field/FieldFormatter/RadioactivityFieldFormatter.php
View source
<?php

/**
 * @file
 * Contains \Drupal\radioactivity\Plugin\Field\FieldFormatter\RadioactivityFieldFormatter.
 */
namespace Drupal\radioactivity\Plugin\Field\FieldFormatter;

use Drupal\Component\Utility\Html;
use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\radioactivity\Incident;

/**
 * Plugin implementation of the 'radioactivity_field_widget' formatter.
 *
 * @FieldFormatter(
 *   id = "radioactivity_field_widget",
 *   label = @Translation("Radioactivity field widget"),
 *   field_types = {
 *     "radioactivity"
 *   }
 * )
 */
class RadioactivityFieldFormatter extends FormatterBase {
  static $emit_count;

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return array(
      'energy' => 10,
      'display' => 'raw',
    ) + parent::defaultSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    return array(
      // Implement settings form.
      "energy" => array(
        '#title' => 'Energy',
        '#type' => 'textfield',
        '#description' => 'The amount of energy to emit when field is visible.',
        '#pattern' => '[0-9\\.]*',
        '#default_value' => $this
          ->getSetting('energy'),
      ),
      "display" => array(
        '#title' => 'Display',
        '#type' => 'select',
        '#description' => 'Select what is visible to the end user.',
        '#options' => [
          'none' => 'Nothing - only emit',
          'raw' => 'Raw value',
        ],
        '#default_value' => $this
          ->getSetting('display'),
      ),
    ) + parent::settingsForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = [];
    $summary[] = t("Emit @energy when visible.", array(
      "@energy" => $this
        ->getSetting('energy'),
    ));
    switch ($this
      ->getSetting('display')) {
      case 'none':
        $summary[] = 'Display nothing.';
        break;
      case 'raw':
        $summary[] = 'Display a raw value.';
        break;
    }
    return $summary;
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];
    foreach ($items as $delta => $item) {
      $incident = Incident::createFromFieldItemsAndFormatter($items, $item, $this);
      if (!self::$emit_count) {
        self::$emit_count = 0;
      }
      $key = 'ra_emit_' . self::$emit_count++;
      $elements[$delta] = [
        '#attached' => [
          'library' => [
            'radioactivity/triggers',
          ],
          'drupalSettings' => [
            $key => $incident
              ->toJson(),
          ],
        ],
      ];
      switch ($this
        ->getSetting('display')) {

        // case 'none':
        // break;
        case 'raw':
          $elements[$delta]['#markup'] = $this
            ->viewValue($item);
          break;
      }
    }
    return $elements;
  }

  /**
   * Generate the output appropriate for one field item.
   *
   * @param \Drupal\Core\Field\FieldItemInterface $item
   *   One field item.
   *
   * @return string
   *   The textual output generated.
   */
  protected function viewValue(FieldItemInterface $item) {
    return $item->energy;
  }

}

Classes

Namesort descending Description
RadioactivityFieldFormatter Plugin implementation of the 'radioactivity_field_widget' formatter.