Skip to content
forum.install 7.85 KiB
Newer Older
 * Install, update, and uninstall functions for the Forum module.
  // Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module.
  // Forum topics are published by default, but do not have any other default
  // options set (for example, they are not promoted to the front page).
  // @todo Convert to default module configuration, once Node module's content
  //   types are converted.
  variable_set('node_options_forum', array('status'));
  // Create the forum vocabulary if it does not exist.
  // @todo Change Forum module so forum.settings can contain the vocabulary's
  //   machine name.
  $config = config('forum.settings');
  // If the module was disabled only, the current config may contain a valid
  // vocabulary ID already.
  $vocabulary = taxonomy_vocabulary_load($config->get('vocabulary'));
    // If the module was installed and uninstalled previously, the vocabulary
    // with machine name 'forums' might still exist.
    $vocabulary = taxonomy_vocabulary_load('forums');
    if (!$vocabulary) {
      // Otherwise, installing from scratch; create the vocabulary.
      $vocabulary = entity_create('taxonomy_vocabulary', array(
        'name' => t('Forums'),
        'langcode' => language_default()->langcode,
        'description' => t('Forum navigation vocabulary'),
        'hierarchy' => 1,
        'module' => 'forum',
        'weight' => -10,
      ));
      taxonomy_vocabulary_save($vocabulary);
    }
    $config->set('vocabulary', $vocabulary->id())->save();
  // Create the 'taxonomy_forums' field if it doesn't already exist. If forum
  // is being enabled at the same time as taxonomy after both modules have been
  // enabled, the field might exist but still be marked inactive.
  if (!field_read_field('taxonomy_forums', array('include_inactive' => TRUE))) {
      'field_name' => 'taxonomy_forums',
      'type' => 'taxonomy_term_reference',
      'settings' => array(
        'allowed_values' => array(
          array(
            'vocabulary' => $vocabulary->id(),
    // Create a default forum so forum posts can be created.
    $term = entity_create('taxonomy_term', array(
      'langcode' => language_default()->langcode,
      'description' => '',
      'parent' => array(0),
    // Create the instance on the bundle.
    $instance = array(
      'field_name' => 'taxonomy_forums',
      'entity_type' => 'node',
      'label' => $vocabulary->name,
      'bundle' => 'forum',
      'required' => TRUE,
      'widget' => array(
        'type' => 'options_select',

    // Assign display settings for the 'default' and 'teaser' view modes.
    entity_get_display('node', 'forum', 'default')
      ->setComponent('taxonomy_forums', array(
        'type' => 'taxonomy_term_reference_link',
        'weight' => 10,
      ))
      ->save();
    entity_get_display('node', 'forum', 'teaser')
      ->setComponent('taxonomy_forums', array(
        'type' => 'taxonomy_term_reference_link',
        'weight' => 10,
      ))
      ->save();
  // Ensure the forum node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['forum']);
 */
function forum_uninstall() {
  // Load the dependent Taxonomy module, in case it has been disabled.
  drupal_load('module', 'taxonomy');


  field_delete_field('taxonomy_forums');
  // Purge field data now to allow taxonomy module to be uninstalled
  // if this is the only field remaining.
  field_purge_batch(10);
 */
function forum_schema() {
  $schema['forum'] = array(
    'description' => 'Stores the relationship of nodes to forum terms.',
      'nid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The {node}.nid of the node.',
      ),
      'vid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => 'Primary Key: The {node}.vid of the node.',
      ),
      'tid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The {taxonomy_term_data}.tid of the forum term assigned to the node.',
      'forum_node' => array(
        'table' => 'node',
        'columns' => array(
          'nid' => 'nid',
          'vid' => 'vid',
        ),
      ),
  $schema['forum_index'] = array(
    'description' => 'Maintains denormalized information about node/term relationships.',
    'fields' => array(
      'nid' => array(
        'description' => 'The {node}.nid this record tracks.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'title' => array(
        'description' => 'The title of this node, always treated as non-markup plain text.',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => '',
      ),
      'tid' => array(
         'description' => 'The term ID.',
         'type' => 'int',
         'unsigned' => TRUE,
         'not null' => TRUE,
         'default' => 0,
      ),
      'sticky' => array(
        'description' => 'Boolean indicating whether the node is sticky.',
        'type' => 'int',
        'not null' => FALSE,
        'default' => 0,
        'size' => 'tiny',
      ),
      'created' => array(
        'description' => 'The Unix timestamp when the node was created.',
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default'=> 0,
      ),
      'last_comment_timestamp' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The Unix timestamp of the last comment that was posted within this node, from {comment}.timestamp.',
      ),
      'comment_count' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The total number of comments on this node.',
      ),
    ),
    'indexes' => array(
      'forum_topics' => array('nid', 'tid', 'sticky', 'last_comment_timestamp'),
      'created' => array('created'),
      'last_comment_timestamp' => array('last_comment_timestamp'),
      'tracked_node' => array(
        'table' => 'node',
        'columns' => array('nid' => 'nid'),
      ),
      'term' => array(
        'table' => 'taxonomy_term_data',
        'columns' => array(
          'tid' => 'tid',
        ),
      ),

/**
 * Implements hook_update_last_removed().
 */
function forum_update_last_removed() {

/**
 * Moves forum settings from variable to config.
 *
 * @ingroup config_upgrade
 */
function forum_update_8000() {
  update_variables_to_config('forum.settings', array(
    'forum_hot_topic' => 'topics.hot_threshold',
    'forum_per_page' => 'topics.page_limit',
    'forum_order' => 'topics.order',
    'forum_nav_vocabulary' => 'vocabulary',
    'forum_containers' => 'containers',
    'forum_block_num_active' => 'block.active.limit',
    'forum_block_num_new' => 'block.new.limit',
  ));
}