You are here

text_summary_options.module in Summary Options 8

Same filename and directory in other branches
  1. 7 text_summary_options.module

Provides options for 'Long Text With Summary' widget.

File

text_summary_options.module
View source
<?php

use Drupal\Core\Form\FormStateInterface;
use Drupal\field\Entity\FieldConfig;

/**
 * @file
 * Provides options for 'Long Text With Summary' widget.
 */

/**
 * Implements hook_form_FORM_ID_form_alter().
 */
function text_summary_options_form_field_config_edit_form_alter(array &$form, FormStateInterface $form_state) {
  $field = $form_state
    ->getFormObject()
    ->getEntity();
  if ($field
    ->getType() == 'text_with_summary') {
    $form['third_party_settings']['text_summary_options'] = [
      '#type' => 'container',
      '#tree' => TRUE,
    ];
    $form['third_party_settings']['text_summary_options']['show_summary'] = [
      '#type' => 'checkbox',
      '#title' => t('Show summary'),
      '#default_value' => (int) $field
        ->getThirdPartySetting('text_summary_options', 'show_summary'),
      '#description' => t('Display the summary field by default.'),
    ];
    if (version_compare(\Drupal::VERSION, 8.800000000000001, '<')) {
      $form['third_party_settings']['text_summary_options']['required_summary'] = [
        '#type' => 'checkbox',
        '#title' => t('Mark Summary as required'),
        '#default_value' => (int) $field
          ->getThirdPartySetting('text_summary_options', 'required_summary'),
        '#description' => t('Display the summary field by default.'),
      ];
    }
    $form['third_party_settings']['text_summary_options']['summary_help'] = [
      '#type' => 'textarea',
      '#title' => t('Summary help text'),
      '#description' => t('Help text to display for the summary.'),
      '#default_value' => $field
        ->getThirdPartySetting('text_summary_options', 'summary_help'),
    ];
  }
}

/**
 * Implements hook_field_widget_form_alter().
 */
function text_summary_options_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
  $field_definition = $context['items']
    ->getFieldDefinition();

  // Base fields are not configurable.
  if (!$field_definition instanceof FieldConfig) {
    return;
  }

  // We can't use the protected isDefaultValueWidget() method.
  $is_default_value_widget = (bool) $form_state
    ->get('default_value_widget');
  if ($field_definition
    ->getType() == 'text_with_summary' && !$is_default_value_widget) {
    $field_configuration = $field_definition
      ->getConfig($field_definition
      ->getTargetBundle());
    $show_summary_setting = (int) $field_configuration
      ->getThirdPartySetting('text_summary_options', 'show_summary');
    if (version_compare(\Drupal::VERSION, 8.800000000000001, '<')) {
      $required_summary_setting = (int) $field_configuration
        ->getThirdPartySetting('text_summary_options', 'required_summary');
    }
    else {
      $required_summary_setting = FALSE;
    }
    $summary_help_setting = $field_configuration
      ->getThirdPartySetting('text_summary_options', 'summary_help');
    if ($show_summary_setting) {
      unset($element['summary']['#attached']);
    }
    if ($required_summary_setting) {
      $element['summary']['#required'] = TRUE;

      /*
       * Remove conflicting advice from the field's default description
       * because the field cannot be left blank if it is marked required.
       */
      $default_summary_text = t('Leave blank to use trimmed value of full text as the summary.');
      if ($element['summary']['#description'] == $default_summary_text) {
        unset($element['summary']['#description']);
      }
    }
    if (!empty($summary_help_setting)) {
      $element['summary']['#description'] = $summary_help_setting;
    }
  }
}