TextWithSummaryItem.php

Same filename and directory in other branches
  1. 9 core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php
  2. 8.9.x core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php
  3. 10 core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php

Namespace

Drupal\text\Plugin\Field\FieldType

File

core/modules/text/src/Plugin/Field/FieldType/TextWithSummaryItem.php

View source
<?php

namespace Drupal\text\Plugin\Field\FieldType;

use Drupal\Core\Field\Attribute\FieldType;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\TypedData\DataDefinition;

/**
 * Plugin implementation of the 'text_with_summary' field type.
 */
class TextWithSummaryItem extends TextItemBase {
  
  /**
   * {@inheritdoc}
   */
  public static function defaultFieldSettings() {
    return [
      'display_summary' => 0,
      'required_summary' => FALSE,
    ] + parent::defaultFieldSettings();
  }
  
  /**
   * {@inheritdoc}
   */
  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
    $properties = parent::propertyDefinitions($field_definition);
    $properties['summary'] = DataDefinition::create('string')->setLabel(new TranslatableMarkup('Summary'));
    $properties['summary_processed'] = DataDefinition::create('string')->setLabel(new TranslatableMarkup('Processed summary'))
      ->setDescription(new TranslatableMarkup('The summary text with the text format applied.'))
      ->setComputed(TRUE)
      ->setClass('\\Drupal\\text\\TextProcessed')
      ->setSetting('text source', 'summary');
    return $properties;
  }
  
  /**
   * {@inheritdoc}
   */
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    return [
      'columns' => [
        'value' => [
          'type' => 'text',
          'size' => 'big',
        ],
        'summary' => [
          'type' => 'text',
          'size' => 'big',
        ],
        'format' => [
          'type' => 'varchar_ascii',
          'length' => 255,
        ],
      ],
      'indexes' => [
        'format' => [
          'format',
        ],
      ],
    ];
  }
  
  /**
   * {@inheritdoc}
   */
  public function isEmpty() {
    $value = $this->get('summary')
      ->getValue();
    return parent::isEmpty() && ($value === NULL || $value === '');
  }
  
  /**
   * {@inheritdoc}
   */
  public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
    $element = parent::fieldSettingsForm($form, $form_state);
    $settings = $this->getSettings();
    $element['display_summary'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Summary input'),
      '#default_value' => $settings['display_summary'],
      '#description' => $this->t('This allows authors to input an explicit summary, to be displayed instead of the automatically trimmed text when using the "Summary or trimmed" display type.'),
    ];
    $element['required_summary'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Require summary'),
      '#description' => $this->t('The summary will also be visible when marked as required.'),
      '#default_value' => $settings['required_summary'],
    ];
    return $element;
  }
  
  /**
   * {@inheritdoc}
   */
  public function getConstraints() {
    $constraints = parent::getConstraints();
    if ($this->getSetting('required_summary')) {
      $manager = $this->getTypedDataManager()
        ->getValidationConstraintManager();
      $constraints[] = $manager->create('ComplexData', [
        'summary' => [
          'NotNull' => [
            'message' => $this->t('The summary field is required for @name', [
              '@name' => $this->getFieldDefinition()
                ->getLabel(),
            ]),
          ],
        ],
      ]);
    }
    return $constraints;
  }

}

Classes

Title Deprecated Summary
TextWithSummaryItem Plugin implementation of the 'text_with_summary' field type.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.