You are here

function forms_steps_entity_type_alter in Forms Steps 8

Implements hook_entity_type_build().

Manage all form modes and define FormClasses for each specific types.

File

./forms_steps.module, line 90
Hook implementations for the forms_steps module.

Code

function forms_steps_entity_type_alter(array &$entity_types) {

  /** @var \Drupal\forms_steps\Service\FormsStepsManager $formsStepsManager */
  $formsStepsManager = \Drupal::service('forms_steps.manager');
  $available_entity_types = $formsStepsManager
    ->getAllFormModesDefinitions();

  // We parse each entity type.
  foreach ($available_entity_types as $entity_type_id => $form_modes) {

    // We parse and set each form_mode.
    foreach ($form_modes as $form_mode) {

      // Retrieving the form class.
      $form_class = $entity_types[$entity_type_id]
        ->getFormClass($form_mode);

      // If no form class has been found, we try to fallback on a default operation form class.
      if (!$form_class) {
        $operations = [
          'register',
          'default',
          'add',
        ];
        foreach ($operations as $operation) {
          $form_class = $entity_types[$entity_type_id]
            ->getFormClass($operation);
          if ($form_class) {
            break;
          }
        }
      }

      // If we still have no form class, the user has to define it's own form class.
      if (!$form_class) {
        \Drupal::messenger()
          ->addError("Forms steps could not determine a default form class for '" . $form_mode . "' form mode on " . $entity_type_id . " entity type, please define your own form class. See README.md for proper instructions.");
      }
      else {
        $entity_types[$entity_type_id]
          ->setFormClass($form_mode, $form_class);
      }
    }
  }
}