"book page"); return $info[$field]; } function book_access($op, $node) { global $user; if ($op == "view") { return $node->nid && $node->status && !$node->moderate; } if ($op == "create") { return 1; } if ($op == "update") { return 1; } if ($op == "delete") { return user_access("adminster nodes"); } } function book_link($type) { if ($type == "page" && user_access("access content")) { $links[] = "". t("collaborative book") .""; } return $links ? $links : array(); } function book_load($node) { $book = db_fetch_object(db_query("SELECT parent, weight FROM book WHERE nid = '$node->nid'")); return $book; } 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')"); } 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'"); } 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"); } else { return array("moderate" => 1, "promote" => 0, "status" => 0, "log", "parent", "weight"); } } 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) { $nodes = book_location($parent, $nodes); array_push($nodes, $parent); } return $nodes; } function book_view($node, $main = 0) { global $theme; if ($main) { $theme->node($node, $main); } 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")); } $output .= "\n"; if ($node->title) { foreach (book_location($node) as $level) { $location .= "$indent nid\">$level->title
"; $indent .= "-"; } $output .= " \n"; $output .= " "; $output .= " \n"; } if ($node->body) { $output .= " "; } if ($node->nid) { $output .= " "; } $output .= " "; $output .= " \n"; $output .= " \n"; $output .= "
$locationnid\">update

". check_output($node->title) ."". ($node->body ? "
Last updated by ". format_name($node) ." on ". format_date($node->created) ." " : "") ."

". check_output($node->body, 1) ."

". book_tree($node->nid) ."

". ($prev ? "nid\">". t("previous") ."" : t("previous")) ."index". ($next ? "nid\">". t("next") ."" : t("next")) ."
". ($prev ? "". check_output($prev->title) ."" : " ") ."". ($node->parent ? "parent\">". t("up") ."" : t("up")) ."". ($next ? "". check_output($next->title) ."" : " ") ."
\n"; $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"); // add root node: if (user_access("administer nodes")) { $toc[0] = ""; } // build table of contents: while ($node = db_fetch_object($result)) { $toc[$node->nid] = "$indent $node->title"; $toc = book_toc($node->nid, "$indent-", $toc); } return $toc; } function book_form($node) { 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")) { // 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"); // render output: while ($node = db_fetch_object($result)) { $output .= "
  • nid\">". check_output($node->title) ."". (strstr($PHP_SELF, "admin.php") ? " (weight: $node->weight/$node->parent, status: $node->status) (nid\">edit)" : "") ."
  • \n"; $output .= book_tree($node->nid, $depth + 1); } $output = ""; } return $output; } function book_render() { global $theme; $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 .= "
    nid\">". check_output($node->title) ."
    ". check_output($node->body, 1) ."

    "; } $theme->header(); $theme->box(t("Handbook"), "
    $output
    "); $theme->footer(); } function book_page() { global $op, $id, $theme; if (user_access("access content")) { switch ($op) { case "feed": print book_export_html($id, $depth = 1); break; default: book_render(); } } else { $theme->header(); $theme->box(t("Access denied"), message_access()); $theme->footer(); } } 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 .= "". check_output($node->title) .""; if ($node->body) $output .= "
    ". check_output($node->body, 1) ."
    "; } $output .= book_export_html_recursive($id, $depth); return $output; } 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 .= "". check_output($node->title) .""; if ($node->body) $output .= "
    ". check_output($node->body, 1) ."
    "; if ($node->pid) $output .= book_export_html_recursive($node->pid, $depth + 1); $output .= book_export_html_recursive($node->nid, $depth + 1); } return $output; } ?>