book.module 15.7 KB
Newer Older
Dries's avatar
 
Dries committed
1
<?php
2
// $Id$
Dries's avatar
 
Dries committed
3

Dries's avatar
 
Dries committed
4 5 6
function book_node($field) {
  global $user;

Dries's avatar
 
Dries committed
7
  $info["name"] = t("book page");
Dries's avatar
 
Dries committed
8
  $info["description"] = t("A book is a collaborative writing effort: users can collaborate writing the pages of the book, positioning the pages in the right order, and reviewing or modifying pages previously written.  So when you have some information to share or when you read a page of the book and you didn't like it, or if you think a certain page could have been written better, you can do something about it.");
Dries's avatar
 
Dries committed
9 10 11 12 13

  return $info[$field];
}

function book_access($op, $node) {
Dries's avatar
 
Dries committed
14
  global $user;
Dries's avatar
 
Dries committed
15 16

  if ($op == "view") {
Dries's avatar
 
Dries committed
17 18 19 20 21 22 23 24
    /*
    ** Everyone can access all published book pages whether these pages
    ** are still waiting for approval or not.  We might not always want
    ** to display pages that are waiting for approval, but we take care
    ** of that problem in the book_view() function.
    */

    return $node->status;
Dries's avatar
 
Dries committed
25 26
  }

Dries's avatar
 
Dries committed
27
  if ($op == "create") {
Dries's avatar
 
Dries committed
28 29 30 31 32
    return 1;
  }

  if ($op == "update") {

Dries's avatar
 
Dries committed
33
    /*
Dries's avatar
 
Dries committed
34 35 36 37
    ** Everyone can upate a book page if there are no suggested updates
    ** of that page waiting for approval and as long as the "create new
    ** revision"-bit is set; that is, only updates that don't overwrite
    ** the current or pending information are allowed.
Dries's avatar
 
Dries committed
38
    */
Dries's avatar
 
Dries committed
39
    return !$node->moderate && $node->revision;
Dries's avatar
 
Dries committed
40
  }
Dries's avatar
 
Dries committed
41 42
}

Dries's avatar
 
Dries committed
43
function book_save($op, $node) {
Dries's avatar
 
Dries committed
44
  global $user, $REQUEST_URI;
Dries's avatar
 
Dries committed
45 46 47 48 49 50 51 52 53 54 55 56 57 58

  if ($op == "approve") {
    return array("status" => 1);
  }

  if ($op == "create") {
    return array("moderate" => 1, "parent", "promote" => 0, "status" => 1, "weight");
  }

  if ($op == "decline") {
    return array("status" => 0);
  }

  if ($op == "update") {
Dries's avatar
 
Dries committed
59
    if (strstr($REQUEST_URI, "module.php?mod=node&op=edit")) {
Dries's avatar
 
Dries committed
60
      /*
Dries's avatar
 
Dries committed
61 62 63
      ** If a regular user updates a book page, we always create a new
      ** revision.  All new revisions have to be approved (moderation)
      ** and are not promoted by derault.  See also: book_load().
Dries's avatar
 
Dries committed
64 65
      */

Dries's avatar
 
Dries committed
66
      return array("created" => time(), "moderate" => 1, "name" => $user->name, "parent", "promote" => 0, "score" => 0, "status" => 1, "uid" => $user->uid, "users" => "", "revisions", "votes" => 0, "weight");
Dries's avatar
 
Dries committed
67
    }
Dries's avatar
 
Dries committed
68
    else if (user_access("adminster nodes")) {
Dries's avatar
 
Dries committed
69
      /*
Dries's avatar
 
Dries committed
70 71 72 73 74
      ** If a node administrator updates a book page, we don't create a
      ** new revision unless we are explicitly instructed to. If a node
      ** administrator updates a book page using the "update this book
      ** page"-link (like regular users do) then he'll be treated as a
      ** regular user.
Dries's avatar
 
Dries committed
75 76
      */

Dries's avatar
 
Dries committed
77
      return array("parent", "weight");
Dries's avatar
 
Dries committed
78 79 80 81 82
    }
  }

}

Dries's avatar
 
