Newer
Older
Dries Buytaert
committed
<?php
Angie Byron
committed
/**
* @file
* Install, update and uninstall functions for the forum module.
*/
Dries Buytaert
committed
* Implements hook_install().
Dries Buytaert
committed
function forum_install() {
Dries Buytaert
committed
// Set the weight of the forum.module to 1 so it is loaded after the taxonomy.module.
Dries Buytaert
committed
db_update('system')
->fields(array('weight' => 1))
->condition('name', 'forum')
->execute();
Dries Buytaert
committed
// 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).
variable_set('node_options_forum', array('status'));
Dries Buytaert
committed
}
Dries Buytaert
committed
/**
* Implements hook_enable().
*/
Dries Buytaert
committed
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');
Angie Byron
committed
// Create the forum vocabulary if it does not exist.
$vocabulary = taxonomy_vocabulary_load(variable_get('forum_nav_vocabulary', 0));
if (!$vocabulary) {
Dries Buytaert
committed
$edit = array(
Dries Buytaert
committed
'name' => t('Forums'),
Angie Byron
committed
'machine_name' => 'forums',
'description' => t('Forum navigation vocabulary'),
Dries Buytaert
committed
'hierarchy' => 1,
'module' => 'forum',
'weight' => -10,
);
Dries Buytaert
committed
$vocabulary = (object) $edit;
taxonomy_vocabulary_save($vocabulary);
Angie Byron
committed
variable_set('forum_nav_vocabulary', $vocabulary->vid);
}
// Create the 'taxonomy_forums' field if it doesn't already exist.
if (!field_info_field('taxonomy_forums')) {
$field = array(
'field_name' => 'taxonomy_forums',
Angie Byron
committed
'type' => 'taxonomy_term_reference',
'settings' => array(
'allowed_values' => array(
array(
Angie Byron
committed
'vocabulary' => $vocabulary->machine_name,
Angie Byron
committed
'parent' => 0,
),
),
),
);
field_create_field($field);
Dries Buytaert
committed
Dries Buytaert
committed
// Create a default forum so forum posts can be created.
$edit = array(
'name' => t('General discussion'),
'description' => '',
'parent' => array(0),
'vid' => $vocabulary->vid,
);
$term = (object) $edit;
taxonomy_term_save($term);
Angie Byron
committed
// Create the instance on the bundle.
$instance = array(
'field_name' => 'taxonomy_forums',
Angie Byron
committed
'entity_type' => 'node',
'label' => $vocabulary->name,
'bundle' => 'forum',
'required' => TRUE,
'widget' => array(
'type' => 'options_select',
),
Angie Byron
committed
'display' => array(
'default' => array(
'type' => 'taxonomy_term_reference_link',
'weight' => 10,
),
'teaser' => array(
'type' => 'taxonomy_term_reference_link',
'weight' => 10,
),
),
Angie Byron
committed
);
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']);
}
Dries Buytaert
committed
* Implements hook_uninstall().
*/
function forum_uninstall() {
// Load the dependent Taxonomy module, in case it has been disabled.
drupal_load('module', 'taxonomy');
variable_del('forum_containers');
variable_del('forum_hot_topic');
variable_del('forum_per_page');
variable_del('forum_order');
Dries Buytaert
committed
variable_del('forum_block_num_active');
variable_del('forum_block_num_new');
Dries Buytaert
committed
variable_del('node_options_forum');
Dries Buytaert
committed
/**
Dries Buytaert
committed
* Implements hook_schema().
Dries Buytaert
committed
*/
function forum_schema() {
$schema['forum'] = array(
Dries Buytaert
committed
'description' => 'Stores the relationship of nodes to forum terms.',
Dries Buytaert
committed
'fields' => array(
'nid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
Dries Buytaert
committed
'description' => 'The {node}.nid of the node.',
),
'vid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
Dries Buytaert
committed
'description' => 'Primary Key: The {node}.vid of the node.',
),
'tid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
Dries Buytaert
committed
'description' => 'The {taxonomy_term_data}.tid of the forum term assigned to the node.',
Dries Buytaert
committed
),
'indexes' => array(
Dries Buytaert
committed
'forum_topic' => array('nid', 'tid'),
'tid' => array('tid'),
Dries Buytaert
committed
),
'primary key' => array('vid'),
'foreign keys' => array(
Dries Buytaert
committed
'forum_node' => array(
'table' => 'node',
'columns' => array(
'nid' => 'nid',
'vid' => 'vid',
),
),
Dries Buytaert
committed
);
Angie Byron
committed
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
$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'),
Angie Byron
committed
),
'foreign keys' => array(
Dries Buytaert
committed
'tracked_node' => array(
'table' => 'node',
'columns' => array('nid' => 'nid'),
),
'term' => array(
'table' => 'taxonomy_term_data',
'columns' => array(
'tid' => 'tid',
),
),
Angie Byron
committed
),
);
Dries Buytaert
committed
return $schema;
}
/**
* Implements hook_update_last_removed().
*/
function forum_update_last_removed() {