You are here

function social_group_secret_form_node_form_alter in Open Social 10.3.x

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  2. 8.6 modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  3. 8.7 modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  4. 8.8 modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  5. 10.0.x modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  6. 10.1.x modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()
  7. 10.2.x modules/social_features/social_group/modules/social_group_secret/social_group_secret.module \social_group_secret_form_node_form_alter()

Implements hook_form_FORM_ID_alter().

Hides secret groups for users that are not a member unless the content is already in the group.

File

modules/social_features/social_group/modules/social_group_secret/social_group_secret.module, line 159
The Social group secret module.

Code

function social_group_secret_form_node_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  // The is_new field may not be set for new entities.
  $editing = isset($form['is_new']) && !$form['is_new']['#value'];
  if (!$editing) {
    return;
  }
  $user = \Drupal::currentUser();
  if (!empty($form["groups"]["widget"]['#default_value'])) {
    $current_group = $form["groups"]["widget"]['#default_value'][0];
  }
  $secret_group = t('Secret group')
    ->__toString();

  // The options are either a list of group ids when there is only a single
  // group type or they're nested per group type.
  if (isset($form["groups"]["widget"]["#options"][$secret_group])) {
    $group_ids = array_keys($form["groups"]["widget"]["#options"][$secret_group]);
    $groups = Group::loadMultiple($group_ids);

    /** @var \Drupal\group\Entity\Group $group */
    foreach ($groups as $group) {
      if (isset($current_group) && $group
        ->id() === $current_group) {
        continue;
      }
      if (!$group
        ->hasPermission('view group', $user)) {
        unset($form["groups"]["widget"]["#options"][$secret_group][$group
          ->id()]);
      }
    }
    if (empty($form["groups"]["widget"]["#options"][$secret_group])) {
      unset($form["groups"]["widget"]["#options"][$secret_group]);
    }
  }
  else {
    $group_ids = array_filter(array_keys($form["groups"]["widget"]["#options"]), 'is_numeric');
    $groups = Group::loadMultiple($group_ids);

    /** @var \Drupal\group\Entity\Group $group */
    foreach ($groups as $group) {

      // If this is a list of one group type and it's not a secret group then
      // we're done.
      if ($group
        ->bundle() !== 'secret_group') {
        break;
      }
      if (isset($current_group) && $group
        ->id() === $current_group) {
        continue;
      }
      if (!$group
        ->hasPermission('view group', $user)) {
        unset($form["groups"]["widget"]["#options"][$group
          ->id()]);
      }
    }
  }
}