eca-1.0.x-dev/modules/content/eca_content.module

modules/content/eca_content.module
<?php

/**
 * @file
 * ECA Content submodule.
 */

/* @noinspection ClassConstantCanBeUsedInspection */
if (!class_exists('Drupal\Core\Field\FieldUpdateActionBase', FALSE)) {
  /* @noinspection PhpIgnoredClassAliasDeclaration */
  class_alias('Drupal\eca_content\Plugin\Action\FieldUpdateActionBase', 'Drupal\Core\Field\FieldUpdateActionBase');
}

use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\FieldableEntityInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\eca_content\HookHandler;

/**
 * Eca content hook handler.
 *
 * @return \Drupal\eca_content\HookHandler
 *   The content hook handler.
 */
function _eca_content_hook_handler(): HookHandler {
  return \Drupal::service('eca_content.hook_handler');
}

/**
 * Implements hook_entity_bundle_create().
 */
function eca_content_entity_bundle_create(string $entity_type_id, string $bundle): void {
  _eca_content_hook_handler()->bundleCreate($entity_type_id, $bundle);
}

/**
 * Implements hook_entity_bundle_delete().
 */
function eca_content_entity_bundle_delete(string $entity_type_id, string $bundle): void {
  _eca_content_hook_handler()->bundleDelete($entity_type_id, $bundle);
}

/**
 * Implements hook_entity_create().
 */
function eca_content_entity_create(EntityInterface $entity): void {
  _eca_content_hook_handler()->create($entity);
}

/**
 * Implements hook_entity_revision_create().
 */
function eca_content_entity_revision_create(EntityInterface $new_revision, EntityInterface $entity, ?bool $keep_untranslatable_fields): void {
  _eca_content_hook_handler()->revisionCreate($new_revision, $entity, $keep_untranslatable_fields);
}

/**
 * Implements hook_entity_preload().
 */
function eca_content_entity_preload(array $ids, string $entity_type_id): void {
  _eca_content_hook_handler()->preload($ids, $entity_type_id);
}

/**
 * Implements hook_entity_load().
 */
function eca_content_entity_load(array $entities, string $entity_type_id): void {
  _eca_content_hook_handler()->load($entities, $entity_type_id);
}

/**
 * Implements hook_entity_storage_load().
 */
function eca_content_entity_storage_load(array $entities, string $entity_type): void {
  _eca_content_hook_handler()->storageLoad($entities, $entity_type);
}

/**
 * Implements hook_entity_presave().
 */
function eca_content_entity_presave(EntityInterface $entity): void {
  _eca_content_hook_handler()->presave($entity);
}

/**
 * Implements hook_entity_insert().
 */
function eca_content_entity_insert(EntityInterface $entity): void {
  _eca_content_hook_handler()->insert($entity);
}

/**
 * Implements hook_entity_update().
 */
function eca_content_entity_update(EntityInterface $entity): void {
  _eca_content_hook_handler()->update($entity);
}

/**
 * Implements hook_entity_translation_create().
 */
function eca_content_entity_translation_create(EntityInterface $translation): void {
  _eca_content_hook_handler()->translationCreate($translation);
}

/**
 * Implements hook_entity_translation_insert().
 */
function eca_content_entity_translation_insert(EntityInterface $translation): void {
  _eca_content_hook_handler()->translationInsert($translation);
}

/**
 * Implements hook_entity_translation_delete().
 */
function eca_content_entity_translation_delete(EntityInterface $translation): void {
  _eca_content_hook_handler()->translationDelete($translation);
}

/**
 * Implements hook_entity_predelete().
 */
function eca_content_entity_predelete(EntityInterface $entity): void {
  _eca_content_hook_handler()->predelete($entity);
}

/**
 * Implements hook_entity_delete().
 */
function eca_content_entity_delete(EntityInterface $entity): void {
  _eca_content_hook_handler()->delete($entity);
}

/**
 * Implements hook_entity_revision_delete().
 */
function eca_content_entity_revision_delete(EntityInterface $entity): void {
  _eca_content_hook_handler()->revisionDelete($entity);
}

/**
 * Implements hook_entity_view().
 */
function eca_content_entity_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, string $view_mode): void {
  _eca_content_hook_handler()->view($build, $entity, $display, $view_mode);
}

/**
 * Implements hook_entity_prepare_view().
 */
function eca_content_entity_prepare_view(string $entity_type_id, array $entities, array $displays, string $view_mode): void {
  _eca_content_hook_handler()->prepareView($entity_type_id, $entities, $displays, $view_mode);
}

/**
 * Implements hook_entity_prepare_form().
 */
function eca_content_entity_prepare_form(EntityInterface &$entity, string $operation, FormStateInterface $form_state): void {
  _eca_content_hook_handler()->prepareForm($entity, $operation, $form_state);
}

/**
 * Implements hook_entity_field_values_init().
 */
function eca_content_entity_field_values_init(FieldableEntityInterface $entity): void {
  _eca_content_hook_handler()->fieldValuesInit($entity);
}

/**
 * Implements hook_entity_view_mode_alter().
 */
function eca_content_entity_view_mode_alter(string &$view_mode, EntityInterface $entity): void {
  _eca_content_hook_handler()->viewModeAlter($view_mode, $entity);
}

/**
 * Implements hook_entity_type_build().
 */
function eca_content_entity_type_build(array &$entity_types): void {
  /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */
  foreach ($entity_types as $entity_type) {
    if ($entity_type->entityClassImplements(ContentEntityInterface::class)) {
      // Add ECA's chameleon validation constraint to the content entity.
      $entity_type->addConstraint('EcaContent');
    }
  }
}

/**
 * Implements hook_ENTITY_TYPE_insert() for field_config entities.
 *
 * Updates existing ECA configuration dependencies that already refer to field
 * configurations having the same field name.
 *
 * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
 * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
 * @throws \Drupal\Core\Entity\EntityStorageException
 */
function eca_content_field_config_insert(EntityInterface $entity): void {
  if (!in_array('new_field_config', \Drupal::config('eca.settings')->get('dependency_calculation') ?? [], TRUE)) {
    // Nothing to do.
    return;
  }

  $eca_configs = \Drupal::entityTypeManager()->getStorage('eca')->loadMultiple();
  if (empty($eca_configs)) {
    // No ECA config present, thus nothing to do here.
    return;
  }

  // List of updated ECA configs that need to be saved.
  $to_save = [];

  /**
   * @var \Drupal\field\FieldConfigInterface $field_config
   */
  $field_config = $entity;
  $field_name = $field_config->getName();
  $entity_type_id = $field_config->getTargetEntityTypeId();
  $field_storage_config_id = "field.storage.$entity_type_id.$field_name";
  $field_field_config_id = 'field.field.' . $field_config->id();

  /**
   * @var \Drupal\eca\Entity\Eca $eca
   */
  foreach ($eca_configs as $eca) {
    $eca_dependencies = $eca->getDependencies();
    foreach ($eca_dependencies as $type => $dependencies) {
      if (!in_array($type, ['config', 'module'])) {
        continue;
      }
      $uses_field = in_array($field_storage_config_id, $dependencies, TRUE);
      if ($uses_field && !in_array($field_field_config_id, $dependencies, TRUE)) {
        $eca->addRuntimeDependency($field_config->getConfigDependencyKey(), $field_field_config_id);
        $to_save[$eca->id()] = $eca;
      }
    }
  }

  /**
   * @var \Drupal\eca\Entity\Eca $eca
   */
  foreach ($to_save as $eca) {
    $eca->save();
  }
}

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

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