group_permissions-1.0.0-alpha1/group_permissions.module

group_permissions.module
<?php

/**
 * @file
 * Hooks for handling group_permissions module features.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\group\Entity\GroupInterface;
use Drupal\group\Entity\GroupTypeInterface;

/**
 * Implements hook_help().
 */
function group_permissions_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the group_permissions module.
    case 'help.page.group_permissions':
      $output = '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('It is an extension of Drupal Group module. <br> Group permissions module allows overriding permissions per group.') . '</p>';
      $output .= '<h3>' . t('Uses') . '</h3>';
      $output .= '<p>' . t('Drush en group_permissions') . '</p>';
      $output .= '<p>' . t('Create a group') . '</p>';
      $output .= '<p>' . t('Open group/1/permissions') . '</p>';
      $output .= '<p>' . t('Choose "override" and set custom permissions') . '</p>';
      return $output;
  }
}

/**
 * Implements hook_entity_delete().
 */
function group_permissions_group_delete(GroupInterface $group) {
  if ($group_permissions = \Drupal::service('group_permission.group_permissions_manager')->loadByGroup($group)) {
    $group_permissions->delete();
  }
}

/**
 * Implements hook_user_cancel().
 */
function group_permissions_user_cancel($edit, $account, $method) {
  // Reassign all group permissions revisions to the super user.
  if ($method === 'user_cancel_reassign') {
    /** @var \Drupal\group_permissions\Entity\Storage\GroupPermissionStorageInterface $storage */
    $storage = \Drupal::entityTypeManager()->getStorage('group_permission');

    // Group permission ids created by the account.
    $group_permissions_ids = $storage->getQuery()
      ->accessCheck(FALSE)
      ->condition('uid', $account->id())
      ->execute();

    // Prepare the revision ids for the group permissions created by the user.
    // Consider also the case where the user is the owner of the group
    // permission entity but the last revision is not its own anymore.
    $revision_ids = array_unique(array_merge($storage->userRevisionIds($account), array_keys($group_permissions_ids)));
    if ($revision_ids) {
      batch_set(['operations' => [['_group_permissions_mass_reassign_to_super_user', [$revision_ids]]]]);
    }
  }
}

/**
 * Implements callback_batch_operation().
 *
 * Mass reassigns ownership of group permissions revisions to the super user.
 *
 * @param int[] $ids
 *   An array of group permissions revision IDs.
 */
function _group_permissions_mass_reassign_to_super_user(array $ids, &$context) {
  if (!isset($context['sandbox']['progress'])) {
    $context['sandbox']['progress'] = 0;
    $context['sandbox']['max'] = count($ids);
    $context['sandbox']['ids'] = $ids;
  }

  // Try to update 10 group permissions revisions at a time.
  $ids = array_slice($context['sandbox']['ids'], $context['sandbox']['progress'], 10);

  /** @var \Drupal\group_permissions\Entity\Storage\GroupPermissionStorageInterface $storage */
  $storage = \Drupal::entityTypeManager()->getStorage('group_permission');

  /** @var \Drupal\group_permissions\Entity\GroupPermissionInterface $group_permission_revision */
  foreach ($storage->loadMultipleRevisions($ids) as $group_permission_revision) {
    $group_permission_revision->set('uid', 1);
    $group_permission_revision->set('revision_user', 1);
    $group_permission_revision->validate();
    $storage->save($group_permission_revision);
    $context['sandbox']['progress']++;
  }

  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
  }
}

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function group_permissions_form_group_type_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  /** @var \Drupal\group\Entity\GroupTypeInterface $group_type */
  $group_type = $form_state->getFormObject()->getEntity();
  $form['group_permissions_enabled'] = [
    '#type' => 'checkbox',
    '#title' => t('Enable group permissions'),
    '#description' => t('If checked, privileged users will be able to set the permissions per group.'),
    '#default_value' => $group_type->getThirdPartySetting('group_permissions', 'enabled', 0),
    '#weight' => 1,
  ];

  $form['#entity_builders'][] = '_group_permissions_form_group_type_form_builder';
}

/**
 * Form builder for the group type form.
 *
 * @param string $entity_type
 *   Entity type.
 * @param \Drupal\group\Entity\GroupTypeInterface $group_type
 *   Group type.
 * @param array $form
 *   Form.
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 *   Form state.
 */
function _group_permissions_form_group_type_form_builder($entity_type, GroupTypeInterface $group_type, &$form, FormStateInterface $form_state) {
  $form_state->getValue('group_permissions_enabled') === 1
    ? $group_type->setThirdPartySetting('group_permissions', 'enabled', 1)
    : $group_type->unsetThirdPartySetting('group_permissions', 'enabled');
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc