From 14b84fa2997b5e27046a70ac307a4241d724e466 Mon Sep 17 00:00:00 2001 From: Dries Buytaert <dries@buytaert.net> Date: Thu, 12 Feb 2004 19:04:20 +0000 Subject: [PATCH] - Fixed bug #5831: added validation for posting to forum containers. Patch by UnConeD. --- modules/forum.module | 12 ++++++++++-- modules/forum/forum.module | 12 ++++++++++-- modules/taxonomy.module | 10 ++++++---- modules/taxonomy/taxonomy.module | 10 ++++++---- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/modules/forum.module b/modules/forum.module index 7437346c090f..890b8ef40113 100644 --- a/modules/forum.module +++ b/modules/forum.module @@ -197,12 +197,20 @@ function forum_validate(&$node) { if ($node->taxonomy) { // Extract the node's proper topic ID. $vocabulary = variable_get('forum_nav_vocabulary', ''); + $containers = variable_get('forum_containers', array()); foreach ($node->taxonomy as $term) { if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) { - $node->tid = $term; + if (in_array($term, $containers)) { + $term = taxonomy_get_term($term); + $error['taxonomy'] = theme('error', t('The item \'%forum\' is only a container for forums. Please select one of the forums below it.', array('%forum' => $term->name))); + } + else { + $node->tid = $term; + } } } } + return $error; } function forum_form(&$node, &$error) { @@ -211,7 +219,7 @@ function forum_form(&$node, &$error) { $node->taxonomy[] = arg(3); } - $output = implode('', taxonomy_node_form('forum', $node)); + $output = implode('', taxonomy_node_form('forum', $node, $error)); if ($node->nid) { // if editing, give option to leave shadows diff --git a/modules/forum/forum.module b/modules/forum/forum.module index 7437346c090f..890b8ef40113 100644 --- a/modules/forum/forum.module +++ b/modules/forum/forum.module @@ -197,12 +197,20 @@ function forum_validate(&$node) { if ($node->taxonomy) { // Extract the node's proper topic ID. $vocabulary = variable_get('forum_nav_vocabulary', ''); + $containers = variable_get('forum_containers', array()); foreach ($node->taxonomy as $term) { if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) { - $node->tid = $term; + if (in_array($term, $containers)) { + $term = taxonomy_get_term($term); + $error['taxonomy'] = theme('error', t('The item \'%forum\' is only a container for forums. Please select one of the forums below it.', array('%forum' => $term->name))); + } + else { + $node->tid = $term; + } } } } + return $error; } function forum_form(&$node, &$error) { @@ -211,7 +219,7 @@ function forum_form(&$node, &$error) { $node->taxonomy[] = arg(3); } - $output = implode('', taxonomy_node_form('forum', $node)); + $output = implode('', taxonomy_node_form('forum', $node, $error)); if ($node->nid) { // if editing, give option to leave shadows diff --git a/modules/taxonomy.module b/modules/taxonomy.module index 68639d4abe0a..0d32a606bfea 100644 --- a/modules/taxonomy.module +++ b/modules/taxonomy.module @@ -299,7 +299,7 @@ function taxonomy_overview() { return theme("table", $header, $rows); } -function taxonomy_form($vocabulary_id, $value = 0) { +function taxonomy_form($vocabulary_id, $value = 0, $error = array()) { $vocabulary = taxonomy_get_vocabulary($vocabulary_id); if ($vocabulary->required) { $descriptions = array(t("You must choose one term for this node."), t("You must choose one or more terms for this node.")); @@ -312,7 +312,9 @@ function taxonomy_form($vocabulary_id, $value = 0) { $multiple = intval($vocabulary->multiple); - return _taxonomy_term_select($vocabulary->name, "taxonomy", $value, $vocabulary_id, $descriptions[$multiple], $multiple, $blank); + $description = $descriptions[$multiple] . $error['taxonomy']; + + return _taxonomy_term_select($vocabulary->name, 'taxonomy', $value, $vocabulary_id, $description, $multiple, $blank); } /* @@ -336,7 +338,7 @@ function taxonomy_get_vocabularies($type = '', $key = "vid") { } // return form with current term -function taxonomy_node_form($type, $node = '') { +function taxonomy_node_form($type, $node = '', $error = array()) { if (!$node->taxonomy) { if ($node->nid) { $terms = array_keys(taxonomy_node_get_terms($node->nid)); @@ -351,7 +353,7 @@ function taxonomy_node_form($type, $node = '') { $c = db_query("SELECT * FROM {vocabulary} WHERE nodes LIKE '%%%s%%' ORDER BY weight, name", $type); while ($vocabulary = db_fetch_object($c)) { - $result[] .= taxonomy_form($vocabulary->vid, $terms); + $result[] .= taxonomy_form($vocabulary->vid, $terms, $error); } return $result ? $result : array(); } diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module index 68639d4abe0a..0d32a606bfea 100644 --- a/modules/taxonomy/taxonomy.module +++ b/modules/taxonomy/taxonomy.module @@ -299,7 +299,7 @@ function taxonomy_overview() { return theme("table", $header, $rows); } -function taxonomy_form($vocabulary_id, $value = 0) { +function taxonomy_form($vocabulary_id, $value = 0, $error = array()) { $vocabulary = taxonomy_get_vocabulary($vocabulary_id); if ($vocabulary->required) { $descriptions = array(t("You must choose one term for this node."), t("You must choose one or more terms for this node.")); @@ -312,7 +312,9 @@ function taxonomy_form($vocabulary_id, $value = 0) { $multiple = intval($vocabulary->multiple); - return _taxonomy_term_select($vocabulary->name, "taxonomy", $value, $vocabulary_id, $descriptions[$multiple], $multiple, $blank); + $description = $descriptions[$multiple] . $error['taxonomy']; + + return _taxonomy_term_select($vocabulary->name, 'taxonomy', $value, $vocabulary_id, $description, $multiple, $blank); } /* @@ -336,7 +338,7 @@ function taxonomy_get_vocabularies($type = '', $key = "vid") { } // return form with current term -function taxonomy_node_form($type, $node = '') { +function taxonomy_node_form($type, $node = '', $error = array()) { if (!$node->taxonomy) { if ($node->nid) { $terms = array_keys(taxonomy_node_get_terms($node->nid)); @@ -351,7 +353,7 @@ function taxonomy_node_form($type, $node = '') { $c = db_query("SELECT * FROM {vocabulary} WHERE nodes LIKE '%%%s%%' ORDER BY weight, name", $type); while ($vocabulary = db_fetch_object($c)) { - $result[] .= taxonomy_form($vocabulary->vid, $terms); + $result[] .= taxonomy_form($vocabulary->vid, $terms, $error); } return $result ? $result : array(); } -- GitLab