Dries committed
83 84 85
function book_link($type) {
  if ($type == "page" && user_access("access content")) {
    $links[] = "<a href=\"module.php?mod=book\">". t("collaborative book") ."</a>";
Dries's avatar
 
Dries committed
86
  }
Dries's avatar
 
Dries committed
87

Dries's avatar
 
Dries committed
88 89 90 91
  if ($type == "admin" && user_access("administer nodes")) {
    $links[] = "<a href=\"admin.php?mod=book\">". t("collaborative book") ."</a>";
  }

Dries's avatar
 
Dries committed
92
  return $links ? $links : array();
Dries's avatar
 
Dries committed
93 94
}

Dries's avatar
 
Dries committed
95
function book_load($node) {
Dries's avatar
 
Dries committed
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
  global $user, $REQUEST_URI;

  $book = db_fetch_object(db_query("SELECT parent, weight FROM book WHERE nid = '$node->nid'"));

  if (strstr($REQUEST_URI, "module.php?mod=node&op=edit")) {
    /*
    ** If a user is about to update a book page, we overload some
    ** fields to reflect the changes.  We use the $REQUEST_URI to
    ** dectect this as we don't want to interfer with updating a
    ** book page through the admin pages.  See also: book_save().
    */

    $book->name = $user->name;
    $book->uid = $user->uid;
  }

  /*
  ** We set the revision field to indicate that we have to create
  ** a new revision when updating this book page.
  */

  $book->revision = 1;

Dries's avatar
 
Dries committed
119
  return $book;
Dries's avatar
 
Dries committed
120 121
}

Dries's avatar
 
Dries committed
122
function book_insert($node) {
Dries's avatar
 
Dries committed
123
  db_query("INSERT INTO book (nid, parent, weight) VALUES ('$node->nid', '$node->parent', '$node->weight')");
Dries's avatar
 
Dries committed
124
}
Dries's avatar
 
Dries committed
125

Dries's avatar
 
Dries committed
126
function book_update($node) {
Dries's avatar
 
Dries committed
127
  db_query("UPDATE book SET parent = '$node->parent', weight = '$node->weight' WHERE nid = '$node->nid'");
Dries's avatar
 
Dries committed
128
}
Dries's avatar
 
Dries committed
129

Dries's avatar
 
Dries committed
130 131
function book_delete($node) {
  db_query("DELETE FROM book WHERE nid = '$node->nid'");
Dries's avatar
 
Dries committed
132 133
}

Dries's avatar
 
Dries committed
134

Dries's avatar
 
Dries committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
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:
    */

Dries's avatar
 
Dries committed
151 152
    $help = book_node("description");

Dries's avatar
 
Dries committed
153 154 155 156 157 158 159
    /*
    ** If a regular user updates a book page, we create a new revision
    ** authored by that user:
    */

    $output .= form_hidden("revision", 1);

Dries's avatar
 
Dries committed
160
    $node->uid = $user->uid;    // $node is passed by reference
Dries's avatar
 
Dries committed
161 162 163 164 165 166 167
    $node->name = $user->name;

  }

  return $output;
}

Dries's avatar
 
Dries committed
168
function book_location($node, $nodes = array()) {
Dries's avatar
 
Dries committed
169
  $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'"));
Dries's avatar
 
Dries committed
170 171 172 173 174 175 176
  if ($parent->title) {
    $nodes = book_location($parent, $nodes);
    array_push($nodes, $parent);
  }
  return $nodes;
}

Dries's avatar
 
