summaryrefslogtreecommitdiff
path: root/modules/forum/forum.install
blob: 9daac0310b22fc551ed80939a0e645d2742d0dbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
// $Id$

/**
 * Implementation of hook_install().
 */
function forum_install() {
  // Create tables.
  drupal_install_schema('forum');
  // Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module.
  db_query("UPDATE {system} SET weight = 1 WHERE name = 'forum'");
}

function forum_enable() {
  if ($vocabulary = taxonomy_vocabulary_load(variable_get('forum_nav_vocabulary', 0))) {
    // Existing install. Add back forum node type, if the forums
    // vocabulary still exists. Keep all other node types intact there.
    $vocabulary = (array) $vocabulary;
    $vocabulary['nodes']['forum'] = 1;
    taxonomy_vocabulary_save($vocabulary);
  }
  else {
    // Create the forum vocabulary if it does not exist. Assign the vocabulary
    // a low weight so it will appear first in forum topic create and edit
    // forms.
    $edit = array(
      'name' => t('Forums'),
      'multiple' => 0,
      'required' => 0,
      'hierarchy' => 1,
      'relations' => 0,
      'module' => 'forum',
      'weight' => -10,
      'nodes' => array('forum' => 1),
    );
    $vocabulary = (object) $edit;
    taxonomy_vocabulary_save($vocabulary);

    variable_set('forum_nav_vocabulary', $vocabulary->vid);
  }
}

/**
 * Implementation of hook_uninstall().
 */
function forum_uninstall() {
  // Load the dependent Taxonomy module, in case it has been disabled.
  drupal_load('module', 'taxonomy');

  // Delete the vocabulary.
  $vid = variable_get('forum_nav_vocabulary', 0);
  taxonomy_vocabulary_delete($vid);

  db_query('DROP TABLE {forum}');
  variable_del('forum_containers');
  variable_del('forum_nav_vocabulary');
  variable_del('forum_hot_topic');
  variable_del('forum_per_page');
  variable_del('forum_order');
  variable_del('forum_block_num_active');
  variable_del('forum_block_num_new');
}

/**
 * Implementation of hook_schema().
 */
function forum_schema() {
  $schema['forum'] = array(
    'description' => 'Stores the relationship of nodes to forum terms.',
    'fields' => array(
      '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 {term_data}.tid of the forum term assigned to the node.',
      ),
    ),
    'indexes' => array(
      'nid' => array('nid'),
      'tid' => array('tid'),
    ),
    'primary key' => array('vid'),
  );

  return $schema;
}

/**
 * Create the forum vocabulary if does not exist. Assign the
 * vocabulary a low weight so it will appear first in forum topic
 * create and edit forms. Do not just call forum_enable() because in
 * future versions it might do something different.
 */
function forum_update_6000() {
  $ret = array();

  $vid = variable_get('forum_nav_vocabulary', 0);
  $vocabularies = taxonomy_get_vocabularies();
  if (!isset($vocabularies[$vid])) {
    $vocabulary = array(
      'name' => t('Forums'),
      'multiple' => 0,
      'required' => 0,
      'hierarchy' => 1,
      'relations' => 0,
      'module' => 'forum',
      'weight' => -10,
      'nodes' => array('forum' => 1),
    );
    taxonomy_save_vocabulary($vocabulary);

    variable_set('forum_nav_vocabulary', $vocabulary['vid']);
  }

  return $ret;
}