You are here

function entity_access_by_field_field_widget_form_alter in Open Social 8.5

Same name and namespace in other branches
  1. 8.9 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  2. 8 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  3. 8.2 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  4. 8.3 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  5. 8.4 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  6. 8.6 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  7. 8.7 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  8. 8.8 modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  9. 10.3.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  10. 10.0.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  11. 10.1.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()
  12. 10.2.x modules/custom/entity_access_by_field/entity_access_by_field.module \entity_access_by_field_field_widget_form_alter()

Implements hook_field_widget_form_alter().

File

modules/custom/entity_access_by_field/entity_access_by_field.module, line 180
Entity Access By Field module file.

Code

function entity_access_by_field_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) {
  $field_definition = $context['items']
    ->getFieldDefinition();
  if ($field_definition
    ->getType() != 'entity_access_field' && $field_definition
    ->getName() != 'field_visibility') {
    return;
  }
  $form_object = $form_state
    ->getFormObject();
  if (!$form_object instanceof EntityFormInterface) {
    return;
  }
  $config = \Drupal::config('entity_access_by_field.settings');

  // Load the current user.
  $account = \Drupal::currentUser();

  // Set public visibility by default.
  $entity = $form_object
    ->getEntity();
  $field_name = $field_definition
    ->getName();
  if ($entity instanceof FieldConfig || !$entity
    ->hasField($field_name)) {
    return;
  }

  // Do not check if visibility already set and user has access to override
  // this option because SM can change the visibility.
  if (!$entity
    ->get($field_name) || !$entity
    ->get($field_name)
    ->isEmpty() && $account
    ->hasPermission('override disabled public visibility')) {
    return;
  }
  $element['#default_value'] = _entity_access_by_field_get_default_visibility($entity);

  // Check if the option is enabled and the current user has no permission
  // to override disabled public visibility.
  if ($config
    ->get('disable_public_visibility') === 1 && !$account
    ->hasPermission('override disabled public visibility')) {
    switch ($entity
      ->getEntityTypeId()) {
      case 'node':
        if ($entity
          ->get($field_name)
          ->getString() !== 'public') {
          $element['public']['#disabled'] = TRUE;
          $element['#description'] = t('The public visibility setting has been disabled. In order to change the visibility to public, please contact a site manager.')
            ->render();
        }
        break;
      case 'post':

        // Remove the public option.
        unset($element['#options'][1]);
        break;
    }
  }
}