Index: modules/forum/forum.install =================================================================== RCS file: /cvs/drupal/drupal/modules/forum/forum.install,v retrieving revision 1.15 diff -u -p -r1.15 forum.install --- modules/forum/forum.install 20 Dec 2007 21:50:11 -0000 1.15 +++ modules/forum/forum.install 31 Dec 2007 15:31:45 -0000 @@ -12,12 +12,17 @@ function forum_install() { } function forum_enable() { - // 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. - $vid = variable_get('forum_nav_vocabulary', 0); - $vocabularies = taxonomy_get_vocabularies(); - if (!isset($vocabularies[$vid])) { + 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_save_vocabulary($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. $vocabulary = array( 'name' => t('Forums'), 'multiple' => 0, @@ -123,4 +128,4 @@ function forum_update_6000() { } return $ret; -} \ No newline at end of file +} Index: modules/taxonomy/taxonomy.module =================================================================== RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v retrieving revision 1.411 diff -u -p -r1.411 taxonomy.module --- modules/taxonomy/taxonomy.module 22 Dec 2007 23:24:25 -0000 1.411 +++ modules/taxonomy/taxonomy.module 31 Dec 2007 15:31:46 -0000 @@ -967,14 +967,18 @@ function taxonomy_get_term_by_name($name * @param $vid * The vocabulary's ID * - * @return Object - * The vocabulary object with all of its metadata. + * @return + * The vocabulary object with all of its metadata, if exists, NULL otherwise. * Results are statically cached. */ function taxonomy_vocabulary_load($vid) { static $vocabularies = array(); - if (!array_key_exists($vid, $vocabularies)) { + if (!isset($vocabularies[$vid])) { + // Initialize so if this vocabulary does not exist, we have + // that cached, and we will not try to load this later. + $vocabularies[$vid] = FALSE; + // Try to load the data and fill up the object. $result = db_query('SELECT v.*, n.type FROM {vocabulary} v LEFT JOIN {vocabulary_node_types} n ON v.vid = n.vid WHERE v.vid = %d', $vid); $node_types = array(); while ($voc = db_fetch_object($result)) { @@ -986,8 +990,9 @@ function taxonomy_vocabulary_load($vid) $vocabularies[$vid] = $voc; } } - - return $vocabularies[$vid]; + + // Return NULL if this vocabulary does not exist. + return !empty($vocabularies[$vid]) ? $vocabularies[$vid] : NULL; } /**