function forum_enable

Implements hook_enable().

File

drupal/core/modules/forum/forum.install, line 24
Install, update, and uninstall functions for the Forum module.

Code

function forum_enable() {

  // If we enable forum at the same time as taxonomy we need to call
  // field_associate_fields() as otherwise the field won't be enabled until
  // hook modules_enabled is called which takes place after hook_enable events.
  field_associate_fields('taxonomy');

  // 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 (!$vocabulary) {

    // If the module was installed and uninstalled previously, the vocabulary
    // with machine name 'forums' might still exist.
    $vocabulary = taxonomy_vocabulary_machine_name_load('forums');
    if (!$vocabulary) {

      // Otherwise, installing from scratch; create the vocabulary.
      $vocabulary = entity_create('taxonomy_vocabulary', array(
        'name' => t('Forums'),
        'machine_name' => 'forums',
        'langcode' => language_default()->langcode,
        'description' => t('Forum navigation vocabulary'),
        'hierarchy' => 1,
        'module' => 'forum',
        'weight' => -10,
      ));
      taxonomy_vocabulary_save($vocabulary);
    }
    $config
      ->set('vocabulary', $vocabulary->vid)
      ->save();
  }

  // Create the 'taxonomy_forums' field if it doesn't already exist.
  if (!field_info_field('taxonomy_forums')) {
    $field = array(
      'field_name' => 'taxonomy_forums',
      'type' => 'taxonomy_term_reference',
      'settings' => array(
        'allowed_values' => array(
          array(
            'vocabulary' => $vocabulary->machine_name,
            'parent' => 0,
          ),
        ),
      ),
    );
    field_create_field($field);

    // Create a default forum so forum posts can be created.
    $term = entity_create('taxonomy_term', array(
      'name' => t('General discussion'),
      'langcode' => language_default()->langcode,
      'description' => '',
      'parent' => array(
        0,
      ),
      'vid' => $vocabulary->vid,
    ));
    taxonomy_term_save($term);

    // 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',
      ),
      'display' => array(
        'default' => array(
          'type' => 'taxonomy_term_reference_link',
          'weight' => 10,
        ),
        'teaser' => array(
          'type' => 'taxonomy_term_reference_link',
          'weight' => 10,
        ),
      ),
    );
    field_create_instance($instance);
  }

  // Ensure the forum node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['forum']);
}