From 343e71c8ebdea6dafbd085782b5d042a7a60f2c3 Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Wed, 2 May 2001 20:52:19 +0000
Subject: [PATCH] CHANGES:

- Added moderator permissions to nodes.

- Added moderator support to structure.module.

- Added new moderate.module.

- Renamed moderation.module to queue.module to avoid confusing.
  Updated theme yaroon as it seems to have a hard-coded reference
  to moderation.module.

- Polished on:
   + account.module: improved access list
   + fixed HTML typo in node.module

ACTIONS:

- Jeroen: can jeroen2.theme be removed from ./themes/yaroon?
---
 includes/node.inc                           |  12 ++-
 modules/account.module                      |   2 +-
 modules/book.module                         |   2 +-
 modules/book/book.module                    |   2 +-
 modules/comment.module                      |  14 +--
 modules/comment/comment.module              |  14 +--
 modules/forum.module                        |   8 +-
 modules/forum/forum.module                  |   8 +-
 modules/moderate.module                     | 106 ++++++++++++++++++++
 modules/node.module                         |  12 +--
 modules/node/node.module                    |  12 +--
 modules/page.module                         |   4 +-
 modules/page/page.module                    |   4 +-
 modules/{moderation.module => queue.module} |  38 +++----
 modules/story.module                        |   7 +-
 modules/story/story.module                  |   7 +-
 themes/yaroon/yaroon.theme                  |   2 +-
 updates/2.00-to-x.xx.sql                    |   3 +
 18 files changed, 186 insertions(+), 71 deletions(-)
 create mode 100644 modules/moderate.module
 rename modules/{moderation.module => queue.module} (69%)