Dries committed
177
function book_view($node, $main = 0) {
Dries's avatar
 
Dries committed
178 179 180 181 182 183 184 185 186
  global $theme, $mod;

  /*
  ** Always display the most recently approved revision of a node
  ** unless we have to display it in the context of the moderation
  ** queue.
  */

  if ($node->moderate && $mod != "queue") {
Dries's avatar
 
Dries committed
187
    $node = node_revision_load($node, end(node_revision_list($node)));
Dries's avatar
 
Dries committed
188 189 190 191 192 193 194
  }

  /*
  ** Display the node.  If not displayed on the main page, we render
  ** the node as a page in the book with extra links to the previous
  ** and the next page.
  */
Dries's avatar
 
Dries committed
195

Dries's avatar
 
Dries committed
196 197
  if ($main) {
    $theme->node($node, $main);
Dries's avatar
 
Dries committed
198
  }
Dries's avatar
 
Dries committed
199 200
  else {
    if ($node->nid && $node->parent) {
Dries's avatar
 
Dries committed
201 202
      $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"));
Dries's avatar
 
Dries committed
203
    }
Dries's avatar
 
Dries committed
204

Dries's avatar
 
Dries committed
205
    $output .= "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n";
Dries's avatar
 
Dries committed
206

Dries's avatar
 
Dries committed
207 208
    if ($node->title) {
      foreach (book_location($node) as $level) {
Dries's avatar
 
Dries committed
209
        $location .= "$indent <a href=\"node.php?id=$level->nid\">$level->title</a><br />";
Dries's avatar
 
Dries committed
210 211
        $indent .= "-";
      }
Dries's avatar
 
Dries committed
212

Dries's avatar
 
Dries committed
213 214 215
      $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>";
Dries's avatar
 
Dries committed
216
    }
Dries's avatar
 
Dries committed
217

Dries's avatar
 
Dries committed
218
    if ($node->body) {
Dries's avatar
 
Dries committed
219
      $output .= " <tr><td colspan=\"3\"><br />". check_output($node->body, 1) ."</td></tr>";
Dries's avatar
 
Dries committed
220
    }
Dries's avatar
 
Dries committed
221

Dries's avatar
 
Dries committed
222
    if ($node->nid) {
Dries's avatar
 
Dries committed
223
      $output .= " <tr><td colspan=\"3\"><br />". book_tree($node->nid) ."</td></tr>";
Dries's avatar
 
Dries committed
224
    }
Dries's avatar
 
Dries committed
225

Dries's avatar
 
Dries committed
226 227 228 229
    $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>";
Dries's avatar
 
Dries committed
230

Dries's avatar
 
Dries committed
231 232
    $theme->box(t("Handbook"), $output);
  }
Dries's avatar
 
Dries committed
233 234
}

Dries's avatar
 
Dries committed
235
function book_toc($parent = "", $indent = "", $toc = array()) {
Dries's avatar
 
Dries committed
236

Dries's avatar
 
Dries committed
237 238 239 240 241 242 243 244 245
  /*
  ** 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:
  */
Dries's avatar
 
Dries committed
246

Dries's avatar
 
Dries committed
247
  if (user_access("administer nodes")) {
Dries's avatar
 
Dries committed
248
    $toc[0] = "<root>";
Dries's avatar
 
Dries committed
249 250
  }

Dries's avatar
 
Dries committed
251 252 253 254
  /*
  ** Build the table of contents:
  */

Dries's avatar
 
Dries committed
255
  while ($node = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
256 257
    $toc[$node->nid] = "$indent $node->title";
    $toc = book_toc($node->nid, "$indent-", $toc);
Dries's avatar
 
Dries committed
258
  }
Dries's avatar
 
Dries committed
259

Dries's avatar
 
Dries committed
260 261 262
  return $toc;
}

Dries's avatar
Dries committed
263
function book_tree($parent = "", $depth = 0) {
Dries's avatar
 
Dries committed
264

Dries's avatar
 
Dries committed
265
  if ($depth < 3) {
Dries's avatar
 
Dries committed
266 267 268 269
    /*
    ** Select all child nodes and render them into a table of contents:
    */

Dries's avatar
 
Dries committed
270
   $result = db_query("SELECT n.nid 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");
Dries's avatar
 
Dries committed
271

Dries's avatar
 
Dries committed
272 273 274
     while ($page = db_fetch_object($result)) {
       // load the node:
       $node = node_load(array("nid" => $page->nid));
Dries's avatar
 
Dries committed
275

Dries's avatar
 
Dries committed
276 277 278 279
       // take the most recent approved revision:
       if ($node->moderate) {
         $node = node_revision_load($node, end(node_revision_list($node)));
       }
Dries's avatar
 
Dries committed
280

Dries's avatar
 
Dries committed
281 282
       // output the content:
       $output .= "<li><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></li>";
Dries's avatar
 
Dries committed
283

Dries's avatar
 
Dries committed
284 285 286 287 288
       // build the sub-tree of each child:
       $output .= book_tree($node->nid, $depth + 1);
     }

     $output = "<ul>$output</ul>";
Dries's avatar
 
Dries committed
289

Dries's avatar
 
Dries committed
290
  }
Dries's avatar
 
Dries committed
291

Dries's avatar
 
Dries committed
292 293 294
  return $output;
}

