summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2001-11-04 15:57:43 +0000
committerDries Buytaert <dries@buytaert.net>2001-11-04 15:57:43 +0000
commitb6f1c9c739c6fe15bf3a7dffe5d5bfd20ec4a948 (patch)
tree3cb240a3dbdec9ece91662d377ec6a2a9026b644 /modules
parent29364d5b5543b7d16cce9147a37861a41750fb83 (diff)
downloadbrdo-b6f1c9c739c6fe15bf3a7dffe5d5bfd20ec4a948.tar.gz
brdo-b6f1c9c739c6fe15bf3a7dffe5d5bfd20ec4a948.tar.bz2
- node system:
+ fixed a typo in node_load(): it should be faster now - book module: + removed the functions book_parent() and book_parent_query() as they were no longer needed. Gerhard & co: this should fix the occasional SQL errors you get, and should improve performance. + made the "next", "previous" and "up" links work correctly ... + XHTML-ified the code + added some missing translations I'm working on the book module now to make it possible to update book pages.
Diffstat (limited to 'modules')
-rw-r--r--modules/book.module180
-rw-r--r--modules/book/book.module180
-rw-r--r--modules/node.module19
-rw-r--r--modules/node/node.module19
4 files changed, 210 insertions, 188 deletions
diff --git a/modules/book.module b/modules/book.module
index 03a239ae2..6b24f3ec4 100644
--- a/modules/book.module
+++ b/modules/book.module
@@ -20,9 +20,15 @@ function book_access($op, $node) {
}
if ($op == "update") {
- return 1;
- }
+ /*
+ ** Everyone can upate a book page if the "create new revision"-bit
+ ** is set: that is, only updates that don't overwrite the previous
+ ** conent will be allowed.
+ */
+
+ return $node->revision;
+ }
}
function book_link($type) {
@@ -39,35 +45,75 @@ function book_load($node) {
}
function book_insert($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 0 WHERE nid = '$node->pid'");
- }
- db_query("INSERT INTO book (nid, pid, parent, weight, log) VALUES ('$node->nid', '$node->pid', '$node->parent', '$node->weight', '$node->log')");
+ db_query("INSERT INTO book (nid, parent, weight) VALUES ('$node->nid', '$node->parent', '$node->weight')");
}
function book_update($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 0 WHERE nid = '$node->pid'");
- }
- db_query("UPDATE book SET parent = '$node->parent', weight = '$node->weight', log = '$node->log' WHERE nid = '$node->nid'");
+ db_query("UPDATE book SET parent = '$node->parent', weight = '$node->weight' WHERE nid = '$node->nid'");
}
function book_delete($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 1 WHERE nid = '$node->pid'");
- }
db_query("DELETE FROM book WHERE nid = '$node->nid'");
}
function book_save($node) {
- if ($node->nid && user_access("administer nodes")) {
- return array("pid", "log", "parent", "weight");
+ if ($node->nid) {
+ if (user_access("administer nodes")) {
+ /*
+ ** If a node administrator updates a book page, we don't create a
+ ** new revision unless explicitly specified.
+ */
+
+ return array("parent", "weight");
+ }
+ else {
+ /*
+ ** If a regular user updates a book page, we always create a new
+ ** revision. These new revisions are subject to moderation, and
+ ** are not or no longer being automatically promoted.
+ */
+
+ return array("created" => time(), "moderate" => 1, "parent", "promote" => 0, "score" => 0, "status" => 1, "users" => "", "revisions", "votes" => 0, "weight");
+ }
}
else {
- return array("moderate" => 1, "promote" => 0, "status" => 0, "log", "parent", "weight");
+ return array("moderate" => 1, "parent", "promote" => 0, "status" => 1, "weight");
}
}
+function book_form($node, $help, $error) {
+ global $user;
+
+ $output .= form_select(t("Parent"), "parent", $node->parent, book_toc(), t("The parent subject or category the page belongs in."));
+ $output .= form_textarea(t("Content"), "body", $node->body, 60, 20, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
+ $output .= form_textarea(t("Log message"), "history", $node->history, 60, 5, t("An explanation of the additions or updates being made to help the group understand your motivations."));
+
+ if (user_access("administer nodes")) {
+ $output .= form_select(t("Weight"), "weight", $node->weight, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30), t("The heavier nodes will sink and the lighter nodes will be positioned nearer the top."));
+ }
+ else {
+
+ /*
+ ** Carry out some explanation or submission guidelines:
+ */
+
+ $help = t("\"update book page\"-help: to be written! It should explain the basic idea behind our collaborative book and how their update helps to improve the quality of the book. Also mention that all updates are subject to moderation or review. Any who can put this into a fluent English help text?");
+
+ /*
+ ** If a regular user updates a book page, we create a new revision
+ ** authored by that user:
+ */
+
+ $output .= form_hidden("revision", 1);
+
+ $node->uid = $user->uid; // passed by reference
+ $node->name = $user->name;
+
+ }
+
+ return $output;
+}
+
function book_location($node, $nodes = array()) {
$parent = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.nid = '$node->parent'"));
if ($parent->title) {
@@ -85,63 +131,60 @@ function book_view($node, $main = 0) {
}
else {
if ($node->nid && $node->parent) {
- $list = book_parent_query($node->parent);
- $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND $list AND (b.weight > '$node->weight' OR (b.weight = '$node->weight' AND n.title > '". check_query($node->title) ."')) ORDER BY b.weight ASC,n.title ASC"));
- $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND $list AND (b.weight < '$node->weight' OR (b.weight = '$node->weight' AND n.title < '". check_query($node->title) ."')) ORDER BY b.weight DESC,n.title DESC"));
+ $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND b.parent = '$node->parent' AND (b.weight > '$node->weight' OR (b.weight = '$node->weight' AND n.title > '". check_query($node->title) ."')) ORDER BY b.weight ASC, n.title ASC"));
+ $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND b.parent = '$node->parent' AND (b.weight < '$node->weight' OR (b.weight = '$node->weight' AND n.title < '". check_query($node->title) ."')) ORDER BY b.weight DESC, n.title DESC"));
}
- $output .= "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" WIDTH=\"100%\">\n";
+ $output .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n";
if ($node->title) {
foreach (book_location($node) as $level) {
- $location .= "$indent <A HREF=\"node.php?id=$level->nid\">$level->title</A><BR>";
+ $location .= "$indent <a href=\"node.php?id=$level->nid\">$level->title</a><br />";
$indent .= "-";
}
- $output .= " <TR><TD COLSPAN=\"2\">$location</TD><TD ALIGN=\"right\"><A HREF=\"module.php?mod=node&op=edit&id=$node->nid\">update</A></TD></TR>\n";
- $output .= " <TR><TD COLSPAN=\"3\"><HR></TD></TR>";
- $output .= " <TR><TD COLSPAN=\"3\"><B><BIG>". check_output($node->title) ."</BIG></B>". ($node->body ? "<BR><SMALL><I>Last updated by ". format_name($node) ." on ". format_date($node->created) ."</I></SMALL> " : "") ."</TD></TR>\n";
+ $output .= " <tr><td colspan=\"2\">$location</td><td align=\"right\"><a href=\"module.php?mod=node&op=edit&id=$node->nid\">". t("update this book page") ."</a></td></tr>";
+ $output .= " <tr><td colspan=\"3\"><hr /></td></tr>";
+ $output .= " <tr><td colspan=\"3\"><b><big>". check_output($node->title) ."</big></b>". ($node->body ? "<br /><small><i>". sprintf(t("Last updated by %s on %s"), format_name($node), format_date($node->created)) ."</i></small> " : "") ."</td></tr>";
}
if ($node->body) {
- $output .= " <TR><TD COLSPAN=\"3\"><BR>". check_output($node->body, 1) ."</TD></TR>";
+ $output .= " <tr><td colspan=\"3\"><br />". check_output($node->body, 1) ."</td></tr>";
}
if ($node->nid) {
- $output .= " <TR><TD COLSPAN=\"3\"><BR>". book_tree($node->nid) ."</TD></TR>";
+ $output .= " <tr><td colspan=\"3\"><br />". book_tree($node->nid) ."</td></tr>";
}
- $output .= " <TR><TD COLSPAN=\"3\"><HR></TD></TR>";
- $output .= " <TR><TD ALIGN=\"left\" WIDTH=\"33%\">". ($prev ? "<A HREF=\"node.php?id=$prev->nid\">". t("previous") ."</A>" : t("previous")) ."</TD><TD ALIGN=\"center\" WIDTH=\"34%\"><A HREF=\"module.php?mod=book\">index</A></TD><TD ALIGN=\"right\" WIDTH=\"33%\">". ($next ? "<A HREF=\"node.php?id=$next->nid\">". t("next") ."</A>" : t("next")) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"left\" WIDTH=\"33%\">". ($prev ? "<SMALL>". check_output($prev->title) ."</SMALL>" : "&nbsp;") ."</TD><TD ALIGN=\"center\" WIDTH=\"34%\">". ($node->parent ? "<A HREF=\"node.php?id=$node->parent\">". t("up") ."</A>" : t("up")) ."</TD><TD ALIGN=\"right\" WIDTH=\"33%\">". ($next ? "<SMALL>". check_output($next->title) ."</SMALL>" : "&nbsp;") ."</TD></TR>\n";
- $output .= "</TABLE>\n";
+ $output .= " <tr><td colspan=\"3\"><hr /></td></tr>";
+ $output .= " <tr><td align=\"left\" width=\"33%\">". ($prev ? "<a href=\"node.php?id=$prev->nid\">". t("previous") ."</a>" : t("previous")) ."</td><td align=\"center\" width=\"34%\"><a href=\"module.php?mod=book\">index</a></td><td align=\"right\" width=\"33%\">". ($next ? "<a href=\"node.php?id=$next->nid\">". t("next") ."</a>" : t("next")) ."</td></tr>";
+ $output .= " <tr><td align=\"left\" width=\"33%\">". ($prev ? "<small>". check_output($prev->title) ."</small>" : "&nbsp;") ."</td><td align=\"center\" width=\"34%\">". ($node->parent ? "<a href=\"node.php?id=$node->parent\">". t("up") ."</a>" : t("up")) ."</td><td align=\"right\" width=\"33%\">". ($next ? "<small>". check_output($next->title) ."</small>" : "&nbsp;") ."</td></tr>";
+ $output .= "</table>";
$theme->box(t("Handbook"), $output);
}
}
-function book_parent_query($parent) {
- if ($parent > 0) {
- $list = array();
- foreach (book_parent($parent) as $pid) array_push($list, "b.parent = $pid");
- }
- else {
- $list = array("b.parent = ''");
- }
- return "(". implode(" OR ", $list) .")";
-}
-
function book_toc($parent = "", $indent = "", $toc = array()) {
- // select all child nodes:
- $result = db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND ". book_parent_query($parent) ." ORDER BY b.weight");
+ /*
+ ** Select all child nodes:
+ */
+
+ $result = db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND b.parent = '$parent' ORDER BY b.weight");
+
+ /*
+ ** Add the root node:
+ */
- // add root node:
if (user_access("administer nodes")) {
$toc[0] = "<root>";
}
- // build table of contents:
+ /*
+ ** Build the table of contents:
+ */
+
while ($node = db_fetch_object($result)) {
$toc[$node->nid] = "$indent $node->title";
$toc = book_toc($node->nid, "$indent-", $toc);
@@ -150,48 +193,20 @@ function book_toc($parent = "", $indent = "", $toc = array()) {
return $toc;
}
-function book_form($node, $help, $error) {
- global $user;
-
- $output .= form_select(t("Parent"), "parent", $node->parent, book_toc(), t("The parent subject or category the page belongs in."));
- $output .= form_textarea(t("Content"), "body", $node->body, 60, 20, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
- $output .= form_textarea(t("Log message"), "log", $node->log, 60, 5, t("An explanation of the additions or updates being made to help the group understand your motivations."));
-
- if (user_access("administer nodes")) {
- $output .= form_select(t("Weight"), "weight", $node->weight, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30), t("The heavier nodes will sink and the lighter nodes will be positioned nearer the top."));
- }
-
- if ($node->pid > 0) {
- $output .= form_hidden("pid", $node->pid);
- }
-
- return $output;
-}
-
-function book_parent($nid) {
- if ($node = node_load(array("nid" => $nid))) {
- $list[$nid] = $nid;
- }
- if ($node->pid) {
- $list = array_merge($list, book_parent($node->pid));
- }
- return $list ? $list : array();
-}
-
function book_tree($parent = "", $depth = 0) {
- global $PHP_SELF;
- if ($depth < 3 || strstr($PHP_SELF,"admin.php")) {
+ if ($depth < 3) {
// select all child nodes:
- $result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND ". book_parent_query($parent) ." ORDER BY b.weight, n.title");
+ $result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND b.parent = '$parent' ORDER BY b.weight, n.title");
// render output:
while ($node = db_fetch_object($result)) {
- $output .= "<LI><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A>". (strstr($PHP_SELF, "admin.php") ? " <SMALL>(weight: $node->weight/$node->parent, status: $node->status) (<A HREF=\"admin.php?mod=node&type=book&op=edit&id=$node->nid\">edit</A>)</SMALL>" : "") ."</LI>\n";
+ $output .= "<li><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></li>";
$output .= book_tree($node->nid, $depth + 1);
}
- $output = "<UL>$output</UL>";
+ $output = "<ul>$output</ul>";
}
+
return $output;
}
@@ -201,11 +216,11 @@ function book_render() {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE b.parent = 0 AND n.status = 1 ORDER BY b.weight");
while ($node = db_fetch_object($result)) {
- $output .= "<DT><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></DT><DD>". check_output($node->body, 1) ."<BR><BR></DD>";
+ $output .= "<dt><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></dt><dd>". check_output($node->body, 1) ."<br /><br /></dd>";
}
$theme->header();
- $theme->box(t("Handbook"), "<DL>$output</DL>");
+ $theme->box(t("Handbook"), "<dl>$output</dl>");
$theme->footer();
}
@@ -234,7 +249,7 @@ function book_export_html($id = "", $depth = 1) {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND n.nid = '". check_input($id) ."'");
while ($node = db_fetch_object($result)) {
- $output .= "<H$depth>". check_output($node->title) ."</H$depth>";
+ $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
if ($node->body) $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
}
$output .= book_export_html_recursive($id, $depth);
@@ -246,9 +261,8 @@ function book_export_html_recursive($parent = "", $depth = 1) {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND b.parent = '$parent' ORDER BY b.weight");
while ($node = db_fetch_object($result)) {
- $output .= "<H$depth>". check_output($node->title) ."</H$depth>";
+ $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
if ($node->body) $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
- if ($node->pid) $output .= book_export_html_recursive($node->pid, $depth + 1);
$output .= book_export_html_recursive($node->nid, $depth + 1);
}
diff --git a/modules/book/book.module b/modules/book/book.module
index 03a239ae2..6b24f3ec4 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -20,9 +20,15 @@ function book_access($op, $node) {
}
if ($op == "update") {
- return 1;
- }
+ /*
+ ** Everyone can upate a book page if the "create new revision"-bit
+ ** is set: that is, only updates that don't overwrite the previous
+ ** conent will be allowed.
+ */
+
+ return $node->revision;
+ }
}
function book_link($type) {
@@ -39,35 +45,75 @@ function book_load($node) {
}
function book_insert($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 0 WHERE nid = '$node->pid'");
- }
- db_query("INSERT INTO book (nid, pid, parent, weight, log) VALUES ('$node->nid', '$node->pid', '$node->parent', '$node->weight', '$node->log')");
+ db_query("INSERT INTO book (nid, parent, weight) VALUES ('$node->nid', '$node->parent', '$node->weight')");
}
function book_update($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 0 WHERE nid = '$node->pid'");
- }
- db_query("UPDATE book SET parent = '$node->parent', weight = '$node->weight', log = '$node->log' WHERE nid = '$node->nid'");
+ db_query("UPDATE book SET parent = '$node->parent', weight = '$node->weight' WHERE nid = '$node->nid'");
}
function book_delete($node) {
- if ($node->pid && $node->status == 1) {
- db_query("UPDATE node SET status = 1 WHERE nid = '$node->pid'");
- }
db_query("DELETE FROM book WHERE nid = '$node->nid'");
}
function book_save($node) {
- if ($node->nid && user_access("administer nodes")) {
- return array("pid", "log", "parent", "weight");
+ if ($node->nid) {
+ if (user_access("administer nodes")) {
+ /*
+ ** If a node administrator updates a book page, we don't create a
+ ** new revision unless explicitly specified.
+ */
+
+ return array("parent", "weight");
+ }
+ else {
+ /*
+ ** If a regular user updates a book page, we always create a new
+ ** revision. These new revisions are subject to moderation, and
+ ** are not or no longer being automatically promoted.
+ */
+
+ return array("created" => time(), "moderate" => 1, "parent", "promote" => 0, "score" => 0, "status" => 1, "users" => "", "revisions", "votes" => 0, "weight");
+ }
}
else {
- return array("moderate" => 1, "promote" => 0, "status" => 0, "log", "parent", "weight");
+ return array("moderate" => 1, "parent", "promote" => 0, "status" => 1, "weight");
}
}
+function book_form($node, $help, $error) {
+ global $user;
+
+ $output .= form_select(t("Parent"), "parent", $node->parent, book_toc(), t("The parent subject or category the page belongs in."));
+ $output .= form_textarea(t("Content"), "body", $node->body, 60, 20, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
+ $output .= form_textarea(t("Log message"), "history", $node->history, 60, 5, t("An explanation of the additions or updates being made to help the group understand your motivations."));
+
+ if (user_access("administer nodes")) {
+ $output .= form_select(t("Weight"), "weight", $node->weight, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30), t("The heavier nodes will sink and the lighter nodes will be positioned nearer the top."));
+ }
+ else {
+
+ /*
+ ** Carry out some explanation or submission guidelines:
+ */
+
+ $help = t("\"update book page\"-help: to be written! It should explain the basic idea behind our collaborative book and how their update helps to improve the quality of the book. Also mention that all updates are subject to moderation or review. Any who can put this into a fluent English help text?");
+
+ /*
+ ** If a regular user updates a book page, we create a new revision
+ ** authored by that user:
+ */
+
+ $output .= form_hidden("revision", 1);
+
+ $node->uid = $user->uid; // passed by reference
+ $node->name = $user->name;
+
+ }
+
+ return $output;
+}
+
function book_location($node, $nodes = array()) {
$parent = db_fetch_object(db_query("SELECT n.nid, n.title, b.parent FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.nid = '$node->parent'"));
if ($parent->title) {
@@ -85,63 +131,60 @@ function book_view($node, $main = 0) {
}
else {
if ($node->nid && $node->parent) {
- $list = book_parent_query($node->parent);
- $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND $list AND (b.weight > '$node->weight' OR (b.weight = '$node->weight' AND n.title > '". check_query($node->title) ."')) ORDER BY b.weight ASC,n.title ASC"));
- $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND $list AND (b.weight < '$node->weight' OR (b.weight = '$node->weight' AND n.title < '". check_query($node->title) ."')) ORDER BY b.weight DESC,n.title DESC"));
+ $next = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND b.parent = '$node->parent' AND (b.weight > '$node->weight' OR (b.weight = '$node->weight' AND n.title > '". check_query($node->title) ."')) ORDER BY b.weight ASC, n.title ASC"));
+ $prev = db_fetch_object(db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.status = 1 AND b.parent = '$node->parent' AND (b.weight < '$node->weight' OR (b.weight = '$node->weight' AND n.title < '". check_query($node->title) ."')) ORDER BY b.weight DESC, n.title DESC"));
}
- $output .= "<TABLE BORDER=\"0\" CELLPADDING=\"0\" CELLSPACING=\"0\" WIDTH=\"100%\">\n";
+ $output .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n";
if ($node->title) {
foreach (book_location($node) as $level) {
- $location .= "$indent <A HREF=\"node.php?id=$level->nid\">$level->title</A><BR>";
+ $location .= "$indent <a href=\"node.php?id=$level->nid\">$level->title</a><br />";
$indent .= "-";
}
- $output .= " <TR><TD COLSPAN=\"2\">$location</TD><TD ALIGN=\"right\"><A HREF=\"module.php?mod=node&op=edit&id=$node->nid\">update</A></TD></TR>\n";
- $output .= " <TR><TD COLSPAN=\"3\"><HR></TD></TR>";
- $output .= " <TR><TD COLSPAN=\"3\"><B><BIG>". check_output($node->title) ."</BIG></B>". ($node->body ? "<BR><SMALL><I>Last updated by ". format_name($node) ." on ". format_date($node->created) ."</I></SMALL> " : "") ."</TD></TR>\n";
+ $output .= " <tr><td colspan=\"2\">$location</td><td align=\"right\"><a href=\"module.php?mod=node&op=edit&id=$node->nid\">". t("update this book page") ."</a></td></tr>";
+ $output .= " <tr><td colspan=\"3\"><hr /></td></tr>";
+ $output .= " <tr><td colspan=\"3\"><b><big>". check_output($node->title) ."</big></b>". ($node->body ? "<br /><small><i>". sprintf(t("Last updated by %s on %s"), format_name($node), format_date($node->created)) ."</i></small> " : "") ."</td></tr>";
}
if ($node->body) {
- $output .= " <TR><TD COLSPAN=\"3\"><BR>". check_output($node->body, 1) ."</TD></TR>";
+ $output .= " <tr><td colspan=\"3\"><br />". check_output($node->body, 1) ."</td></tr>";
}
if ($node->nid) {
- $output .= " <TR><TD COLSPAN=\"3\"><BR>". book_tree($node->nid) ."</TD></TR>";
+ $output .= " <tr><td colspan=\"3\"><br />". book_tree($node->nid) ."</td></tr>";
}
- $output .= " <TR><TD COLSPAN=\"3\"><HR></TD></TR>";
- $output .= " <TR><TD ALIGN=\"left\" WIDTH=\"33%\">". ($prev ? "<A HREF=\"node.php?id=$prev->nid\">". t("previous") ."</A>" : t("previous")) ."</TD><TD ALIGN=\"center\" WIDTH=\"34%\"><A HREF=\"module.php?mod=book\">index</A></TD><TD ALIGN=\"right\" WIDTH=\"33%\">". ($next ? "<A HREF=\"node.php?id=$next->nid\">". t("next") ."</A>" : t("next")) ."</TD></TR>\n";
- $output .= " <TR><TD ALIGN=\"left\" WIDTH=\"33%\">". ($prev ? "<SMALL>". check_output($prev->title) ."</SMALL>" : "&nbsp;") ."</TD><TD ALIGN=\"center\" WIDTH=\"34%\">". ($node->parent ? "<A HREF=\"node.php?id=$node->parent\">". t("up") ."</A>" : t("up")) ."</TD><TD ALIGN=\"right\" WIDTH=\"33%\">". ($next ? "<SMALL>". check_output($next->title) ."</SMALL>" : "&nbsp;") ."</TD></TR>\n";
- $output .= "</TABLE>\n";
+ $output .= " <tr><td colspan=\"3\"><hr /></td></tr>";
+ $output .= " <tr><td align=\"left\" width=\"33%\">". ($prev ? "<a href=\"node.php?id=$prev->nid\">". t("previous") ."</a>" : t("previous")) ."</td><td align=\"center\" width=\"34%\"><a href=\"module.php?mod=book\">index</a></td><td align=\"right\" width=\"33%\">". ($next ? "<a href=\"node.php?id=$next->nid\">". t("next") ."</a>" : t("next")) ."</td></tr>";
+ $output .= " <tr><td align=\"left\" width=\"33%\">". ($prev ? "<small>". check_output($prev->title) ."</small>" : "&nbsp;") ."</td><td align=\"center\" width=\"34%\">". ($node->parent ? "<a href=\"node.php?id=$node->parent\">". t("up") ."</a>" : t("up")) ."</td><td align=\"right\" width=\"33%\">". ($next ? "<small>". check_output($next->title) ."</small>" : "&nbsp;") ."</td></tr>";
+ $output .= "</table>";
$theme->box(t("Handbook"), $output);
}
}
-function book_parent_query($parent) {
- if ($parent > 0) {
- $list = array();
- foreach (book_parent($parent) as $pid) array_push($list, "b.parent = $pid");
- }
- else {
- $list = array("b.parent = ''");
- }
- return "(". implode(" OR ", $list) .")";
-}
-
function book_toc($parent = "", $indent = "", $toc = array()) {
- // select all child nodes:
- $result = db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND ". book_parent_query($parent) ." ORDER BY b.weight");
+ /*
+ ** Select all child nodes:
+ */
+
+ $result = db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND b.parent = '$parent' ORDER BY b.weight");
+
+ /*
+ ** Add the root node:
+ */
- // add root node:
if (user_access("administer nodes")) {
$toc[0] = "<root>";
}
- // build table of contents:
+ /*
+ ** Build the table of contents:
+ */
+
while ($node = db_fetch_object($result)) {
$toc[$node->nid] = "$indent $node->title";
$toc = book_toc($node->nid, "$indent-", $toc);
@@ -150,48 +193,20 @@ function book_toc($parent = "", $indent = "", $toc = array()) {
return $toc;
}
-function book_form($node, $help, $error) {
- global $user;
-
- $output .= form_select(t("Parent"), "parent", $node->parent, book_toc(), t("The parent subject or category the page belongs in."));
- $output .= form_textarea(t("Content"), "body", $node->body, 60, 20, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
- $output .= form_textarea(t("Log message"), "log", $node->log, 60, 5, t("An explanation of the additions or updates being made to help the group understand your motivations."));
-
- if (user_access("administer nodes")) {
- $output .= form_select(t("Weight"), "weight", $node->weight, array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30), t("The heavier nodes will sink and the lighter nodes will be positioned nearer the top."));
- }
-
- if ($node->pid > 0) {
- $output .= form_hidden("pid", $node->pid);
- }
-
- return $output;
-}
-
-function book_parent($nid) {
- if ($node = node_load(array("nid" => $nid))) {
- $list[$nid] = $nid;
- }
- if ($node->pid) {
- $list = array_merge($list, book_parent($node->pid));
- }
- return $list ? $list : array();
-}
-
function book_tree($parent = "", $depth = 0) {
- global $PHP_SELF;
- if ($depth < 3 || strstr($PHP_SELF,"admin.php")) {
+ if ($depth < 3) {
// select all child nodes:
- $result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND ". book_parent_query($parent) ." ORDER BY b.weight, n.title");
+ $result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND b.parent = '$parent' ORDER BY b.weight, n.title");
// render output:
while ($node = db_fetch_object($result)) {
- $output .= "<LI><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A>". (strstr($PHP_SELF, "admin.php") ? " <SMALL>(weight: $node->weight/$node->parent, status: $node->status) (<A HREF=\"admin.php?mod=node&type=book&op=edit&id=$node->nid\">edit</A>)</SMALL>" : "") ."</LI>\n";
+ $output .= "<li><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></li>";
$output .= book_tree($node->nid, $depth + 1);
}
- $output = "<UL>$output</UL>";
+ $output = "<ul>$output</ul>";
}
+
return $output;
}
@@ -201,11 +216,11 @@ function book_render() {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE b.parent = 0 AND n.status = 1 ORDER BY b.weight");
while ($node = db_fetch_object($result)) {
- $output .= "<DT><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></DT><DD>". check_output($node->body, 1) ."<BR><BR></DD>";
+ $output .= "<dt><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></dt><dd>". check_output($node->body, 1) ."<br /><br /></dd>";
}
$theme->header();
- $theme->box(t("Handbook"), "<DL>$output</DL>");
+ $theme->box(t("Handbook"), "<dl>$output</dl>");
$theme->footer();
}
@@ -234,7 +249,7 @@ function book_export_html($id = "", $depth = 1) {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND n.nid = '". check_input($id) ."'");
while ($node = db_fetch_object($result)) {
- $output .= "<H$depth>". check_output($node->title) ."</H$depth>";
+ $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
if ($node->body) $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
}
$output .= book_export_html_recursive($id, $depth);
@@ -246,9 +261,8 @@ function book_export_html_recursive($parent = "", $depth = 1) {
$result = db_query("SELECT n.*, b.* FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND n.status = 1 AND b.parent = '$parent' ORDER BY b.weight");
while ($node = db_fetch_object($result)) {
- $output .= "<H$depth>". check_output($node->title) ."</H$depth>";
+ $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
if ($node->body) $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
- if ($node->pid) $output .= book_export_html_recursive($node->pid, $depth + 1);
$output .= book_export_html_recursive($node->nid, $depth + 1);
}
diff --git a/modules/node.module b/modules/node.module
index 4186230cd..bc1697b7b 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -60,9 +60,8 @@ function node_search($keys) {
}
function node_conf_options() {
-
$output .= form_select(t("Default number of nodes to display"), "default_nodes_main", variable_get("default_nodes_main", 10), array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 15 => 15, 20 => 20, 25 => 25, 30 => 30), t("The default maximum number of nodes to display on the main page."));
-
+ $output .= form_select(t("Minimum number of words in teaser"), "minimum_teaser_size", variable_get("minimum_node_size", 0), array(0 => "0 words", 10 => "10 words", 25 => "25 words", 50 => "50 words", 75 => "75 words", 100 => "100 words", 125 => "125 words", 150 => "150 words", 175 => "175 words", 200 => "200 words"), t("The minimum number of words a teaser should consist of. This can be useful to rule out submissions that do not meet the site's standards, such as short test post."));
return $output;
}
@@ -188,7 +187,7 @@ function node_admin_edit($node) {
$output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
$output .= " <tr><th>older revisions</th><th colspan=\"3\">operations</th></tr>";
foreach ($node->revisions as $key => $revision) {
- $output .= " <tr><td>". sprintf(t("revision #%d by %s on %s"), $key, format_name(user_load(array("uid" => $revision["uid"]))), format_date($revision["timestamp"])) ."</td><td><a href=\"node.php?id=$node->nid&revision=$key\">". t("view revision") ."</a></td><td><a href=\"admin.php?mod=node&op=rollback+revision&id=$node->nid&revision=$key\">". t("rollback revision") ."</a></td><td><a href=\"admin.php?mod=node&op=delete+revision&id=$node->nid&revision=$key\">". t("delete revision") ."</a></td></tr>";
+ $output .= " <tr><td>". sprintf(t("revision #%d revised by %s on %s"), $key, format_name(user_load(array("uid" => $revision["uid"]))), format_date($revision["timestamp"], "small")) . ($revision["history"] ? "<br /><small>". $revision["history"] ."</small>" : "") ."</td><td><a href=\"node.php?id=$node->nid&revision=$key\">". t("view revision") ."</a></td><td><a href=\"admin.php?mod=node&op=rollback+revision&id=$node->nid&revision=$key\">". t("rollback revision") ."</a></td><td><a href=\"admin.php?mod=node&op=delete+revision&id=$node->nid&revision=$key\">". t("delete revision") ."</a></td></tr>";
}
$output .= "</table>";
}
@@ -239,10 +238,10 @@ function node_revision_create($node) {
global $user;
if ($node->nid && $node->revision) {
- $no = node_load(array("nid" => $node->nid));
- $node->revisions = $no->revisions;
- unset($no->revisions);
- $node->revisions[] = array("uid" => $user->uid, "timestamp" => time(), "node" => $no);
+ $prev = node_load(array("nid" => $node->nid));
+ $node->revisions = $prev->revisions;
+ unset($prev->revisions);
+ $node->revisions[] = array("uid" => $user->uid, "timestamp" => time(), "node" => $prev, "history" => $node->history);
}
return $node;
@@ -454,7 +453,7 @@ function node_validate($node, $error = array()) {
** Validate the "teaser"-field:
*/
- if ($node->teaser && count(explode(" ", $node->teaser)) < variable_get("minimum_node_size", 0)) {
+ if ($node->teaser && count(explode(" ", $node->teaser)) < variable_get("minimum_teaser_size", 0)) {
$error["teaser"] = "<div style=\"color: red;\">". t("Your teaser is too short.") ."</div>";
}
@@ -646,9 +645,7 @@ function node_submit($node) {
** Create a new revision when required:
*/
- if ($node->revision) {
- $node = node_revision_create($node);
- }
+ $node = node_revision_create($node);
if ($node->nid) {
diff --git a/modules/node/node.module b/modules/node/node.module
index 4186230cd..bc1697b7b 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -60,9 +60,8 @@ function node_search($keys) {
}
function node_conf_options() {
-
$output .= form_select(t("Default number of nodes to display"), "default_nodes_main", variable_get("default_nodes_main", 10), array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10, 15 => 15, 20 => 20, 25 => 25, 30 => 30), t("The default maximum number of nodes to display on the main page."));
-
+ $output .= form_select(t("Minimum number of words in teaser"), "minimum_teaser_size", variable_get("minimum_node_size", 0), array(0 => "0 words", 10 => "10 words", 25 => "25 words", 50 => "50 words", 75 => "75 words", 100 => "100 words", 125 => "125 words", 150 => "150 words", 175 => "175 words", 200 => "200 words"), t("The minimum number of words a teaser should consist of. This can be useful to rule out submissions that do not meet the site's standards, such as short test post."));
return $output;
}
@@ -188,7 +187,7 @@ function node_admin_edit($node) {
$output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
$output .= " <tr><th>older revisions</th><th colspan=\"3\">operations</th></tr>";
foreach ($node->revisions as $key => $revision) {
- $output .= " <tr><td>". sprintf(t("revision #%d by %s on %s"), $key, format_name(user_load(array("uid" => $revision["uid"]))), format_date($revision["timestamp"])) ."</td><td><a href=\"node.php?id=$node->nid&revision=$key\">". t("view revision") ."</a></td><td><a href=\"admin.php?mod=node&op=rollback+revision&id=$node->nid&revision=$key\">". t("rollback revision") ."</a></td><td><a href=\"admin.php?mod=node&op=delete+revision&id=$node->nid&revision=$key\">". t("delete revision") ."</a></td></tr>";
+ $output .= " <tr><td>". sprintf(t("revision #%d revised by %s on %s"), $key, format_name(user_load(array("uid" => $revision["uid"]))), format_date($revision["timestamp"], "small")) . ($revision["history"] ? "<br /><small>". $revision["history"] ."</small>" : "") ."</td><td><a href=\"node.php?id=$node->nid&revision=$key\">". t("view revision") ."</a></td><td><a href=\"admin.php?mod=node&op=rollback+revision&id=$node->nid&revision=$key\">". t("rollback revision") ."</a></td><td><a href=\"admin.php?mod=node&op=delete+revision&id=$node->nid&revision=$key\">". t("delete revision") ."</a></td></tr>";
}
$output .= "</table>";
}
@@ -239,10 +238,10 @@ function node_revision_create($node) {
global $user;
if ($node->nid && $node->revision) {
- $no = node_load(array("nid" => $node->nid));
- $node->revisions = $no->revisions;
- unset($no->revisions);
- $node->revisions[] = array("uid" => $user->uid, "timestamp" => time(), "node" => $no);
+ $prev = node_load(array("nid" => $node->nid));
+ $node->revisions = $prev->revisions;
+ unset($prev->revisions);
+ $node->revisions[] = array("uid" => $user->uid, "timestamp" => time(), "node" => $prev, "history" => $node->history);
}
return $node;
@@ -454,7 +453,7 @@ function node_validate($node, $error = array()) {
** Validate the "teaser"-field:
*/
- if ($node->teaser && count(explode(" ", $node->teaser)) < variable_get("minimum_node_size", 0)) {
+ if ($node->teaser && count(explode(" ", $node->teaser)) < variable_get("minimum_teaser_size", 0)) {
$error["teaser"] = "<div style=\"color: red;\">". t("Your teaser is too short.") ."</div>";
}
@@ -646,9 +645,7 @@ function node_submit($node) {
** Create a new revision when required:
*/
- if ($node->revision) {
- $node = node_revision_create($node);
- }
+ $node = node_revision_create($node);
if ($node->nid) {