You are here

double_field.module in Double Field 4.x

Same filename and directory in other branches
  1. 8.3 double_field.module
  2. 7.2 double_field.module
  3. 7 double_field.module

Primary module hooks for Double Field module.

File

double_field.module
View source
<?php

/**
 * @file
 * Primary module hooks for Double Field module.
 */
use Drupal\Core\Entity\EntityInterface;

/**
 * Implements hook_theme().
 */
function double_field_theme() : array {
  $item = [
    'render element' => 'elements',
  ];
  return [
    'double_field_item' => $item,
    'double_field_subfield' => $item,
    'double_field_definition_list' => $item,
  ];
}

/**
 * Prepares variables for double-field-item template.
 */
function template_preprocess_double_field_item(array &$variables) : void {
  $variables['settings'] = $variables['elements']['#settings'];
  $variables['field_settings'] = $variables['elements']['#field_settings'];
  $variables['item']['first'] = $variables['elements']['#item']->first;
  $variables['item']['second'] = $variables['elements']['#item']->second;
}

/**
 * Prepares variables for double-field-item template.
 */
function template_preprocess_double_field_subfield(array &$variables) : void {
  $variables['index'] = $variables['elements']['#index'];
  $variables['value'] = $variables['elements']['#subfield'];
}

/**
 * Prepares variables for double-field-definition-list template.
 */
function template_preprocess_double_field_definition_list(array &$variables) : void {
  $variables['settings'] = $variables['elements']['#settings'];
  $variables['field_settings'] = $variables['elements']['#field_settings'];
  $variables['items'] = $variables['elements']['#items'];
}

/**
 * Implements hook_ENTITY_TYPE_update().
 */
function double_field_field_storage_config_update(EntityInterface $entity) : void {

  /* @var \Drupal\field\Entity\FieldStorageConfig  $entity */
  if ($entity
    ->getType() == 'double_field') {
    $settings = $entity
      ->getSettings();
    $original_settings = $entity->original
      ->getSettings();
    $first_type_is_changed = $settings['storage']['first']['type'] != $original_settings['storage']['first']['type'];
    $second_type_is_changed = $settings['storage']['second']['type'] != $original_settings['storage']['second']['type'];
    if ($first_type_is_changed || $second_type_is_changed) {
      Drupal::messenger()
        ->addWarning(t('Since storage type has been changed you need to verify the configuration of corresponding widget on form display page.'));
    }
  }
}

/**
 * Implements hook_validation_constraint_alter().
 */
function double_field_validation_constraint_alter(array &$definitions) : void {

  // This constraint is required to test empty boolean values.
  $definitions['NotEqualTo']['class'] = '\\Symfony\\Component\\Validator\\Constraints\\NotEqualTo';
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function double_field_theme_suggestions_double_field_item(array $variables) : array {
  return [
    'double_field_item__' . $variables['elements']['#field_name'],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK().
 *
 * @todo remove this once the 'double-field-subfield.html.twig' is removed.
 */
function double_field_theme_suggestions_double_field_subfield(array $variables) : array {
  return [
    'double_field_subfield__' . $variables['elements']['#field_name'],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function double_field_theme_suggestions_double_field_definition_list(array $variables) : array {
  return [
    'double_field_definition_list__' . $variables['elements']['#field_name'],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function double_field_theme_suggestions_item_list_alter(array &$suggestions, array $variables) : void {
  $field_name = $variables['context']['double_field']['field_name'] ?? NULL;
  if ($field_name) {
    $suggestions[] = 'item_list__double_field__' . $field_name;
  }
}

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function double_field_theme_suggestions_table_alter(array &$suggestions, array $variables) : void {
  $field_name = $variables['attributes']['double-field--field-name'] ?? NULL;
  if ($field_name) {
    $suggestions[] = 'table__double_field__' . $field_name;
  }
}