diff --git a/includes/node.inc b/includes/node.inc
index 9b4a54d9b21b..d4064b0e7fe5 100644
--- a/includes/node.inc
+++ b/includes/node.inc
@@ -54,7 +54,7 @@ function node_get_comments($nid) {
 function node_save($node) {
   global $user, $status;
 
-  $rows = array(nid, pid, lid, cid, tid, log, type, title, score, votes, author, status, comment, promote, timestamp);
+  $rows = array(nid, pid, lid, cid, tid, log, type, title, score, votes, author, status, comment, promote, moderate, timestamp);
 
   if ($node[nid] > 0) {
     $n = node_get_object("nid", $node[nid]);
@@ -90,7 +90,7 @@ function node_save($node) {
       throttle("post node", variable_get(max_node_rate, 900));
 
       // setup default values:
-      $node = array_merge(array(title => "?", author => $user->id, type => "?", pid => 0, cid => 0, tid => 0, log => "node created", status => (category_submission($node[cid]) ? $status[queued] : $status[posted]) , score => 0, votes => 0, comment => category_comment($node[cid]), promote => category_promote($node[cid]), timestamp => time()), $node);
+      $node = array_merge(array(title => "?", author => $user->id, type => "?", pid => 0, cid => 0, tid => 0, log => "node created", status => (category_submission($node[cid]) ? $status[queued] : $status[posted]) , score => 0, votes => 0, comment => category_comment($node[cid]), promote => category_promote($node[cid]), moderate => "", timestamp => time()), $node);
 
       // prepare queries:
       $f1 = array();
@@ -159,8 +159,8 @@ function node_form($node) {
 }
 
 function node_status($node, $index = -1) {
-  $status = array_intersect(array(dumped, expired, queued, posted), node_invoke($node, "status"));
-  return $index < 0 ? $status : $status[$index];
+  $status = array(dumped, expired, queued, posted);
+  return $index < 0 ? array_intersect($status, node_invoke($node, "status")) : $status[$index];
 }
 
 function node_control($node) {
@@ -198,4 +198,8 @@ function node_visible($node) {
   return ($node->status == $status[posted]) || ($node->status == $status[queued] && $user->id) || user_access($user, $node->type) || user_access($user, "node");
 }
 
+function node_access($account, $node) {
+  return strstr($node->moderate, $account->userid);
+}
+
 ?>
\ No newline at end of file
diff --git a/modules/account.module b/modules/account.module
index 6dbf54977dd1..aeb1f3fc241e 100644
--- a/modules/account.module
+++ b/modules/account.module
@@ -155,7 +155,7 @@ function account_edit($name) {
 
   function access($name, $module) {
     global $access, $account;
-    $access .= "<OPTION VALUE=\"$name\"". (user_access($account, $name) ? " SELECTED" : "") .">$name</OPTION>";
+    if ($module["admin"]) $access .= "<OPTION VALUE=\"$name\"". (user_access($account, $name) ? " SELECTED" : "") .">$name</OPTION>";
   }
 
   $status = array("blocked", "not confirmed", "open");
diff --git a/modules/book.module b/modules/book.module
index 78d4e568043e..61a3f59468e8 100644
--- a/modules/book.module
+++ b/modules/book.module
@@ -92,7 +92,7 @@ function book_toc($parent = 0, $indent = "", $toc = array()) {
 }
 
 function book_form($edit = array()) {
-  global $allowed_html, $PHP_SELF, $REQUEST_URI, $user;
+  global $allowed_html, $REQUEST_URI, $user;
 
   $form .= form_item(t("Author"), format_username(($edit[userid] ? $edit[userid] : $user->userid)));
   $form .= form_hidden(userid, $edit[userid]);
diff --git a/modules/book/book.module b/modules/book/book.module
index 78d4e568043e..61a3f59468e8 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -92,7 +92,7 @@ function book_toc($parent = 0, $indent = "", $toc = array()) {
 }
 
 function book_form($edit = array()) {
-  global $allowed_html, $PHP_SELF, $REQUEST_URI, $user;
+  global $allowed_html, $REQUEST_URI, $user;
 
   $form .= form_item(t("Author"), format_username(($edit[userid] ? $edit[userid] : $user->userid)));
   $form .= form_hidden(userid, $edit[userid]);
diff --git a/modules/comment.module b/modules/comment.module
index 5c2f9005f87b..e87e6d2c9a68 100644
--- a/modules/comment.module
+++ b/modules/comment.module
@@ -14,15 +14,17 @@ function comment_find($keys) {
 }
 
 function comment_edit($id) {
+  global $REQUEST_URI;
+
   $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON c.author = u.id WHERE c.cid = '$id'");
   $comment = db_fetch_object($result);
 
   $form .= form_item(t("Author"), format_username($comment->userid));
   $form .= form_textfield(t("Subject"), "subject", $comment->subject, 50, 128);
   $form .= form_textarea(t("Comment"), "comment", $comment->comment, 50, 10);
-  $form .= form_submit("Save comment");
+  $form .= form_submit("Submit");
 
-  return form("admin.php?mod=comment&id=$id", $form);
+  return form($REQUEST_URI, $form);
 }
 
 function comment_save($id, $edit) {
@@ -30,7 +32,7 @@ function comment_save($id, $edit) {
   watchdog("message", "comment: modified '$edit[subject]'");
 }
 
-function comment_display() {
+function comment_overview() {
   $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON u.id = c.author ORDER BY timestamp DESC LIMIT 50");
 
   $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
@@ -56,12 +58,12 @@ function comment_admin() {
       print search_form($keys);
       print search_data($keys, $mod);
       break;
-    case "Save comment":
+    case "Submit":
       print status(comment_save(check_input($id), $edit));
-      print comment_display();
+      print comment_overview();
       break;
     default:
-      print comment_display();
+      print comment_overview();
   }
 }
 
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 5c2f9005f87b..e87e6d2c9a68 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -14,15 +14,17 @@ function comment_find($keys) {
 }
 
 function comment_edit($id) {
+  global $REQUEST_URI;
+
   $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON c.author = u.id WHERE c.cid = '$id'");
   $comment = db_fetch_object($result);
 
   $form .= form_item(t("Author"), format_username($comment->userid));
   $form .= form_textfield(t("Subject"), "subject", $comment->subject, 50, 128);
   $form .= form_textarea(t("Comment"), "comment", $comment->comment, 50, 10);
-  $form .= form_submit("Save comment");
+  $form .= form_submit("Submit");
 
-  return form("admin.php?mod=comment&id=$id", $form);
+  return form($REQUEST_URI, $form);
 }
 
 function comment_save($id, $edit) {
@@ -30,7 +32,7 @@ function comment_save($id, $edit) {
   watchdog("message", "comment: modified '$edit[subject]'");
 }
 
-function comment_display() {
+function comment_overview() {
   $result = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON u.id = c.author ORDER BY timestamp DESC LIMIT 50");
 
   $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
@@ -56,12 +58,12 @@ function comment_admin() {
       print search_form($keys);
       print search_data($keys, $mod);
       break;
-    case "Save comment":
+    case "Submit":
       print status(comment_save(check_input($id), $edit));
-      print comment_display();
+      print comment_overview();
       break;
     default:
-      print comment_display();
+      print comment_overview();
   }
 }
 
diff --git a/modules/forum.module b/modules/forum.module
index 0936f4eb5521..755e5947af03 100644
--- a/modules/forum.module
+++ b/modules/forum.module
@@ -21,15 +21,15 @@ function forum_view($node) {
 }
 
 function forum_form($edit = array()) {
-  global $format;
+  global $format, $REQUEST_URI;
 
   $form .= form_textfield(t("Subject"), "title", $edit[title], 50, 64);
   $form .= structure_form("forum", $edit);
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 10);
   $form .= form_hidden("nid", $edit[nid]);
-  $form .= form_submit("Save forum");
+  $form .= form_submit("Submit");
 
-  return form("admin.php?mod=forum", $form);
+  return form($REQUEST_URI, $form);
 }
 
 function forum_save($edit) {
@@ -83,7 +83,7 @@ function forum_admin() {
     case "edit":
       print forum_form(node_get_array(nid, $id));
       break;
-   case "Save forum":
+   case "Submit":
       print status(forum_save($edit));
       // fall through:
     default:
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index 0936f4eb5521..755e5947af03 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -21,15 +21,15 @@ function forum_view($node) {
 }
 
 function forum_form($edit = array()) {
-  global $format;
+  global $format, $REQUEST_URI;
 
   $form .= form_textfield(t("Subject"), "title", $edit[title], 50, 64);
   $form .= structure_form("forum", $edit);
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 10);
   $form .= form_hidden("nid", $edit[nid]);
-  $form .= form_submit("Save forum");
+  $form .= form_submit("Submit");
 
-  return form("admin.php?mod=forum", $form);
+  return form($REQUEST_URI, $form);
 }
 
 function forum_save($edit) {
@@ -83,7 +83,7 @@ function forum_admin() {
     case "edit":
       print forum_form(node_get_array(nid, $id));
       break;
-   case "Save forum":
+   case "Submit":
       print status(forum_save($edit));
       // fall through:
     default:
diff --git a/modules/moderate.module b/modules/moderate.module
new file mode 100644
index 000000000000..02f4974b548a
--- /dev/null
+++ b/modules/moderate.module
@@ -0,0 +1,106 @@
+<?php
+
+$module = array("admin" => "moderate_admin");
+
+function moderate_comment_access($cid) {
+  global $user;
+  return db_fetch_object(db_query("SELECT n.moderate FROM comments c LEFT JOIN node n ON c.lid = n.nid WHERE c.cid = '". check_input($cid) ."' AND n.moderate LIKE '%$user->userid%'"));
+}
+
+function moderate_overview($query = array()) {
+  global $user;
+
+  $result = db_query("SELECT n.*, u.userid FROM node n LEFT JOIN users u ON n.author = u.id WHERE n.moderate LIKE '%$user->userid%' ORDER BY n.timestamp DESC LIMIT 15");
+
+  $output .= status($query[0]);
+  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
+  $output .= " <TR><TH>node</TH><TH>category / topic</TH><TH>status</TH><TH>author</TH><TH>date</TH><TH>operations</TH></TR>\n";
+
+  $r1 = db_query("SELECT n.*, u.userid FROM node n LEFT JOIN users u ON n.author = u.id WHERE n.moderate LIKE '%$user->userid%' ORDER BY n.timestamp DESC LIMIT 30");
+  while ($node = db_fetch_object($r1)) {
+    $output .= " <TR><TD><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></TD><TD>". category_name($node->cid) ." / ". topic_name($node->tid) ."</TD><TD>". node_status($node, $node->status) ."</TD><TD>". format_username($node->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD><A HREF=\"admin.php?mod=moderate&type=node&op=edit&id=$node->nid\">edit $node->type</A></TD></TR>\n";
+
+    $r2 = db_query("SELECT c.*, u.userid FROM comments c LEFT JOIN users u ON c.author = u.id WHERE c.lid = '$node->nid' ORDER BY c.timestamp DESC");
+    while ($comment = db_fetch_object($r2)) {
+      $output .= "<TR><TD COLSPAN=\"3\">&nbsp;- <A HREF=\"node.php?id=$comment->lid&cid=$comment->cid&pid=$comment->pid#$comment->cid\">". check_output($comment->subject) ."</A></TD><TD>". format_username($user->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD><A HREF=\"admin.php?mod=moderate&type=comment&op=edit&id=$comment->cid\">edit comment</A></TD></TR>\n";
+    }
+  }
+  $output .= "</TABLE>\n";
+
+  return $output;
+}
+
+function moderate_node_edit($id) {
+  global $user;
+
+  $node = node_get_array("nid", $id);
+  if ($node && strstr($node[moderate], $user->userid)) {
+    return node_form($node);
+  }
+  else {
+    return "access denied";
+  }
+}
+
+function moderate_node_save($edit) {
+  global $user;
+
+  $node = node_get_array("nid", $edit[nid]);
+  if ($node && strstr($node[moderate], $user->userid)) {
+    $edit[type] = $node[type];
+    return node_invoke($edit, "save");
+  }
+  else {
+    return "access denied";
+  }
+}
+
+function moderate_comment_edit($id) {
+  if (moderate_comment_access($id)) {
+    return comment_edit($id);
+  }
+  else {
+    return "access denied";
+  }
+}
+
+function moderate_comment_save($id, $edit) {
+  if (moderate_comment_access($id)) {
+    return comment_save($id, $edit);
+  }
+  else {
+    return "access denied";
+  }
+}
+
+function moderate_admin() {
+  global $op, $id, $edit, $type;
+
+   switch ($type) {
+    case "comment":
+      switch ($op) {
+        case "edit":
+          print moderate_comment_edit($id);
+          break;
+        case "Submit":
+          print status(moderate_comment_save($id, $edit));
+          // fall through:
+        default:
+          print moderate_overview();
+      }
+      break;
+    default:
+      switch ($op) {
+        case "edit":
+          print moderate_node_edit($id);
+          break;
+        case "Submit":
+          print status(moderate_node_save($edit));
+          // fall through:
+       default:
+         print moderate_overview();
+    }
+  }
+}
+
+?>
diff --git a/modules/node.module b/modules/node.module
index d88f852d72f9..bdc4b30d60e2 100644
--- a/modules/node.module
+++ b/modules/node.module
@@ -3,15 +3,15 @@
 $module = array("admin" => "node_admin");
 
 function node_overview($query = array()) {
-  global $user, $rstatus;
+  global $user;
 
   $result = db_query("SELECT n.*, u.userid, c.name AS category FROM node n LEFT JOIN users u ON n.author = u.id LEFT JOIN category c ON n.cid = c.cid $query[1] LIMIT 50");
 
   $output .= status($query[0]);
   $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
-  $output .= " <TR><TH>title</TH><TH>category</TH><TH>status</TH><TH>author</TH><TH>date</TH><TH COLSPAN=\"3\">operations</TH></TR>\n";
+  $output .= " <TR><TH>title</TH><TH>category</TH><TH>status</TH><TH>author</TH><TH>date</TH><TH COLSPAN=\"2\">operations</TH></TR>\n";
   while ($node = db_fetch_object($result)) {
-    $output .= " <TR><TD><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". check_output($node->category ? $node->category : $node->type) ."</TD><TD>". $rstatus[$node->status] ."</TD><TD>". format_username($node->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=view&id=$node->nid\">view node</A></TD>" : "view node") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=edit&id=$node->nid\">edit node</A></TD>" : "edit node") ."</TD><TD>". (user_access($user, $node->type) ? "<A HREF=\"admin.php?mod=$node->type&op=edit&id=$node->nid\">edit $node->type</A></TD>" : "edit $node->type") ."</TD></TR>\n";
+    $output .= " <TR><TD><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". check_output($node->category ? $node->category : $node->type) ."</TD><TD>". node_status($node, $node->status) ."</TD><TD>". format_username($node->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=edit&id=$node->nid\">edit node</A>" : "edit node") ."</TD><TD>". (user_access($user, $node->type) ? "<A HREF=\"admin.php?mod=$node->type&op=edit&id=$node->nid\">edit $node->type</A>" : "edit $node->type") ."</TD></TR>\n";
   }
   $output .= "</TABLE>\n";
 
@@ -19,16 +19,15 @@ function node_overview($query = array()) {
 }
 
 function node_admin_view($id) {
-  global $rstatus;
-
   $node = node_get_object("nid", $id);
 
   $output .= "<FORM ACTION=\"admin.php?mod=node&id=$node->nid\" METHOD=\"post\">\n";
   $output .= form_item("Title", check_output($node->title));
   $output .= form_item("Author", format_username($node->userid));
-  $output .= form_item("Status", $rstatus[$node->status]);
+  $output .= form_item("Status", node_status($node, $node->status));
   $output .= form_item("Comment", node_comment_status($node->comment));
   $output .= form_item("Promote", node_promote_status($node->promote));
+  $output .= form_item("Moderate", check_output($node->moderate));
   $output .= form_item("Date", format_date($node->timestamp));
   $output .= form_submit("Edit node");
   $output .= form_submit("Delete node");
@@ -48,6 +47,7 @@ function node_admin_edit($id) {
   $output .= form_select("Status", "status", $node->status, node_status($node));
   $output .= form_select("Comment", "comment", $node->comment, node_comment_status());
   $output .= form_select("Promote", "promote", $node->promote, node_promote_status());
+  $output .= form_textfield("Moderate", "moderate", $node->moderate, 35, 255, t("A comma-seperated list of usernames."));
   $output .= form_select("Date", "timestamp", $node->timestamp, array($node->timestamp => format_date($node->timestamp) ." (original)", time() => format_date(time()) ." (current)"));
   $output .= form_hidden("nid", $node->nid);
   $output .= form_submit("View node");
diff --git a/modules/node/node.module b/modules/node/node.module
index d88f852d72f9..bdc4b30d60e2 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -3,15 +3,15 @@
 $module = array("admin" => "node_admin");
 
 function node_overview($query = array()) {
-  global $user, $rstatus;
+  global $user;
 
   $result = db_query("SELECT n.*, u.userid, c.name AS category FROM node n LEFT JOIN users u ON n.author = u.id LEFT JOIN category c ON n.cid = c.cid $query[1] LIMIT 50");
 
   $output .= status($query[0]);
   $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
-  $output .= " <TR><TH>title</TH><TH>category</TH><TH>status</TH><TH>author</TH><TH>date</TH><TH COLSPAN=\"3\">operations</TH></TR>\n";
+  $output .= " <TR><TH>title</TH><TH>category</TH><TH>status</TH><TH>author</TH><TH>date</TH><TH COLSPAN=\"2\">operations</TH></TR>\n";
   while ($node = db_fetch_object($result)) {
-    $output .= " <TR><TD><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". check_output($node->category ? $node->category : $node->type) ."</TD><TD>". $rstatus[$node->status] ."</TD><TD>". format_username($node->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=view&id=$node->nid\">view node</A></TD>" : "view node") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=edit&id=$node->nid\">edit node</A></TD>" : "edit node") ."</TD><TD>". (user_access($user, $node->type) ? "<A HREF=\"admin.php?mod=$node->type&op=edit&id=$node->nid\">edit $node->type</A></TD>" : "edit $node->type") ."</TD></TR>\n";
+    $output .= " <TR><TD><A HREF=\"node.php?id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". check_output($node->category ? $node->category : $node->type) ."</TD><TD>". node_status($node, $node->status) ."</TD><TD>". format_username($node->userid) ."</TD><TD>". format_date($node->timestamp, "small") ."</TD><TD>". (user_access($user, "node") ? "<A HREF=\"admin.php?mod=node&op=edit&id=$node->nid\">edit node</A>" : "edit node") ."</TD><TD>". (user_access($user, $node->type) ? "<A HREF=\"admin.php?mod=$node->type&op=edit&id=$node->nid\">edit $node->type</A>" : "edit $node->type") ."</TD></TR>\n";
   }
   $output .= "</TABLE>\n";
 
@@ -19,16 +19,15 @@ function node_overview($query = array()) {
 }
 
 function node_admin_view($id) {
-  global $rstatus;
-
   $node = node_get_object("nid", $id);
 
   $output .= "<FORM ACTION=\"admin.php?mod=node&id=$node->nid\" METHOD=\"post\">\n";
   $output .= form_item("Title", check_output($node->title));
   $output .= form_item("Author", format_username($node->userid));
-  $output .= form_item("Status", $rstatus[$node->status]);
+  $output .= form_item("Status", node_status($node, $node->status));
   $output .= form_item("Comment", node_comment_status($node->comment));
   $output .= form_item("Promote", node_promote_status($node->promote));
+  $output .= form_item("Moderate", check_output($node->moderate));
   $output .= form_item("Date", format_date($node->timestamp));
   $output .= form_submit("Edit node");
   $output .= form_submit("Delete node");
@@ -48,6 +47,7 @@ function node_admin_edit($id) {
   $output .= form_select("Status", "status", $node->status, node_status($node));
   $output .= form_select("Comment", "comment", $node->comment, node_comment_status());
   $output .= form_select("Promote", "promote", $node->promote, node_promote_status());
+  $output .= form_textfield("Moderate", "moderate", $node->moderate, 35, 255, t("A comma-seperated list of usernames."));
   $output .= form_select("Date", "timestamp", $node->timestamp, array($node->timestamp => format_date($node->timestamp) ." (original)", time() => format_date(time()) ." (current)"));
   $output .= form_hidden("nid", $node->nid);
   $output .= form_submit("View node");
diff --git a/modules/page.module b/modules/page.module
index c6a2fbb86ffb..f29d529dd631 100644
--- a/modules/page.module
+++ b/modules/page.module
@@ -38,7 +38,7 @@ function page_form($edit = array()) {
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 10);
   $form .= form_select(t("Type"), "format", $edit[format], $format);
   $form .= form_hidden("nid", $edit[nid]);
-  $form .= form_submit("Save page");
+  $form .= form_submit("Submit");
 
   return form($REQUEST_URI, $form);
 }
@@ -75,7 +75,7 @@ function page_admin() {
     case "listing":
       print node_listing(page_query());
       break;
-   case "Save page":
+   case "Submit":
       print status(page_save($edit));
       // fall through:
     default:
diff --git a/modules/page/page.module b/modules/page/page.module
index c6a2fbb86ffb..f29d529dd631 100644
--- a/modules/page/page.module
+++ b/modules/page/page.module
@@ -38,7 +38,7 @@ function page_form($edit = array()) {
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 10);
   $form .= form_select(t("Type"), "format", $edit[format], $format);
   $form .= form_hidden("nid", $edit[nid]);
-  $form .= form_submit("Save page");
+  $form .= form_submit("Submit");
 
   return form($REQUEST_URI, $form);
 }
@@ -75,7 +75,7 @@ function page_admin() {
     case "listing":
       print node_listing(page_query());
       break;
-   case "Save page":
+   case "Submit":
       print status(page_save($edit));
       // fall through:
     default:
diff --git a/modules/moderation.module b/modules/queue.module
similarity index 69%
rename from modules/moderation.module
rename to modules/queue.module
index 4c447d282309..31087d5f3314 100644
--- a/modules/moderation.module
+++ b/modules/queue.module
@@ -6,29 +6,29 @@
 #   submission's selection box whereas the corresponding values
 #   represent the mathematical calculation to be performed to
 #   update a comment's value.
-$moderation_votes = array("neutral (+0)" => "+ 0",
+$queue_votes = array("neutral (+0)" => "+ 0",
                           "post it (+1)" => "+ 1",
                           "dump it (-1)" => "- 1");
 
-$module = array("menu" => "moderation_menu",
-                "page" => "moderation_page");
+$module = array("menu" => "queue_menu",
+                "page" => "queue_page");
 
-function moderation_menu() {
-  return array("<A HREF=\"module.php?mod=moderation\">". t("moderation queue") ."</A> (<FONT COLOR=\"red\">". moderation_count() ."</FONT>)");
+function queue_menu() {
+  return array("<A HREF=\"module.php?mod=queue\">". t("moderation queue") ."</A> (<FONT COLOR=\"red\">". queue_count() ."</FONT>)");
 }
 
-function moderation_count() {
+function queue_count() {
   global $status;
   $result = db_query("SELECT COUNT(nid) FROM node WHERE status = '$status[queued]'");
   return ($result) ? db_result($result, 0) : 0;
 }
 
-function moderation_score($id) {
+function queue_score($id) {
   $result = db_query("SELECT score FROM node WHERE nid = '$id'");
   return ($result) ? db_result($result, 0) : 0;
 }
 
-function moderation_vote($id, $vote) {
+function queue_vote($id, $vote) {
   global $status, $user;
 
   if (!user_get($user, "history", "n$id")) {
@@ -55,7 +55,7 @@ function moderation_vote($id, $vote) {
   }
 }
 
-function moderation_overview() {
+function queue_overview() {
   global $status, $theme, $user;
 
   $result = db_query("SELECT n.*, u.userid FROM node n LEFT JOIN users u ON n.author = u.id WHERE n.status = '$status[queued]'");
@@ -63,8 +63,8 @@ function moderation_overview() {
   $content .= "<TABLE BORDER=\"0\" CELLSPACING=\"4\" CELLPADDING=\"4\">\n";
   $content .= " <TR><TH>". t("Subject") ."</TH><TH>". t("Author") ."</TH><TH>". t("Type") ."</TH><TH>". t("Score") ."</TH></TR>\n";
   while ($node = db_fetch_object($result)) {
-    if ($user->id == $node->author || user_get($user, "history", "n$node->nid")) $content .= " <TR><TD><A HREF=\"module.php?mod=moderation&op=view&id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". format_username($node->userid) ."</TD><TD ALIGN=\"center\">". check_output($node->type) ."</TD><TD ALIGN=\"center\">". moderation_score($node->nid) ."</TD></TR>\n";
-    else $content .= " <TR><TD><A HREF=\"module.php?mod=moderation&op=view&id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". format_username($node->userid) ."</TD><TD ALIGN=\"center\">". check_output($node->type) ."</TD><TD ALIGN=\"center\"><A HREF=\"module.php?mod=moderation&op=view&id=$node->nid\">". t("vote") ."</A></TD></TR>\n";
+    if ($user->id == $node->author || user_get($user, "history", "n$node->nid")) $content .= " <TR><TD><A HREF=\"module.php?mod=queue&op=view&id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". format_username($node->userid) ."</TD><TD ALIGN=\"center\">". check_output($node->type) ."</TD><TD ALIGN=\"center\">". queue_score($node->nid) ."</TD></TR>\n";
+    else $content .= " <TR><TD><A HREF=\"module.php?mod=queue&op=view&id=$node->nid\">". check_output($node->title) ."</A></TD><TD ALIGN=\"center\">". format_username($node->userid) ."</TD><TD ALIGN=\"center\">". check_output($node->type) ."</TD><TD ALIGN=\"center\"><A HREF=\"module.php?mod=queue&op=view&id=$node->nid\">". t("vote") ."</A></TD></TR>\n";
   }
   $content .= "</TABLE>\n";
 
@@ -73,8 +73,8 @@ function moderation_overview() {
   $theme->footer();
 }
 
-function moderation_node($id) {
-  global $theme, $user, $moderation_votes;
+function queue_node($id) {
+  global $theme, $user, $queue_votes;
 
   $node = node_get_object(nid, $id);
 
@@ -91,8 +91,8 @@ function moderation_node($id) {
     }
 
     // moderation form:
-    $output .= "<FORM ACTION=\"module.php?mod=moderation\" METHOD=\"post\">\n";
-    foreach ($moderation_votes as $key=>$value) $options .= "  <OPTION VALUE=\"$value\">$key</OPTION>\n";
+    $output .= "<FORM ACTION=\"module.php?mod=queue\" METHOD=\"post\">\n";
+    foreach ($queue_votes as $key=>$value) $options .= "  <OPTION VALUE=\"$value\">$key</OPTION>\n";
     $output .= "<SELECT NAME=\"vote\">$options</SELECT>\n";
     $output .= "<INPUT TYPE=\"hidden\" NAME=\"id\" VALUE=\"$node->nid\">\n";
     $output .= "<INPUT TYPE=\"submit\" NAME=\"op\" VALUE=\"Vote\">\n";
@@ -105,19 +105,19 @@ function moderation_node($id) {
   }
 }
 
-function moderation_page() {
+function queue_page() {
   global $id, $op, $user, $vote;
 
   if ($user->id) {
     switch($op) {
       case "Vote";
-        moderation_vote(check_input($id), check_input($vote));
+        queue_vote(check_input($id), check_input($vote));
         // fall through:
       case "view":
-        moderation_node(check_input($id));
+        queue_node(check_input($id));
         break;
       default:
-        moderation_overview();
+        queue_overview();
         break;
     }
   }
diff --git a/modules/story.module b/modules/story.module
index 665f221b1d66..30482f50e11d 100644
--- a/modules/story.module
+++ b/modules/story.module
@@ -62,10 +62,9 @@ function story_form($edit = array()) {
   $form .= form_textarea(t("Abstract"), "abstract", $edit[abstract], 50, 10, t("Allowed HTML tags") .": ". htmlspecialchars($allowed_html));
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 15, t("Allowed HTML tags") .": ". htmlspecialchars($allowed_html));
 
-  if (user_access($user, "story")) {
-    $form .= form_hidden("timestamp", $edit[timestamp]);
-    $form .= form_hidden("nid", $edit[nid]);
-  }
+  // hidden fields:
+  $form .= form_hidden("timestamp", $edit[timestamp]);
+  $form .= form_hidden("nid", $edit[nid]);
 
   if (!$edit) {
     $form .= form_submit(t("Preview"));
diff --git a/modules/story/story.module b/modules/story/story.module
index 665f221b1d66..30482f50e11d 100644
--- a/modules/story/story.module
+++ b/modules/story/story.module
@@ -62,10 +62,9 @@ function story_form($edit = array()) {
   $form .= form_textarea(t("Abstract"), "abstract", $edit[abstract], 50, 10, t("Allowed HTML tags") .": ". htmlspecialchars($allowed_html));
   $form .= form_textarea(t("Body"), "body", $edit[body], 50, 15, t("Allowed HTML tags") .": ". htmlspecialchars($allowed_html));
 
-  if (user_access($user, "story")) {
-    $form .= form_hidden("timestamp", $edit[timestamp]);
-    $form .= form_hidden("nid", $edit[nid]);
-  }
+  // hidden fields:
+  $form .= form_hidden("timestamp", $edit[timestamp]);
+  $form .= form_hidden("nid", $edit[nid]);
 
   if (!$edit) {
     $form .= form_submit(t("Preview"));
diff --git a/themes/yaroon/yaroon.theme b/themes/yaroon/yaroon.theme
index f692c84bf60b..9c18fc80c23f 100644
--- a/themes/yaroon/yaroon.theme
+++ b/themes/yaroon/yaroon.theme
@@ -75,7 +75,7 @@ function do_nav() {
                   <option value="module.php?mod=book" <?php if (strstr($REQUEST_URI, "mod=book")) { echo "selected"; $true = 1; } ?>>Handbook</option>
                   <option value="submit.php" <?php if (strstr($PHP_SELF, "submit.php")) { echo "selected"; $true = 1; } ?>>Submit</option>
                   <option value="search.php" <?php if (strstr($PHP_SELF, "search.php")) { echo "selected"; $true = 1; } ?>>Search</option>
-                  <?php if ($REQUEST_URI == "/module.php?mod=moderation") { $true = 1; echo "<option selected>Moderation</option>"; }
+                  <?php if ($REQUEST_URI == "/module.php?mod=queue") { $true = 1; echo "<option selected>Moderation</option>"; }
                   if (!$true) { echo "<option selected>"; if($cid) echo "Node $cid"; else if($id) echo "Node $id"; else echo "Other"; echo"</option>"; } ?>
                 </select>
                 <noscript><input type="submit" value="Go"></noscript>
diff --git a/updates/2.00-to-x.xx.sql b/updates/2.00-to-x.xx.sql
index 416fe28100d3..c823766443e1 100644
--- a/updates/2.00-to-x.xx.sql
+++ b/updates/2.00-to-x.xx.sql
@@ -130,3 +130,6 @@ CREATE TABLE forum (
   body text NOT NULL,
   PRIMARY KEY (lid)
 );
+
+# 01/05/2001:
+ALTER TABLE node ADD moderate TEXT NOT NULL;
\ No newline at end of file
-- 
GitLab