You are here

function field_permissions_form_field_config_edit_form_alter in Field Permissions 8.2

Same name and namespace in other branches
  1. 8 field_permissions.module \field_permissions_form_field_config_edit_form_alter()

Implements hook_form_FORM_ID_alter().

See also

field_permissions_permissions_matrix()

File

./field_permissions.module, line 72
Contains field_permissions.module.

Code

function field_permissions_form_field_config_edit_form_alter(&$form, FormStateInterface $form_state) {
  $account = \Drupal::currentUser();

  /** @var \Drupal\field\FieldConfigInterface $field */
  $field = $form_state
    ->getFormObject()
    ->getEntity();
  if (!$account
    ->hasPermission('administer field permissions')) {
    return $form;
  }

  // Remove on comment field.
  if (FieldPermissionsService::isCommentField($field)) {
    return $form;
  }
  $form['fid'] = [
    '#type' => 'hidden',
    '#value' => $field
      ->id(),
  ];
  $form['field']['field_permissions'] = [
    '#weight' => -10,
  ];

  // Always add the 'not set' option, which isn't implemented as a plugin.
  $options = [
    FieldPermissionTypeInterface::ACCESS_PUBLIC => t('Not set'),
  ];
  $descriptions = [
    FieldPermissionTypeInterface::ACCESS_PUBLIC => [
      '#description' => t('Field inherits content permissions.'),
    ],
  ];
  $definitions = \Drupal::service('plugin.field_permissions.types.manager')
    ->getDefinitions();
  foreach ($definitions as $id => $plugin) {
    $options[$id] = $plugin['title'];
    $descriptions[$id] = [
      '#description' => $plugin['description'],
    ];
  }
  $form['field']['field_permissions']['type'] = [
    '#title' => t('Field visibility and permissions'),
    '#description' => t('<strong>These permissions apply to all instances of this field.</strong>'),
    '#type' => 'radios',
    '#options' => $options,
    '#default_value' => \Drupal::service('field_permissions.permissions_service')
      ->fieldGetPermissionType($field
      ->getFieldStorageDefinition()),
  ];

  // Add in the descriptions.
  $form['field']['field_permissions']['type'] += $descriptions;
  $form['actions']['submit']['#submit'][] = 'field_permission_field_config_edit_form_submit';
  $form['#entity_builders'][] = 'field_permissions_field_config_edit_form_builder';

  // Allow each plugin to add to or alter the form.
  foreach ($definitions as $definition) {
    $plugin = \Drupal::service('plugin.field_permissions.types.manager')
      ->createInstance($definition['id'], [], $field
      ->getFieldStorageDefinition());
    if ($plugin instanceof AdminFormSettingsInterface) {
      $plugin
        ->buildAdminForm($form, $form_state, \Drupal::service('entity_type.manager')
        ->getStorage('user_role'));
    }
  }
}