You are here

forum_access.install in Forum Access 7

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

Install, update and uninstall functions for the forum_access module.

File

forum_access.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the forum_access module.
 *
 */

/**
 * Implements hook_install().
 */
function forum_access_install() {
  db_update('system')
    ->fields(array(
    'weight' => 2,
  ))
    ->condition('name', 'forum_access')
    ->execute();
  if ($vid = variable_get('forum_nav_vocabulary', FALSE)) {
    $result = db_query("SELECT t.tid FROM {taxonomy_term_data} t LEFT JOIN {forum_access} fa ON t.tid = fa.tid WHERE fa.tid IS NULL AND t.vid = :vid", array(
      ':vid' => $vid,
    ));
    $grant_create_by_rid = array(
      DRUPAL_ANONYMOUS_RID => 0,
      DRUPAL_AUTHENTICATED_RID => 1,
    );
    foreach ($result as $td) {
      foreach ($grant_create_by_rid as $rid => $grant_create) {
        db_insert('forum_access')
          ->fields(array(
          'tid' => $td->tid,
          'rid' => $rid,
          'grant_view' => 1,
          'grant_update' => 0,
          'grant_delete' => 0,
          'grant_create' => $grant_create,
          'priority' => 0,
        ))
          ->execute();
      }
    }
  }
}

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

/**
 * Implements hook_enable().
 */
function forum_access_enable() {
  variable_del('forum_access_rids');

  // clear cache
  _forum_access_update_table();
}

/**
 * Adds missing default records to the {forum_acces} table.
 */
function _forum_access_update_table() {
  $tids = db_query("SELECT td.tid FROM {taxonomy_term_data} td LEFT JOIN {forum_access} fa ON td.tid = fa.tid WHERE td.vid = :vid AND fa.tid IS NULL", array(
    'vid' => _forum_access_get_vid(),
  ))
    ->fetchCol();
  foreach ($tids as $tid) {
    $record = array(
      'tid' => $tid,
      'rid' => DRUPAL_ANONYMOUS_RID,
      'grant_view' => 1,
    );
    drupal_write_record('forum_access', $record);
    $record['rid'] = DRUPAL_AUTHENTICATED_RID;
    $record['grant_create'] = 1;
    drupal_write_record('forum_access', $record);
  }
}

/**
 * Implements hook_disable().
 */
function forum_access_disable() {
  forum_access_enabled(FALSE);
}

/*
 * Implements hook_uninstall().
 */
function forum_access_uninstall() {
  variable_del('forum_access_allowed_comment_edit_administration_elements');
  variable_del('forum_access_allowed_comment_links_for_create');
  variable_del('forum_access_allowed_comment_links_for_udpate');
  variable_del('forum_access_allowed_comment_links_for_delete');
  variable_del('forum_access_allowed_node_edit_elements');
  variable_del('forum_access_allowed_node_edit_options');
  variable_del('forum_access_batch_threshold');
  variable_del('forum_access_default_template_tid');
  variable_del('forum_access_new_template_tid');
  variable_del('forum_access_provide_moderators_template_variable');
  variable_del('forum_access_rids');
  variable_del('forum_access_update_limit');
}
function forum_access_update_last_removed() {
  return 6105;
}

/**
 * Change our {acl} table records from 'name' to 'number' (D6 legacy).
 */
function forum_access_update_6106() {
  db_update('acl')
    ->expression('number', 'name')
    ->condition('module', 'forum_access')
    ->isNotNull('name')
    ->execute();
  db_update('acl')
    ->fields(array(
    'name' => NULL,
  ))
    ->condition('module', 'forum_access')
    ->isNotNull('name')
    ->execute();
}

/**
 * Remove the D6 Forum Moderator role which is not needed anymore.
 */
function forum_access_update_7001() {

  // We don't need the Forum Moderator temporary role anymore.
  if ($moderator_rid = (int) variable_get('forum_access_moderator_rid', NULL)) {
    user_role_delete($moderator_rid);
    variable_del('forum_access_moderator_rid');
  }
}

/**
 * Remove the obsolete 'forum_access_D5_legacy_mode' variable.
 */
function forum_access_update_7002() {
  variable_del('forum_access_D5_legacy_mode');
}

/**
 * Drop tid index and add primary key to forum_access table.
 */
function forum_access_update_7003() {
  db_drop_index('forum_access', 'tid');
  db_add_primary_key('forum_access', array(
    'tid',
    'rid',
  ));
}

Functions

Namesort descending Description
forum_access_disable Implements hook_disable().
forum_access_enable Implements hook_enable().
forum_access_install Implements hook_install().
forum_access_schema Implements hook_schema().
forum_access_uninstall
forum_access_update_6106 Change our {acl} table records from 'name' to 'number' (D6 legacy).
forum_access_update_7001 Remove the D6 Forum Moderator role which is not needed anymore.
forum_access_update_7002 Remove the obsolete 'forum_access_D5_legacy_mode' variable.
forum_access_update_7003 Drop tid index and add primary key to forum_access table.
forum_access_update_last_removed
_forum_access_update_table Adds missing default records to the {forum_acces} table.