You are here

forum_access.install in Forum Access 8

Same filename and directory in other branches
  1. 5 forum_access.install
  2. 6 forum_access.install
  3. 7 forum_access.install

Forum Access install file.

File

forum_access.install
View source
<?php

/**
 * @file
 * Forum Access install file.
 */
use Drupal\Core\Database\Database;
use Drupal\Core\Session\AccountInterface;
use Drupal\user\Entity\Role;

/**
 * Implements hook_schema().
 *
 * @inheritdoc
 */
function forum_access_schema() {
  return _forum_access_schema_8102();
}

/**
 * Implements hook_install().
 *
 * @inheritdoc
 *
 * @throws \Exception
 */
function forum_access_install() {

  // Set the weight of the forum_access.module to 2 so it
  // is loaded after the forum.module.
  module_set_weight('forum_access', 2);

  // Add default values for grants during installation.
  if ($vid = \Drupal::config('forum.settings')
    ->get('vocabulary')) {
    $terms = \Drupal::service('entity_type.manager')
      ->getStorage('taxonomy_term')
      ->loadTree($vid);
    $grants_rid_create = [
      AccountInterface::ANONYMOUS_ROLE => 0,
      AccountInterface::AUTHENTICATED_ROLE => 1,
    ];
    foreach ($terms as $term) {
      foreach ($grants_rid_create as $rid => $grant) {
        \Drupal::database()
          ->insert('forum_access')
          ->fields([
          'tid' => $term->tid,
          'rid' => $rid,
          'grant_view' => 1,
          'grant_update' => 0,
          'grant_delete' => 0,
          'grant_create' => $grant,
          'priority' => 0,
        ])
          ->execute();
      }
    }
  }

  // Add integer accordance to roles. We need it for hook_node grants
  // which understands only integer as gid.
  $config = \Drupal::configFactory()
    ->getEditable('forum_access.settings');
  $roles_gids = [];

  /** @var Drupal\Core\Entity\EntityInterface[] $roles */
  $roles = Role::loadMultiple();
  $i = 1;
  foreach ($roles as $role) {
    $roles_gids[$role
      ->id()] = $i;
    $i++;
  }
  $config
    ->set('forum_access_roles_gids', $roles_gids);
  $config
    ->save();
}

/**
 * Resize {forum_access}.rid and
 * add primary key and index to the {forum_access} table.
 */
function forum_access_update_8102(&$sandbox) {
  $new_schema = _forum_access_schema_8102();
  $schema = Database::getConnection()
    ->schema();

  // Drop the primary key and index that may have been created in update_8101.
  $schema
    ->dropPrimaryKey('forum_access');
  $schema
    ->dropIndex('forum_access', 'rid');

  // Adjust the 'rid' field width.
  $schema
    ->changeField('forum_access', 'rid', 'rid', $new_schema['forum_access']['fields']['rid']);

  // Add the primary key and index (again or for the first time).
  $schema
    ->addPrimaryKey('forum_access', [
    'tid',
    'rid',
  ]);
  $schema
    ->addIndex('forum_access', 'rid', [
    'rid',
  ], $new_schema['forum_access']);
}

/*
 * Implementation of forum_access_schema() version 8102.
 */
function _forum_access_schema_8102() {
  $schema['forum_access'] = [
    'description' => 'The Forum Access control table.',
    'fields' => [
      'tid' => [
        'description' => 'The {taxonomy_term_data}.tid to which this {forum_access} entry applies.',
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ],
      'rid' => [
        'description' => 'The {role}.rid to which this {forum_access} entry applies.',
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
      ],
      'grant_view' => [
        'description' => 'Whether to grant "view" permission.',
        'type' => 'int',
        'size' => 'tiny',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'grant_update' => [
        'description' => 'Whether to grant "update" permission.',
        'type' => 'int',
        'size' => 'tiny',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'grant_delete' => [
        'description' => 'Whether to grant "delete" permission.',
        'type' => 'int',
        'size' => 'tiny',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'grant_create' => [
        'description' => 'Whether to grant "create" permission.',
        'type' => 'int',
        'size' => 'tiny',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ],
      'priority' => [
        'description' => 'The priority of this grant.',
        'type' => 'int',
        'size' => 'small',
        'not null' => TRUE,
        'default' => 0,
      ],
    ],
    'primary key' => [
      'tid',
      'rid',
    ],
    'indexes' => [
      'rid' => [
        'rid',
      ],
    ],
    'foreign keys' => [
      'tid' => [
        'taxonomy_term_data' => 'tid',
      ],
      'rid' => [
        'user_roles' => 'rid',
      ],
    ],
  ];
  return $schema;
}

Functions

Namesort descending Description
forum_access_install Implements hook_install().
forum_access_schema Implements hook_schema().
forum_access_update_8102 Resize {forum_access}.rid and add primary key and index to the {forum_access} table.
_forum_access_schema_8102