You are here

public function FormModePermission::roleToFormMode in Form Mode Control 8

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

Return value

array

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 58
Contains \Drupal\form_mode_control\FormModesPermission.

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.
  $all_form_modes = $this->entityManager
    ->getStorage('entity_form_display')
    ->loadMultiple();

  //Load configuration.
  $configuration = \Drupal::configFactory()
    ->getEditable('form_mode_control.settings');
  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];

    // if the form mode is activated
    // TODO : ( && $form_mode_id != "default") voir si c'est possible
    if ($form_mode
      ->status() == TRUE && $form_mode_id) {

      //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 ) ', array(
        '%label_form_mode' => $form_mode_id,
        '%entity_type_id' => getLabelEntityType($entity_type),
        '%bundle' => getLabelBundle($entity_type, $bundle),
      ));
      $permissions['use  The form mode ' . $form_mode_id . ' linked to  ' . $entity_type . ' entity( ' . $bundle . ' )'] = [
        'title' => $title,
      ];

      // Delete id
      if (EntityFormDisplay::load($id_form_mode)
        ->status() == FALSE) {
        \Drupal::configFactory()
          ->getEditable('form_mode_control.settings')
          ->clear($id_form_mode);

        //unset($permissions['use  The form mode ' . $form_mode_id . ' linked to  ' . $entity_type . ' entity( '.$bundle. ' )']);
      }
      $separate = ".";
      $id = "{$entity_type}{$separate}{$bundle}{$separate}{$form_mode_id}";
      if (EntityFormDisplay::load($id) == NULL) {
        \Drupal::configFactory()
          ->getEditable('form_mode_control.settings')
          ->clear($id);
        unset($permissions['use  The form mode ' . $form_mode_id . ' linked to  ' . $entity_type . ' entity( ' . $bundle . ' )']);
      }
      $separate = ".";
      $id = "{$entity_type}{$separate}{$bundle}{$separate}{$form_mode_id}";

      //Saving configurations.
      $permissions_ = 'use  The form mode ' . $form_mode_id . ' linked to  ' . $entity_type . ' entity( ' . $bundle . ' )';
      $configuration
        ->set($permissions_, $id)
        ->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;
}