? .bzr
? forum_taxo_12.patch
? forum_taxo_13.patch
? forum_taxo_14.patch
? sites/pgsql.drupal.cvs
? sites/all/modules
? sites/default/files
? sites/default/settings.php
Index: modules/forum/forum.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.install,v
retrieving revision 1.11
diff -u -p -r1.11 forum.install
--- modules/forum/forum.install	10 Oct 2007 11:39:33 -0000	1.11
+++ modules/forum/forum.install	4 Nov 2007 17:32:02 -0000
@@ -19,7 +19,7 @@ function forum_enable() {
     $vocabulary = array(
       'name' => t('Forums'),
       'multiple' => 0,
-      'required' => 1,
+      'required' => 0,
       'hierarchy' => 1,
       'relations' => 0,
       'module' => 'forum',
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.425
diff -u -p -r1.425 forum.module
--- modules/forum/forum.module	25 Oct 2007 15:32:55 -0000	1.425
+++ modules/forum/forum.module	4 Nov 2007 17:32:04 -0000
@@ -78,10 +78,6 @@ function forum_term_load($tid) {
  * Implementation of hook_menu().
  */
 function forum_menu() {
-  $items['node/add/forum'] = array(
-    'title' => 'Forum topic',
-    'access arguments' => array('create forum topics'),
-  );
   $items['forum'] = array(
     'title' => 'Forums',
     'page callback' => 'forum_page',
@@ -260,12 +256,19 @@ function forum_nodeapi(&$node, $op, $tea
       break;
     case 'update':
       if (!$node->revision) {
-        db_query('UPDATE {forum} SET tid = %d WHERE vid = %d', $node->tid, $node->vid);
-        break;
+        if (!empty($node->tid)) {
+          db_query('UPDATE {forum} SET tid = %d WHERE vid = %d', $node->tid, $node->vid);
+        }
+        // The node is removed from the forum.
+        else {
+          db_query('DELETE FROM {forum} WHERE nid = %d', $node->nid);
+        }
       }
       // Deliberate no break -- for new revisions we need an insert.
     case 'insert':
-      db_query('INSERT INTO {forum} (tid, vid, nid) VALUES (%d, %d, %d)', $node->tid, $node->vid, $node->nid);
+      if (!empty($node->tid)) {
+        db_query('INSERT INTO {forum} (tid, vid, nid) VALUES (%d, %d, %d)', $node->tid, $node->vid, $node->nid);
+      }
       break;
     case 'delete':
       db_query('DELETE FROM {forum} WHERE nid = %d', $node->nid);
@@ -354,13 +357,36 @@ function forum_form_alter(&$form, $form_
       );
       $form['nodes']['#required'] = TRUE;
       $form['hierarchy'] = array('#type' => 'value', '#value' => 1);
-      unset($form['relations']);
-      unset($form['tags']);
-      unset($form['multiple']);
-      unset($form['delete']);
-      $form['required'] = array('#type' => 'value', '#value' => 1);
+      $form['required'] = array('#type' => 'value', '#value' => FALSE);
+      $form['relations'] = array('#type' => 'value', '#value' => FALSE);
+      $form['tags'] = array('#type' => 'value', '#value' => FALSE);
+      $form['multiple'] = array('#type' => 'value', '#value' => FALSE);
+      unset($form['delete']);    
     }
   }
+  if ($form_id == 'forum_node_form') {
+    // Make the vocabulary required for 'real' forum-nodes.
+    // We set #input to TRUE so that #process can be used to remove the first option from the vocabulary.
+    // To avoid any possible tampering, we also set #value to a fixed empty value.
+    $vid = variable_get('forum_nav_vocabulary', '');
+    $form['taxonomy'][$vid] = array(
+      '#required' => TRUE,
+      '#input' => TRUE,
+      '#value' => '',
+      '#process' => array('_forum_require_vocabulary'));
+  }
+}
+
+/**
+ * Helper function for forum_form_alter().
+ *
+ * All types of nodes can be added to the forum, but in case of a 'real' forum-node
+ * the selection of a topic is required. This function removes '<none>' as option when
+ * creating a 'real' forum node.
+ */
+function _forum_require_vocabulary($element) {
+  unset($element['#options'][0]);
+  return $element;
 }
 
 /**
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.169
diff -u -p -r1.169 system.install
--- modules/system/system.install	4 Nov 2007 16:39:59 -0000	1.169
+++ modules/system/system.install	4 Nov 2007 17:32:10 -0000
@@ -4459,6 +4459,18 @@ function system_update_6035() {
 }
 
 /**
+ * Change forum vocabulary not to be required by default.
+ */
+function system_update_6035() {
+  $ret = array();
+  $vid = intval(variable_get('forum_nav_vocabulary', ''));
+  if (db_table_exists('vocabulary') && $vid) {
+    $ret[] = update_sql("UPDATE {vocabulary} SET required = 0 WHERE vid = " . $vid);
+  }
+  return $ret;
+}
+
+/**
  * @} End of "defgroup updates-5.x-to-6.x"
  * The next series of updates should start at 7000.
  */
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.387
diff -u -p -r1.387 taxonomy.module
--- modules/taxonomy/taxonomy.module	4 Nov 2007 15:10:09 -0000	1.387
+++ modules/taxonomy/taxonomy.module	4 Nov 2007 17:32:12 -0000
@@ -453,9 +453,17 @@ function taxonomy_form_alter(&$form, $fo
             $default_terms[$term->tid] = $term;
           }
         }
-        $form['taxonomy'][$vocabulary->vid] = taxonomy_form($vocabulary->vid, array_keys($default_terms), $vocabulary->help);
-        $form['taxonomy'][$vocabulary->vid]['#weight'] = $vocabulary->weight;
-        $form['taxonomy'][$vocabulary->vid]['#required'] = $vocabulary->required;
+        // Modules can already create this form before we alter it here. If so, we already have an array.
+        // If not, we have to declare it as an array or else we will get a fatal error' because we
+        // use '+=' to avoid overwriting previous values.
+        if (!isset($form['taxonomy'][$vocabulary->vid])) {
+          $form['taxonomy'][$vocabulary->vid] = array();
+        }
+        $form['taxonomy'][$vocabulary->vid] += taxonomy_form($vocabulary->vid, array_keys($default_terms), $vocabulary->help);
+        $form['taxonomy'][$vocabulary->vid] += array(
+          '#required' => $vocabulary->required,
+          '#weight' => $vocabulary->weight,
+        );
       }
     }
     if (!empty($form['taxonomy']) && is_array($form['taxonomy'])) {
@@ -918,7 +926,6 @@ function _taxonomy_term_select($title, $
     '#description' => $description,
     '#multiple' => $multiple,
     '#size' => $multiple ? min(9, count($options)) : 0,
-    '#weight' => -15,
     '#theme' => 'taxonomy_term_select',
   );
 }
