backup_permissions-2.0.0/backup_permissions.module

backup_permissions.module
<?php

/**
 * @file
 * Module that provide functionality to store permission states.
 */

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_alter() for user_admin_permissions().
 */
function backup_permissions_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $config = \Drupal::config('backup_permissions.settings');
  if (($form_id == 'user_admin_permissions') && ($config->get('auto_backup_config') == 1)) {
    array_unshift($form['#submit'], 'backup_permissions_save_permissions_state');
  }
}

/**
 * Form submission handler for creating backup before updating permissions.
 *
 * @see user_admin_permissions()
 */
function backup_permissions_save_permissions_state(&$form, FormStateInterface $form_state) {
  $selected_roles = user_role_names();
  // Adding default title.
  $date = \Drupal::service('date.formatter')->format(time(), 'custom', 'M-d');
  $title = 'Backup-' . $date;
  // Getting permissions of selected roles.
  $backup = backup_permissions_get_data($selected_roles);
  // Serialising permissions state and storing in database.
  $backup = serialize($backup);
  // Save the submitted entry.
  $entry = [
    'title' => $title,
    'created' => time(),
    'backup' => $backup,
  ];
  $db = \Drupal::database();
  $db->insert('backup_permissions')
    ->fields($entry)
    ->execute();
}

/**
 * Returns associative array of permission data.
 *
 * @param array $seleted_roles
 *   Array of roles to get permissions.
 *
 * @return array
 *   Associative array of permissions and roles.
 */
function backup_permissions_get_data(array $seleted_roles) {
  $roles = user_roles();
  $perm_role = [];
  $permission_handler = \Drupal::service('user.permissions');
  $permissions = $permission_handler->getPermissions();

  foreach ($permissions as $perm => $perm_item) {
    // Fill in default values for the permission.
    $row = [
      'name' => $perm,
    ];

    // Get the roles object data.
    foreach ($seleted_roles as $rid => $value) {
      $role = $roles[$rid];
      $name = $role->id();
      $perm_role[$rid] = $name;

      // Builds arrays for checked boxes for each role.
      if ($role->hasPermission($perm) || $role->isAdmin()) {
        $row[$name] = "Yes";
      }
      else {
        $row[$name] = "No";
      }
    }
    $rows[] = $row;
  }
  $data = [];
  $data['roles'] = $perm_role;
  $data['permissions'] = $rows;

  return $data;
}

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

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