You are here

function lightning_roles_node_type_insert in Lightning Core 8.4

Same name and namespace in other branches
  1. 8.5 modules/lightning_roles/lightning_roles.module \lightning_roles_node_type_insert()
  2. 8 modules/lightning_roles/lightning_roles.module \lightning_roles_node_type_insert()
  3. 8.2 modules/lightning_roles/lightning_roles.module \lightning_roles_node_type_insert()
  4. 8.3 modules/lightning_roles/lightning_roles.module \lightning_roles_node_type_insert()

Implements hook_ENTITY_TYPE_insert().

1 string reference to 'lightning_roles_node_type_insert'
lightning_roles_install in modules/lightning_roles/lightning_roles.install
Implements hook_install().

File

modules/lightning_roles/lightning_roles.module, line 14
Contains hook implementations for Lightning Roles.

Code

function lightning_roles_node_type_insert(NodeTypeInterface $node_type) {

  // Don't do anything during config sync.
  if (\Drupal::isConfigSyncing()) {
    return;
  }
  $config = \Drupal::config('lightning_roles.settings')
    ->get('content_roles');
  if (empty($config)) {
    return;
  }
  $permission_map = function ($permission) use ($node_type) {
    return str_replace('?', $node_type
      ->id(), $permission);
  };
  foreach ($config as $key => $info) {
    if (empty($info['enabled'])) {
      continue;
    }
    $role_id = $node_type
      ->id() . '_' . $key;
    $role = Role::load($role_id) ?: Role::create([
      'id' => $role_id,
      'label' => str_replace('?', $node_type
        ->label(), $info['label']),
      'is_admin' => FALSE,
    ]);

    // Only grant permissions the role does not already have.
    $permissions = array_diff(array_map($permission_map, $info['permissions']), $role
      ->getPermissions());
    array_walk($permissions, [
      $role,
      'grantPermission',
    ]);
    $role
      ->save();
  }
}