Dries's avatar
 
Dries committed
295
function book_render() {
Dries's avatar
 
Dries committed
296
  global $theme;
Dries's avatar
Dries committed
297

Dries's avatar
 
Dries committed
298
  $result = db_query("SELECT n.nid FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE b.parent = 0 AND n.status = 1 ORDER BY b.weight");
Dries's avatar
 
Dries committed
299

Dries's avatar
 
Dries committed
300 301 302 303 304 305
  while ($page = db_fetch_object($result)) {
    // load the node:
    $node = node_load(array("nid" => $page->nid));

    // take the most recent approved revision:
    if ($node->moderate) {
Dries's avatar
 
Dries committed
306
      $node = node_revision_load($node, end(node_revision_list($node)));
Dries's avatar
 
Dries committed
307 308 309
    }

    // output the content:
Dries's avatar
 
Dries committed
310
    $output .= "<dt><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></dt><dd>". check_output($node->body, 1) ."<br /><br /></dd>";
Dries's avatar
 
Dries committed
311 312 313
  }

  $theme->header();
Dries's avatar
 
Dries committed
314
  $theme->box(t("Handbook"), "<dl>$output</dl>");
Dries's avatar
 
Dries committed
315 316 317 318 319 320
  $theme->footer();
}

function book_page() {
  global $op, $id, $theme;

Dries's avatar
 
Dries committed
321
  if (user_access("access content")) {
Dries's avatar
 
Dries committed
322 323
    switch ($op) {
      case "feed":
Dries's avatar
 
Dries committed
324
        print book_export_html($id, $depth = 1);
Dries's avatar
 
Dries committed
325 326 327
        break;
      default:
        book_render();
Dries's avatar
 
Dries committed
328 329 330 331 332 333 334
    }
  }
  else {
    $theme->header();
    $theme->box(t("Access denied"), message_access());
    $theme->footer();
  }
Dries's avatar
 
Dries committed
335 336
}

Dries's avatar
 
