triples_field-1.0.x-dev/triples_field.module

triples_field.module
<?php

/**
 * @file
 * Primary module hooks for Triple Field module.
 */

use Drupal\Component\Utility\Html;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Field\FieldTypeCategoryManagerInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_theme().
 */
function triples_field_theme(): array {
  $item = ['render element' => 'elements'];
  return [
    'triples_field_item' => $item,
    'triples_field_subfield' => $item,
    'triples_field_definition_list' => $item,
  ];
}

/**
 * Implements hook_help().
 */
function triples_field_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the user_dashboard_bootstrap module.
    case 'help.page.triples_field':
      $output = '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Provide an individual dashboard for each user..') . '</p>';
      $output .= '<p>' . t('Base on module Double field I just added a third field.') . '</p>';
      $output .= '<p>' . t('Help someone who is looking for a triple field and too lazy like me to create paragraphs') . '</p>';
      $output .= '<p>' . t('For more information, see the <a href=":url">online documentation for the Triple field module</a>.', [
        ':url' => 'https://www.drupal.org/project/triples_field',
      ]) . '</p>';
      return $output;
  }
}

/**
 * Prepares variables for triples-field-item template.
 */
function template_preprocess_triples_field_item(array &$variables): void {
  $variables['settings'] = $variables['elements']['#settings'];
  $variables['field_settings'] = $variables['elements']['#field_settings'];
  $subfields = array_keys($variables["field_settings"]["storage"]);
  foreach ($subfields as $subfield) {
    $variables['item'][$subfield] = $variables['elements']['#item']->$subfield;
    if (!empty($variables["settings"][$subfield]["show_label"])) {
      $variables['item'][$subfield] = [
        '#theme' => 'triples_field_subfield',
        '#subfield' => $variables['elements']['#item']->$subfield,
        '#index' => $subfield,
        '#field_name' => $subfield,
        '#label' => $variables['settings'][$subfield]["show_label"] ? $variables['field_settings'][$subfield]["label"] : '',
      ];
    }
  }
}

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

/**
 * Prepares variables for triples-field-definition-list template.
 */
function template_preprocess_triples_field_definition_list(array &$variables): void {
  $variables['settings'] = $variables['elements']['#settings'];
  $variables['field_settings'] = $variables['elements']['#field_settings'];
  $subfields = array_keys($variables["field_settings"]["storage"]);
  $variables['items'] = $variables['elements']['#items'];
  foreach ($subfields as $subfield) {
    if (!empty($variables["settings"][$subfield]["show_label"])) {
      $variables['items'][$subfield]["label"] = $variables["field_settings"][$subfield]["label"];
    }
  }
}

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

  /** @var \Drupal\field\Entity\FieldStorageConfig $entity */
  if ($entity->getType() == 'triples_field') {
    $settings = $entity->getSettings();
    $original_settings = $entity->original->getSettings();

    $isChanged = FALSE;
    foreach (array_keys($settings['storage']) as $subfield) {
      if ($settings['storage'][$subfield]['type'] != $original_settings['storage'][$subfield]['type']) {
        $isChanged = TRUE;
        break;
      }
    }
    if ($isChanged) {
      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 triples_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 triples_field_theme_suggestions_triples_field_item(array $variables): array {
  return [
    'triples_field_item__' . $variables['elements']['#field_name'],
  ];
}

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

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

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

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function triples_field_theme_suggestions_table_alter(array &$suggestions, array $variables): void {
  $id = Html::getId('triples_field--field-name');
  $field_name = $variables['attributes'][$id] ?? NULL;
  if ($field_name) {
    $suggestions[] = 'table__triples_field__' . $field_name;
  }
}

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function triples_field_theme_suggestions_details_alter(array &$suggestions, array $variables): void {
  $id = Html::getId('triples_field--field-name');
  $field_name = $variables['element']['#attributes'][$id] ?? NULL;
  if ($field_name) {
    $suggestions[] = 'details__triples_field__' . $field_name;
  }
}

/**
 * Implements hook_preprocess_HOOK().
 */
function triples_field_preprocess_field_multiple_value_form(&$variables) {
  if (!empty($variables['table']['#header']) && isset($variables['table']['#rows']) && !empty($variables["element"]['#widgetTable'])) {
    if (!empty($variables["element"]["add_more"])) {
      $variables["button"] = $variables["element"]["add_more"];
      unset($variables["element"]["add_more"]);
    }
    $variables["table"]["#header"] = $variables["element"]["#header"];
    foreach (Element::children($variables["element"]) as $delta => $element) {
      $variables["table"][$delta] = $variables["element"][$delta];
    }
    unset($variables["table"]["#rows"]);
  }
}

/**
 * Implements hook_field_type_category_info_alter().
 */
function triples_field_field_type_category_info_alter(&$definitions) {
  $definitions[FieldTypeCategoryManagerInterface::FALLBACK_CATEGORY]['libraries'][] = 'triples_field/drupal.triples-field-icon';
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc