You are here

public function FormModePermission::roleToFormMode in Form Mode Control 8.2

Same name and namespace in other branches
  1. 8 src/FormModePermission.php \Drupal\form_mode_control\FormModePermission::roleToFormMode()

Determine all permissions that should be shown, and update config.

Return value

array The permissions to show in the permissions form.

1 string reference to 'FormModePermission::roleToFormMode'
form_mode_control.permissions.yml in ./form_mode_control.permissions.yml
form_mode_control.permissions.yml

File

src/FormModePermission.php, line 56

Class

FormModePermission
Provides dynamic permissions for the form_mode_control module.

Namespace

Drupal\form_mode_control

Code

public function roleToFormMode() {

  // Initialising permissions.
  $permissions = [];

  // Load all form modes.

  /* @var \Drupal\Core\Entity\Entity\EntityFormDisplay[] $all_form_modes */
  $all_form_modes = $this->entityManager
    ->getStorage('entity_form_display')
    ->loadMultiple();

  // Load configuration.
  $configuration = \Drupal::configFactory()
    ->getEditable('form_mode_control.settings');

  // Load a copy of the configuration to determine what's unused.
  $config_purgatory = $configuration
    ->getRawData();
  foreach ($all_form_modes as $id_form_mode => $form_mode) {
    $machine_name_form_mode = explode('.', $id_form_mode);
    $entity_type = $machine_name_form_mode[0];
    $bundle = $machine_name_form_mode[1];
    $form_mode_id = $machine_name_form_mode[2];
    $permissions_key = 'use  The form mode ' . $form_mode_id . ' linked to  ' . $entity_type . ' entity( ' . $bundle . ' )';

    // Clear from the config purgatory, since this key will be processed.
    unset($config_purgatory[$permissions_key]);

    // If the form mode is disabled don't add it to the list and make sure it
    // is cleared from configuration.
    // TODO : ( && $form_mode_id != "default") voir si c'est possible.
    if ($form_mode
      ->status() == FALSE || !$form_mode_id) {
      $configuration
        ->clear($permissions_key);
      continue;
    }

    // If the form mode is activated, we add a permission linked to this
    // form mode.
    $title = $this
      ->t('Use the form mode %label_form_mode linked to %entity_type_id ( %bundle )', [
      '%label_form_mode' => $form_mode_id,
      '%entity_type_id' => form_mode_control_get_entity_type_label($entity_type),
      '%bundle' => form_mode_control_get_bundle_label($entity_type, $bundle),
    ]);

    // Saving configurations.
    $permissions[$permissions_key] = [
      'title' => $title,
    ];
    $configuration
      ->set($permissions_key, $id_form_mode);
  }

  // Purge anything left in the config purgatory.
  foreach ($config_purgatory as $key => $data) {
    $configuration
      ->clear($key);
  }
  $configuration
    ->save(TRUE);
  $permissions['access_all_form_modes'] = [
    'title' => $this
      ->t('Access all form modes'),
    'description' => $this
      ->t('To access to a form mode, you must add ?display=form_mode_searched,else a form mode default was launched by default.'),
  ];
  return $permissions;
}