Dries committed
337
function book_export_html($id = "", $depth = 1) {
Dries's avatar
 
Dries committed
338
  $result = db_query("SELECT n.nid 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) ."'");
Dries's avatar
 
Dries committed
339

Dries's avatar
 
Dries committed
340 341 342
  while ($page = db_fetch_object($result)) {
    // load the node:
    $node = node_load(array("nid" => $page->nid));
Dries's avatar
 
Dries committed
343

Dries's avatar
 
Dries committed
344 345
    // take the most recent approved revision:
    if ($node->moderate) {
Dries's avatar
 
Dries committed
346
      $node = node_revision_load($node, end(node_revision_list($node)));
Dries's avatar
 
Dries committed
347 348 349
    }

    // output the content:
Dries's avatar
 
Dries committed
350
    $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
Dries's avatar
 
Dries committed
351 352 353 354

    if ($node->body) {
      $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
    }
Dries's avatar
 
Dries committed
355
  }
Dries's avatar
 
Dries committed
356

Dries's avatar
 
Dries committed
357 358 359 360 361 362
  $output .= book_export_html_recursive($id, $depth);

  return $output;
}

function book_export_html_recursive($parent = "", $depth = 1) {
Dries's avatar
 
Dries committed
363
  $result = db_query("SELECT n.nid 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");
Dries's avatar
 
Dries committed
364

Dries's avatar
 
Dries committed
365 366 367 368 369 370
  while ($page = db_fetch_object($result)) {
    // load the node:
    $node = node_load(array("nid" => $page->nid));

    // take the most recent approved revision:
    if ($node->moderate) {
Dries's avatar
 
Dries committed
371
      $node = node_revision_load($node, end(node_revision_list($node)));
Dries's avatar
 
Dries committed
372 373 374
    }

    // output the content:
Dries's avatar
 
Dries committed
375
    $output .= "<h$depth>". check_output($node->title) ."</h$depth>";
Dries's avatar
 
Dries committed
376 377 378 379 380

    if ($node->body) {
      $output .= "<blockquote>". check_output($node->body, 1) ."</blockquote>";
    }

Dries's avatar
 
Dries committed
381
    $output .= book_export_html_recursive($node->nid, $depth + 1);
Dries's avatar
 
Dries committed
382
  }
Dries's avatar
 
Dries committed
383

Dries's avatar
 
Dries committed
384 385
  return $output;
}
Dries's avatar
 
Dries committed
386

Dries's avatar
 
Dries committed
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475
function book_admin_page($nid, $depth = 0) {
  $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);

  $result = db_query("SELECT n.nid FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book' AND b.parent = '$nid' ORDER BY b.weight, n.title");

  while ($node = db_fetch_object($result)) {
    $node = node_load(array("nid" => $node->nid));

    $output .= "<tr>";
    $output .= " <td><div style=\"padding-left: ". (25 * $depth) ."px;\">$node->title</div></td>";
    $output .= " <td align=\"center\">". ($rev = end(node_revision_list($node)) ? $rev : 0) ."</td>";
    $output .= " <td><a href=\"admin.php?mod=node&op=edit&id=$node->nid\">". t("edit page") ."</td>";
    $output .= " <td><a href=\"admin.php?mod=node&op=delete&id=$node->nid\">". t("delete page") ."</td>";
    $output .= "</tr>";
    $output .= book_admin_page($node->nid, $depth + 1);
  }

  return $output;
}

function book_admin_view($nid, $depth = 0) {

  $node = node_load(array("nid" => $nid));

  $output .= "<h3>". check_output($node->title) ."</h3>";
  $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
  $output .= " <tr><th>title</th><th>rev</th><th colspan=\"2\">operations</th></tr>";
  $output .= book_admin_page($nid);
  $output .= "</table>";

  return $output;
}

function book_admin_orphan() {

  $result = db_query("SELECT n.nid, n.title, b.parent FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE n.type = 'book'");

  while ($page = db_fetch_object($result)) {
    $pages[$page->nid] = $page;
  }

  $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
  $output .= " <tr><th>title</th><th colspan=\"2\">operations</th></tr>";
  foreach ($pages as $nid => $node) {
    if ($node->parent && empty($pages[$node->parent])) {
      $output .= "<tr><td><a href=\"node.php?id=$node->nid\">". check_output($node->title) ."</a></td><td><a href=\"admin.php?mod=node&op=edit&id=$node->nid\">". t("edit page") ."</td><td><a href=\"admin.php?mod=node&op=delete&id=$node->nid\">". t("delete page") ."</td>";
    }
  }
  $output .= "</table>";

  return $output;
}

function book_admin_links() {
  $result = db_query("SELECT n.nid, n.title FROM node n LEFT JOIN book b ON n.nid = b.nid WHERE b.parent = 0 ORDER BY b.weight, n.title");

  while ($book = db_fetch_object($result)) {
    $links[] = "<a href=\"admin.php?mod=book&op=view&id=$book->nid\">". t("book") .": <i>". check_output($book->title) ."</i></a>";
  }

  return $links;
}

function book_admin() {
  global $id, $op;

  if (user_access("administer nodes")) {

    /*
    ** Compile a list of the administrative links:
    */

    $links = book_admin_links();
    $links[] = "<a href=\"admin.php?mod=book&op=orphan\">". t("orphan pages") ."</a>";

    print "<small>". implode(" &middot; ", $links) ."</small><hr />";

    switch ($op) {
      case "orphan":
        print book_admin_orphan();
        break;
      case "view":
        print book_admin_view($id);
        break;
      default:
    }
  }
}

Dries's avatar
 
Dries committed
476
?>