You are here

entity_access_by_field.install in Open Social 8.6

Entity Access By Field module install file.

File

modules/custom/entity_access_by_field/entity_access_by_field.install
View source
<?php

/**
 * @file
 * Entity Access By Field module install file.
 */
use Drupal\user\Entity\Role;

/**
 * Implements hook_install().
 *
 * Perform actions related to the installation of entity_access_by_field.
 */
function entity_access_by_field_install() {

  // Set some default permissions.
  _entity_access_by_field_set_permissions();
}

/**
 * Set permissions.
 */
function entity_access_by_field_update_8001(&$sandbox) {

  // Set some default permissions.
  _entity_access_by_field_set_permissions();
}

/**
 * Set community visibility by default.
 */
function entity_access_by_field_update_8002() {
  \Drupal::configFactory()
    ->getEditable('entity_access_by_field.settings')
    ->set('default_visibility', 'community')
    ->save();
}

/**
 * Remove default value from fields type of "entity_access_field".
 */
function entity_access_by_field_update_8003() {
  $field_map = \Drupal::service('entity_field.manager')
    ->getFieldMapByFieldType('entity_access_field');
  $config_factory = \Drupal::configFactory();
  foreach ($field_map as $entity_type_id => $fields) {
    foreach ($fields as $field_name => $data) {
      foreach ($data['bundles'] as $bundle) {
        $config_factory
          ->getEditable("field.field.{$entity_type_id}.{$bundle}.{$field_name}")
          ->set('default_value', NULL)
          ->save();
      }
    }
  }
}

/**
 * Function to set permissions.
 */
function _entity_access_by_field_set_permissions() {
  $roles = Role::loadMultiple();

  /** @var \Drupal\user\Entity\Role $role */
  foreach ($roles as $role) {
    if ($role
      ->id() === 'administrator') {
      continue;
    }
    $permissions = _entity_access_by_field_get_permissions($role
      ->id());
    user_role_grant_permissions($role
      ->id(), $permissions);
  }
}

/**
 * Get the permissions per role.
 *
 * @param string $role
 *   The role to fetch the permissions for.
 *
 * @return array
 *   An array containing permissions.
 */
function _entity_access_by_field_get_permissions($role) {

  // Anonymous.
  $permissions['anonymous'] = [];

  // Authenticated.
  $permissions['authenticated'] = array_merge($permissions['anonymous'], []);

  // Content manager.
  $permissions['contentmanager'] = array_merge($permissions['authenticated'], [
    'override disabled public visibility',
  ]);

  // Site manager.
  $permissions['sitemanager'] = array_merge($permissions['contentmanager'], []);
  if (isset($permissions[$role])) {
    return $permissions[$role];
  }
  return [];
}

Functions

Namesort descending Description
entity_access_by_field_install Implements hook_install().
entity_access_by_field_update_8001 Set permissions.
entity_access_by_field_update_8002 Set community visibility by default.
entity_access_by_field_update_8003 Remove default value from fields type of "entity_access_field".
_entity_access_by_field_get_permissions Get the permissions per role.
_entity_access_by_field_set_permissions Function to set permissions.