permission_group-1.0.x-dev/permission_group.post_update.php

permission_group.post_update.php
<?php

/**
 * @file
 * Post update functions for Permission Group module.
 */

use Drupal\Core\Config\Entity\ConfigEntityUpdater;
use Drupal\Core\StringTranslation\PluralTranslatableMarkup;
use Drupal\permission_group\Entity\PermissionGroup;
use Drupal\user\Entity\Role;

/**
 * Remove unnecessary dependencies on permission_group module.
 */
function permission_group_post_update_fix_dependencies(&$sandbox = NULL) {
  \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'user_role', function (Role $role) {
    $dependencies = $role->getDependencies();
    // Is there a dependency on the permission group module.
    if (isset($dependencies['module']) && in_array('permission_group', $dependencies['module'], TRUE)) {
      // Re-save the role if there are no linked groups.
      if (empty($role->getThirdPartySetting('permission_group', 'groups', []))) {
        $role->unsetThirdPartySetting('permission_group', 'groups');
        return TRUE;
      }
    }
    return FALSE;
  });
}

/**
 * Calculate permission_group dependencies and remove non-existent permissions.
 */
function permission_group_post_update_update_roles(&$sandbox = NULL) {
  $cleaned_groups = [];
  $existing_permissions = array_keys(\Drupal::service('user.permissions')->getPermissions());
  \Drupal::classResolver(ConfigEntityUpdater::class)->update($sandbox, 'permission_group', function (PermissionGroup $group) use ($existing_permissions, &$cleaned_groups) {
    $removed_permissions = array_diff($group->permissions(), $existing_permissions);
    if (!empty($removed_permissions)) {
      $cleaned_groups[] = $group->label();
      \Drupal::logger('update')->notice(
        'The permission %group has had the following non-existent permission(s) removed: %permissions.',
        [
          '%group' => $group->label(),
          '%permissions' => implode(', ', $removed_permissions),
        ]
      );
    }
    $permissions = array_intersect($group->permissions(), $existing_permissions);
    $group->set('permissions', $permissions);
    return TRUE;
  });

  if (!empty($cleaned_groups)) {
    return new PluralTranslatableMarkup(
      count($cleaned_groups),
      'The permission group %group_list has had non-existent permissions removed. Check the logs for details.',
      'The permission groups %group_list have had non-existent permissions removed. Check the logs for details.',
      ['%group_list' => implode(', ', $cleaned_groups)]
    );
  }
}

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

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