Commit d8cd5496 authored by Dries's avatar Dries

- Added Marco's long-awaited taxonmy module and patches - a replacement
  for the meta system.  The patches add some extra functionality to the
  comment system (for example, comments can be set read-only) and fix a
  couple of small problems.

  + I integrated the required SQL updates from the varius *.mysql files
    into the "update.php" script.  Upgrading should be easy ...

  + I did not apply/commit the "user.diff" as requested by Marco ...

  + I didn't know what to do with "forum.module" and "forum2.module":
    what do you want me to do with it Marco?  Which one should go in?

  + Can we remove "node_index()" now; both from "node.module" and the
    themes?

  + Thanks Marco!
parent e5fd6713
......@@ -2,7 +2,7 @@
#
# Host: localhost Database: drupal
#--------------------------------------------------------
# Server version 3.23.38
# Server version 3.23.38
#
# Table structure for table 'access'
......
......@@ -78,9 +78,13 @@ function object2array($node) {
return $array;
}
function path_uri() {
function path_uri($brief = 0) {
global $HTTP_HOST, $REQUEST_URI;
return "http://". $HTTP_HOST . substr($REQUEST_URI, 0, strrpos($REQUEST_URI, "/")) ."/";
$path = $HTTP_HOST . substr($REQUEST_URI, 0, strrpos($REQUEST_URI, "/")) ."/";
if (!$brief) {
$path = "http://". $path;
}
return $path;
}
function path_img() {
......@@ -148,7 +152,7 @@ function variable_del($name) {
* Format a single result entry of a search query:
*
* @param $item a single search result as returned by <module>_search of type
* array("count" => ..., "link" => ..., "title" => ...,
* array("count" => ..., "link" => ..., "title" => ...,
* "user" => ..., "date" => ..., "keywords" => ...)
* @param $type module type of this item
*/
......@@ -164,14 +168,14 @@ function search_item($item, $type) {
* Render a generic search form.
*
* "Generic" means "universal usable" - that is, usable not only from
* module.php?mod=search, but also as a simple seach box (without
* "Restrict search to", help text, etc) from theme's header etc.
* This means: provide options to only conditionally render certain
* module.php?mod=search, but also as a simple seach box (without
* "Restrict search to", help text, etc) from theme's header etc.
* This means: provide options to only conditionally render certain
* parts of this form.
*
* @param $action Form action. Defaults to module.php?mod=search.
* @param $query Query string. Defaults to global $keys.
* @param $options != 0: Render additional form fields/text
* @param $options != 0: Render additional form fields/text
* ("Restrict search to", help text, etc).
*/
function search_form($action = 0, $query = 0, $options = 0) {
......@@ -239,11 +243,11 @@ function search_data() {
/**
* Display the search form and the resulting data.
*
* @param $type If set, search only nodes of this type.
* @param $type If set, search only nodes of this type.
* Otherwise, search all types.
* @param $action Form action. Defaults to module.php?mod=search.
* @param $query Query string. Defaults to global $keys.
* @param $options != 0: Render additional form fields/text
* @param $options != 0: Render additional form fields/text
* ("Restrict search to", help text, etc).
*/
function search_type($type = 0, $action = 0, $query = 0, $options = 0) {
......@@ -256,6 +260,22 @@ function search_type($type = 0, $action = 0, $query = 0, $options = 0) {
return search_form($action, $query, $options) . search_data();
}
function drupal_str_replace($from, $to, $subject) {
/*
** Multiple item replace which works for *all* PHP versions
** (PHP 4.05+ supports this natively using similar syntax).
** $from and $to should be same sized arrays, $subject is the
** source text.
*/
for ($i = 0; $i < count($from); $i++) {
$subject = str_replace($from[$i], $to[$i], $subject);
}
return $subject;
}
function drupal_goto($url) {
/*
......@@ -551,12 +571,12 @@ function form_textarea($title, $name, $value, $cols, $rows, $description = 0) {
return form_item($title, "<textarea wrap=\"virtual\" cols=\"$cols\" rows=\"$rows\" name=\"edit[$name]\">". check_form($value) ."</textarea>", $description);
}
function form_select($title, $name, $value, $options, $description = 0, $extra = 0) {
function form_select($title, $name, $value, $options, $description = 0, $extra = 0, $multiple = 0) {
if (count($options) > 0) {
foreach ($options as $key => $choice) {
foreach ($options as $key=>$choice) {
$select .= "<option value=\"$key\"". (is_array($value) ? (in_array($key, $value) ? " selected=\"selected\"" : "") : ($key == $value ? " selected=\"selected\"" : "")) .">". check_form($choice) ."</option>";
}
return form_item($title, "<select name=\"edit[$name]\"". ($extra ? " $extra" : "") .">$select</select>", $description);
return form_item($title, "<select name=\"edit[$name]".($multiple ? "[]" : "")."\"" .($multiple ? " multiple " : "").($extra ? " $extra" : "") .">$select</select>", $description);
}
}
......@@ -595,20 +615,20 @@ function field_merge($a, $b) {
function link_page() {
global $custom_links;
if (is_array($custom_links)) {
return $custom_links;
}
else {
$links[] = "<a href=\"index.php\">". t("home") ."</a>";
foreach (module_list() as $name) {
foreach (module_list() as $name) {
if (module_hook($name, "link")) {
$links = array_merge($links, module_invoke($name, "link", "page"));
}
}
}
return $links;
}
}
}
function link_node($node, $main = 0) {
foreach (module_list() as $name) {
......
......@@ -243,6 +243,8 @@ function blog_form(&$node, &$help, &$error) {
$output .= form_textarea(t("Teaser"), "teaser", $node->teaser, 60, 5, $error["teaser"]);
}
$output .= implode("<p>", taxonomy_node_form("blog", $node));
$output .= form_textarea(t("Body"), "body", $node->body, 60, 15, $error["body"] ? $error["body"] : t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
return $output;
......
......@@ -243,6 +243,8 @@ function blog_form(&$node, &$help, &$error) {
$output .= form_textarea(t("Teaser"), "teaser", $node->teaser, 60, 5, $error["teaser"]);
}
$output .= implode("<p>", taxonomy_node_form("blog", $node));
$output .= form_textarea(t("Body"), "body", $node->body, 60, 15, $error["body"] ? $error["body"] : t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
return $output;
......
......@@ -145,22 +145,30 @@ function comment_edit($cid) {
}
function comment_reply($pid, $nid) {
global $theme;
if ($pid) {
$comment = db_fetch_object(db_query("SELECT c.*, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$pid'"));
comment_view($comment, t("reply to this comment"));
}
else {
node_view(node_load(array("nid" => $nid)));
$pid = 0;
}
global $theme, $node;
// we must provide a taxonomy context for user_access()
$context->nid = $nid;
if (user_access("access comments", $context)) {
if ($pid) {
$comment = db_fetch_object(db_query("SELECT c.*, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$pid'"));
comment_view($comment, t("reply to this comment"));
}
else {
node_view(node_load(array("nid" => $nid)));
$pid = 0;
}
if (user_access("post comments")) {
$theme->box(t("Reply"), comment_form(array("pid" => $pid, "nid" => $nid)));
}
else {
$theme->box(t("Reply"), t("You are not authorized to post comments."));
if (node_comment_mode($nid) == 1) {
$theme->box(t("Reply"), t("This discussion is closed: you can't post new comments."));
} else if (user_access("post comments", $context)) {
$theme->box(t("Reply"), comment_form(array("pid" => $pid, "nid" => $nid)));
}
else {
$theme->box(t("Reply"), t("You are not authorized to post comments."));
}
} else {
$theme->box(t("Reply"), t("You are not authorized to view comments."));
}
}
......@@ -205,7 +213,8 @@ function comment_preview($edit) {
function comment_post($edit) {
global $theme, $user;
if (user_access("post comments")) {
$context->nid = $edit["nid"];
if (user_access("post comments", $context) && node_comment_mode($edit["nid"]) == 2) {
/*
** Validate the comment's subject. If not specified, extract
......@@ -378,6 +387,11 @@ function comment_links($comment, $return = 1) {
$links[] = "<a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\" title=\"". t("Administer this comment.") ."\"><span style=\"color: $theme->type;\">". t("administer") ."</span></a>";
}
// here we should check if this node has read-only comments, but we already check on submit
// and this way we save a query. it's just a cosmetic issue. otherwise just uncomment next
// line and related bracket some lines below
//if (node_comment_mode($comment->nid)) {
if (user_access("post comments")) {
if (comment_access("edit", $comment)) {
$links[] = "<a href=\"module.php?mod=comment&op=edit&id=$comment->cid\" title=\"". t("Make changes to your comment.") ."\"><span style=\"color: $theme->type\">". t("edit your comment") ."</span></a>";
......@@ -386,6 +400,7 @@ function comment_links($comment, $return = 1) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$comment->nid&pid=$comment->cid\" title=\"". t("Reply to this comment.") ."\"><span style=\"color: $theme->type;\">". t("reply to this comment") ."</span></a>";
}
}
//}
return $theme->links($links);
......@@ -553,10 +568,10 @@ function comment_search($keys) {
// index.
//
// "select"'s value is used to relate the data from the specific nodes
// table to the data that the search_index table has in it, and the the
// table to the data that the search_index table has in it, and the the
// do_search functino will rank it.
//
// The select must always provide the following fields - lno, title,
// The select must always provide the following fields - lno, title,
// created, uid, name, count
//
// The select statement may optionally provide "nid", which is a secondary
......@@ -565,7 +580,7 @@ function comment_search($keys) {
$find = do_search(array("keys" => $keys,
"type" => "comment",
"select" => "select s.lno as lno, c.nid as nid, c.subject as title, c.timestamp as created, u.uid as uid, u.name as name, s.count as count FROM search_index s, comments c LEFT JOIN users u ON c.uid = u.uid WHERE s.lno = c.cid AND s.type = 'comment' AND s.word like '%'"));
return $find;
}
......@@ -597,11 +612,15 @@ function comment_link($type, $node = 0, $main = 0) {
else {
/*
** Node page: add a "post comment" link if the user is allowed to
** post comments.
** post comments and if this node is not read-only
*/
if (user_access("post comments")) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$node->nid#comment\" title=\"". t("Share your thoughts and opinions related to this posting.") ."\">". t("add new comment") ."</a>";
if ($node->comment == 2) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$node->nid#comment\" title=\"". t("Share your thoughts and opinions related to this posting.") ."\">". t("add new comment") ."</a>";
} else {
$links[] = t("This discussion is closed: you can't post new comments.");
}
}
}
}
......@@ -751,14 +770,14 @@ function comment_update_index() {
// Return an array of values to dictate how to update the search index
// for this particular type of node.
//
// "last_update"'s value is used with variable_set to set the
// "last_update"'s value is used with variable_set to set the
// last time this node type (comment) had an index update run.
//
// "node_type"'s value is used to identify the node type in the search
// index (commentt in this case).
//
// "select"'s value is used to select the node id and text fields from
// the table we are indexing. In this case, we also check against the
// the table we are indexing. In this case, we also check against the
// last run date for the comments update.
return array("last_update" => "comment_cron_last",
"node_type" => "comment",
......
......@@ -145,22 +145,30 @@ function comment_edit($cid) {
}
function comment_reply($pid, $nid) {
global $theme;
if ($pid) {
$comment = db_fetch_object(db_query("SELECT c.*, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$pid'"));
comment_view($comment, t("reply to this comment"));
}
else {
node_view(node_load(array("nid" => $nid)));
$pid = 0;
}
global $theme, $node;
// we must provide a taxonomy context for user_access()
$context->nid = $nid;
if (user_access("access comments", $context)) {
if ($pid) {
$comment = db_fetch_object(db_query("SELECT c.*, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$pid'"));
comment_view($comment, t("reply to this comment"));
}
else {
node_view(node_load(array("nid" => $nid)));
$pid = 0;
}
if (user_access("post comments")) {
$theme->box(t("Reply"), comment_form(array("pid" => $pid, "nid" => $nid)));
}
else {
$theme->box(t("Reply"), t("You are not authorized to post comments."));
if (node_comment_mode($nid) == 1) {
$theme->box(t("Reply"), t("This discussion is closed: you can't post new comments."));
} else if (user_access("post comments", $context)) {
$theme->box(t("Reply"), comment_form(array("pid" => $pid, "nid" => $nid)));
}
else {
$theme->box(t("Reply"), t("You are not authorized to post comments."));
}
} else {
$theme->box(t("Reply"), t("You are not authorized to view comments."));
}
}
......@@ -205,7 +213,8 @@ function comment_preview($edit) {
function comment_post($edit) {
global $theme, $user;
if (user_access("post comments")) {
$context->nid = $edit["nid"];
if (user_access("post comments", $context) && node_comment_mode($edit["nid"]) == 2) {
/*
** Validate the comment's subject. If not specified, extract
......@@ -378,6 +387,11 @@ function comment_links($comment, $return = 1) {
$links[] = "<a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\" title=\"". t("Administer this comment.") ."\"><span style=\"color: $theme->type;\">". t("administer") ."</span></a>";
}
// here we should check if this node has read-only comments, but we already check on submit
// and this way we save a query. it's just a cosmetic issue. otherwise just uncomment next
// line and related bracket some lines below
//if (node_comment_mode($comment->nid)) {
if (user_access("post comments")) {
if (comment_access("edit", $comment)) {
$links[] = "<a href=\"module.php?mod=comment&op=edit&id=$comment->cid\" title=\"". t("Make changes to your comment.") ."\"><span style=\"color: $theme->type\">". t("edit your comment") ."</span></a>";
......@@ -386,6 +400,7 @@ function comment_links($comment, $return = 1) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$comment->nid&pid=$comment->cid\" title=\"". t("Reply to this comment.") ."\"><span style=\"color: $theme->type;\">". t("reply to this comment") ."</span></a>";
}
}
//}
return $theme->links($links);
......@@ -553,10 +568,10 @@ function comment_search($keys) {
// index.
//
// "select"'s value is used to relate the data from the specific nodes
// table to the data that the search_index table has in it, and the the
// table to the data that the search_index table has in it, and the the
// do_search functino will rank it.
//
// The select must always provide the following fields - lno, title,
// The select must always provide the following fields - lno, title,
// created, uid, name, count
//
// The select statement may optionally provide "nid", which is a secondary
......@@ -565,7 +580,7 @@ function comment_search($keys) {
$find = do_search(array("keys" => $keys,
"type" => "comment",
"select" => "select s.lno as lno, c.nid as nid, c.subject as title, c.timestamp as created, u.uid as uid, u.name as name, s.count as count FROM search_index s, comments c LEFT JOIN users u ON c.uid = u.uid WHERE s.lno = c.cid AND s.type = 'comment' AND s.word like '%'"));
return $find;
}
......@@ -597,11 +612,15 @@ function comment_link($type, $node = 0, $main = 0) {
else {
/*
** Node page: add a "post comment" link if the user is allowed to
** post comments.
** post comments and if this node is not read-only
*/
if (user_access("post comments")) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$node->nid#comment\" title=\"". t("Share your thoughts and opinions related to this posting.") ."\">". t("add new comment") ."</a>";
if ($node->comment == 2) {
$links[] = "<a href=\"module.php?mod=comment&op=reply&id=$node->nid#comment\" title=\"". t("Share your thoughts and opinions related to this posting.") ."\">". t("add new comment") ."</a>";
} else {
$links[] = t("This discussion is closed: you can't post new comments.");
}
}
}
}
......@@ -751,14 +770,14 @@ function comment_update_index() {
// Return an array of values to dictate how to update the search index
// for this particular type of node.
//
// "last_update"'s value is used with variable_set to set the
// "last_update"'s value is used with variable_set to set the
// last time this node type (comment) had an index update run.
//
// "node_type"'s value is used to identify the node type in the search
// index (commentt in this case).
//
// "select"'s value is used to select the node id and text fields from
// the table we are indexing. In this case, we also check against the
// the table we are indexing. In this case, we also check against the
// last run date for the comments update.
return array("last_update" => "comment_cron_last",
"node_type" => "comment",
......
......@@ -149,7 +149,7 @@ function node_save($node, $filter) {
$node->created = time();
$node->changed = time();
$node->nid = db_result(db_query("SELECT MAX(nid) + 1 FROM node"));
$node->nid = empty($node->nid) ? 1 : $node->nid;
$node->nid = empty($node->nid) ? 1 : $node->nid;
// Prepare the query:
foreach ($node as $key => $value) {
......@@ -363,6 +363,10 @@ function node_filter_line($text) {
return trim($text);
}
function node_comment_mode($nid) {
return db_result(db_query("SELECT comment FROM node WHERE nid = '".check_query($nid)."'"));
}
function node_filter($text) {
if (variable_get("filter_html", 0)) $text = node_filter_html($text);
if (variable_get("filter_link", 0)) $text = node_filter_link($text);
......@@ -867,7 +871,7 @@ function node_form($edit) {
$output .= form_select(t("Queue for moderation"), "moderate", $edit->moderate, array("Disabled", "Enabled"));
$output .= form_select(t("Promote to front page"), "promote", $edit->promote, array("Disabled", "Enabled"));
$output .= form_select(t("Static on front page"), "static", $edit->static, array("Disabled", "Enabled"));
$output .= form_select(t("Allow users comments"), "comment", $edit->comment, array("Disabled", "Enabled"));
$output .= form_select(t("Allow users comments"), "comment", $edit->comment, array("Disabled", "Read only", "Read/Write"));
$output .= form_select(t("Create new revision"), "revision", $edit->revision, array("Disabled", "Enabled"));
}
......@@ -985,9 +989,10 @@ function node_preview($node) {
}
function node_submit($node) {
global $theme, $user;
global $theme, $user, $tid;
if (user_access("post content")) {
$context->tid = $tid;
if (user_access("post content", $context)) {
/*
** Fixup the node when required:
......@@ -1024,6 +1029,12 @@ function node_submit($node) {
$nid = node_save($node, array_merge($fields, module_invoke($node->type, "save", "update", $node)));
/*
** Update terms of the node
*/
taxonomy_node_save($nid, $node->taxonomy);
watchdog("special", "$node->type: updated '$node->title'");
$output = t("The node has been updated.");
}
......@@ -1055,14 +1066,20 @@ function node_submit($node) {
*/
if (user_access("administer nodes")) {
$fields = array("uid", "body", "comment" => 1, "promote", "moderate", "status" => 1, "teaser", "title", "type" => $node->type);
$fields = array("uid", "body", "comment" => 2, "promote", "moderate", "status" => 1, "teaser", "title", "type" => $node->type);
}
else {
$fields = array("uid" => ($user->uid ? $user->uid : 0), "body", "comment" => 1, "teaser", "title", "type" => $node->type);
$fields = array("uid" => ($user->uid ? $user->uid : 0), "body", "comment" => 2, "teaser", "title", "type" => $node->type);
}
$nid = node_save($node, array_merge($fields, module_invoke($node->type, "save", "create", $node)));
/*
** Insert terms of the node
*/
taxonomy_node_save($nid, $node->taxonomy);
watchdog("special", "$node->type: added '$node->title'");
$output = t("Thanks for your submission.");
}
......@@ -1119,6 +1136,12 @@ function node_delete($edit) {
db_query("DELETE FROM node WHERE nid = '$node->nid'");
db_query("DELETE FROM comments WHERE nid = '$node->nid'");
/*
** Delete any taxonomy terms
*/
taxonomy_node_delete($node->nid);
/*
** Call the node specific callback (if any):
*/
......@@ -1145,7 +1168,7 @@ function node_delete($edit) {
}
function node_page() {
global $op, $id, $user, $edit, $type, $theme, $meta;
global $op, $id, $user, $edit, $type, $theme, $or, $and;
if ($op == "feed") {
node_feed();
......@@ -1185,11 +1208,31 @@ function node_page() {
$theme->box($title, node_delete($edit));
break;
default:
$result = db_query("SELECT nid, type FROM node WHERE ". ($meta ? "attributes LIKE '%". check_input($meta) ."%' AND " : "") . ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
// prepare query
if ($or) {
foreach ((explode(",", $or)) as $t) {
$terms[] = "'".check_query($t)."'";
}
} else if ($and) {
foreach ((explode(",", $and)) as $t) {
$terms[] = "'".check_query($t)."'";
}
}
if ($or) {
// this is an OR of terms
$result = db_query("SELECT DISTINCT(n.nid), type FROM node n LEFT JOIN term_node r ON n.nid = r.nid WHERE tid IN (".implode(",", $terms).") AND ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
} else if ($and) {
// this is an AND
$result = db_query("SELECT n.nid, type, count(*) AS c FROM node n LEFT JOIN term_node r ON n.nid = r.nid WHERE tid IN (".implode(",", $terms).") AND ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' GROUP BY n.nid HAVING c = ".count($terms)." ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
} else {
$result = db_query("SELECT nid, type FROM node WHERE ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
}
while ($node = db_fetch_object($result)) {
node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
}
}
}
$theme->footer();
}
......
......@@ -149,7 +149,7 @@ function node_save($node, $filter) {
$node->created = time();
$node->changed = time();
$node->nid = db_result(db_query("SELECT MAX(nid) + 1 FROM node"));
$node->nid = empty($node->nid) ? 1 : $node->nid;
$node->nid = empty($node->nid) ? 1 : $node->nid;
// Prepare the query:
foreach ($node as $key => $value) {
......@@ -363,6 +363,10 @@ function node_filter_line($text) {
return trim($text);
}
function node_comment_mode($nid) {
return db_result(db_query("SELECT comment FROM node WHERE nid = '".check_query($nid)."'"));
}
function node_filter($text) {
if (variable_get("filter_html", 0)) $text = node_filter_html($text);
if (variable_get("filter_link", 0)) $text = node_filter_link($text);
......@@ -867,7 +871,7 @@ function node_form($edit) {
$output .= form_select(t("Queue for moderation"), "moderate", $edit->moderate, array("Disabled", "Enabled"));
$output .= form_select(t("Promote to front page"), "promote", $edit->promote, array("Disabled", "Enabled"));
$output .= form_select(t("Static on front page"), "static", $edit->static, array("Disabled", "Enabled"));
$output .= form_select(t("Allow users comments"), "comment", $edit->comment, array("Disabled", "Enabled"));
$output .= form_select(t("Allow users comments"), "comment", $edit->comment, array("Disabled", "Read only", "Read/Write"));
$output .= form_select(t("Create new revision"), "revision", $edit->revision, array("Disabled", "Enabled"));
}
......@@ -985,9 +989,10 @@ function node_preview($node) {
}
function node_submit($node) {
global $theme, $user;
global $theme, $user, $tid;
if (user_access("post content")) {
$context->tid = $tid;
if (user_access("post content", $context)) {
/*
** Fixup the node when required:
......@@ -1024,6 +1029,12 @@ function node_submit($node) {
$nid = node_save($node, array_merge($fields, module_invoke($node->type, "save", "update", $node)));
/*
** Update terms of the node
*/
taxonomy_node_save($nid, $node->taxonomy);
watchdog("special", "$node->type: updated '$node->title'");
$output = t("The node has been updated.");
}
......@@ -1055,14 +1066,20 @@ function node_submit($node) {
*/
if (user_access("administer nodes")) {
$fields = array("uid", "body", "comment" => 1, "promote", "moderate", "status" => 1, "teaser", "title", "type" => $node->type);
$fields = array("uid", "body", "comment" => 2, "promote", "moderate", "status" => 1, "teaser", "title", "type" => $node->type);
}
else {
$fields = array("uid" => ($user->uid ? $user->uid : 0), "body", "comment" => 1, "teaser", "title", "type" => $node->type);
$fields = array("uid" => ($user->uid ? $user->uid : 0), "body", "comment" => 2, "teaser", "title", "type" => $node->type);
}
$nid = node_save($node, array_merge($fields, module_invoke($node->type, "save", "create", $node)));
/*
** Insert terms of the node
*/
taxonomy_node_save($nid, $node->taxonomy);
watchdog("special", "$node->type: added '$node->title'");
$output = t("Thanks for your submission.");
}
......@@ -1119,6 +1136,12 @@ function node_delete($edit) {
db_query("DELETE FROM node WHERE nid = '$node->nid'");
db_query("DELETE FROM comments WHERE nid = '$node->nid'");
/*
** Delete any taxonomy terms
*/
taxonomy_node_delete($node->nid);
/*
** Call the node specific callback (if any):
*/
......@@ -1145,7 +1168,7 @@ function node_delete($edit) {
}
function node_page() {
global $op, $id, $user, $edit, $type, $theme, $meta;
global $op, $id, $user, $edit, $type, $theme, $or, $and;
if ($op == "feed") {
node_feed();
......@@ -1185,11 +1208,31 @@ function node_page() {
$theme->box($title, node_delete($edit));
break;
default:
$result = db_query("SELECT nid, type FROM node WHERE ". ($meta ? "attributes LIKE '%". check_input($meta) ."%' AND " : "") . ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
// prepare query
if ($or) {
foreach ((explode(",", $or)) as $t) {
$terms[] = "'".check_query($t)."'";
}
} else if ($and) {
foreach ((explode(",", $and)) as $t) {
$terms[] = "'".check_query($t)."'";
}
}
if ($or) {
// this is an OR of terms
$result = db_query("SELECT DISTINCT(n.nid), type FROM node n LEFT JOIN term_node r ON n.nid = r.nid WHERE tid IN (".implode(",", $terms).") AND ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
} else if ($and) {
// this is an AND
$result = db_query("SELECT n.nid, type, count(*) AS c FROM node n LEFT JOIN term_node r ON n.nid = r.nid WHERE tid IN (".implode(",", $terms).") AND ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' GROUP BY n.nid HAVING c = ".count($terms)." ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
} else {
$result = db_query("SELECT nid, type FROM node WHERE ". ($id ? "nid = '$id'" : "promote = '1'") ." AND status = '1' ORDER BY static DESC, created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get("default_nodes_main", 10)));
}
while ($node = db_fetch_object($result)) {
node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
}
}
}
$theme->footer();
}
......