node.module 17.6 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 7 8 9
function node_help() {
  global $mod;

  if ($mod == "node") {
    foreach (module_list() as $name) {
      if (module_hook($name, "status") && $name != "node") {
Dries's avatar
 
Dries committed
10
        print "<h3>". ucfirst($name) ." type</h3>";
Dries's avatar
 
Dries committed
11 12 13 14 15 16
        print module_invoke($name, "help");
      }
    }
  }
}

Dries's avatar
 
Dries committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
function node_access($op, $node = 0) {

  /*
  ** Convert the node to an object if necessary:
  */

  if (is_array($node)) {
    $node = node_object($node);
  }

  /*
  ** Construct a function:
  */

  $function = $node->type ."_access";

  if (function_exists($function)) {
    return $function($op, $node);
  }
  else {
    return 0;
  }
}

Dries's avatar
 
Dries committed
41
function node_perm() {
Dries's avatar
 
Dries committed
42
  return array("administer nodes", "access content", "post content");
Dries's avatar
 
Dries committed
43 44
}

Dries's avatar
 
Dries committed
45 46 47 48 49 50 51 52 53 54 55
function node_search($keys) {
  global $user;

  $result = db_query("SELECT n.nid, n.title, n.created, u.uid, u.name FROM node n LEFT JOIN users u ON n.uid = u.uid WHERE n.status = 1 AND (n.title LIKE '%$keys%' OR n.teaser LIKE '%$keys%' OR n.body LIKE '%$keys%') ORDER BY n.created DESC LIMIT 20");
  while ($node = db_fetch_object($result)) {
    $find[$i++] = array("title" => check_output($node->title), "link" => (user_access("administer nodes") ? "admin.php?mod=node&type=node&op=edit&id=$node->nid" : "node.php?id=$node->nid"), "user" => $node->name, "date" => $node->created);
  }

  return $find;
}

Dries's avatar
 
Dries committed
56
function node_conf_options() {
Dries's avatar
 
Dries committed
57
  $output .= form_select("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), "The default maximum number of nodes to display on the main page.");
Dries's avatar
 
Dries committed
58

Dries's avatar
 
Dries committed
59 60 61
  return $output;
}

Dries's avatar
CHANGES  
Dries committed
62
function node_conf_filters() {
Dries's avatar
 
Dries committed
63 64
  $output .= form_select(t("Enable HTML tags"), "filter_html", variable_get("filter_html", 0), array("Disabled", "Enabled"), t("Allow HTML and PHP tags in user-contributed content."));
  $output .= form_textfield(t("Allowed HTML tags"), "allowed_html", variable_get("allowed_html", "<A><B><BLOCKQUOTE><DD><DL><DT><I><LI><OL><U><UL>"), 64, 128, t("If enabled, optionally specify tags which should not be stripped.  'STYLE' attributes, 'ON' attributes and unclosed tags are always stripped."));
Dries's avatar
 
Dries committed
65
  $output .= "<hr />";
Dries's avatar
 
Dries committed
66
  $output .= form_select(t("Enable link tags"), "filter_link", variable_get("filter_link", 0), array("Disabled", "Enabled"), t("Substitute special [[nodesubject|text]] tags. Your browser will display 'text', and when you click on it your browser will open the node with the subject 'nodesubject'. Please be aware that you'll need to copy the subject of the target node exactly in order to use this feature."));
Dries's avatar
 
Dries committed
67
  $output .= "<hr />";
Dries's avatar
CHANGES  
Dries committed
68 69 70 71 72 73 74 75 76 77 78
  return $output;
}

function node_filter_html($text) {
  $text = eregi_replace("([ \f\r\t\n\'\"])style=[^>]+", "\\1", $text);
  $text = eregi_replace("([ \f\r\t\n\'\"])on[a-z]+=[^>]+", "\\1", $text);
  $text = strip_tags($text, variable_get("allowed_html", ""));
  return $text;
}

function node_filter_link($text) {
Dries's avatar
 
Dries committed
79 80 81 82 83
  $src = array("/\[\[(([^\|]*?)(\|([^\|]*?))?)\]\]/e");  // [link|description]
  $dst = array(format_tag('\\2', '\\4'));                // [link|description]
  return preg_replace($src, $dst, $text);
}

Dries's avatar
CHANGES  
Dries committed
84 85 86 87 88 89
function node_filter($text) {
  if (variable_get("filter_html", 0)) $text = node_filter_html($text);
  if (variable_get("filter_link", 0)) $text = node_filter_link($text);
  return $text;
}

Dries's avatar
 
Dries committed
90
function node_link($type, $node = 0) {
Dries's avatar
 
Dries committed
91

Dries's avatar
 
Dries committed
92
  if ($type == "admin" && user_access("administer nodes")) {
Dries's avatar
 
Dries committed
93 94 95 96 97
    $links[] = "<a href=\"admin.php?mod=node\">content management</a>";
  }

  if ($type == "page") {
    $links[] = "<a href=\"module.php?mod=node&op=add\">submit</a>";
Dries's avatar
 
Dries committed
98 99
  }

Dries's avatar
 
Dries committed
100
  if ($type == "node") {
Dries's avatar
 
Dries committed
101

Kjartan's avatar
Kjartan committed
102 103 104
    if ($node->links) {
      $links = $node->links;
    }
Dries's avatar
 
Dries committed
105 106

    if ($node->teaser != $node->body) {
Dries's avatar
 
Dries committed
107 108
      $links[] = "<a href=\"node.php?id=". $node->nid ."\">". t("read more") ."</a>";
    }
Dries's avatar
 
Dries committed
109

Dries's avatar
 
Dries committed
110 111 112
    if ($node->comment) {
      $links[] = "<a href=\"node.php?id=". $node->nid ."\">". format_plural(node_get_comments($node->nid), "comment", "comments") ."</a>";
    }
Dries's avatar
 
Dries committed
113 114 115 116

    if (user_access("administer nodes")) {
      $links[] = "<a href=\"admin.php?mod=node&op=edit&id=". $node->nid ."\">". t("edit") ."</a>";
    }
Dries's avatar
 
Dries committed
117 118 119 120 121
  }

  return $links ? $links : array();
}

Dries's avatar
 
Dries committed
122
function node_admin_settings($edit = array()) {
Dries's avatar
 
Dries committed
123 124
  global $op;

Dries's avatar
 
Dries committed
125 126 127 128
  if ($op == t("Save configuration")) {
    /*
    ** Save the configuration options:
    */
Dries's avatar
Dries committed
129

Dries's avatar
 
Dries committed
130
    foreach ($edit as $name => $value) variable_set($name, $value);
Dries's avatar
 
Dries committed
131 132
  }

Dries's avatar
 
Dries committed
133 134 135 136
  if ($op == t("Reset to defaults")) {
    /*
    ** Reset the configuration options to their default value:
    */
Dries's avatar
 
Dries committed
137

Dries's avatar
 
Dries committed
138 139
    foreach ($edit as $name=>$value) variable_del($name);
  }
Dries's avatar
Dries committed
140

Dries's avatar
 
Dries committed
141 142 143
  $output .= node_conf_options();
  $output .= form_submit(t("Save configuration"));
  $output .= form_submit(t("Reset to defaults"));
Dries's avatar
Dries committed
144

Dries's avatar
 
Dries committed
145
  return form($output);
Dries's avatar
 
Dries committed
146 147
}

Dries's avatar
 
Dries committed
148
function node_admin_edit($node) {
Dries's avatar
 
Dries committed
149

Dries's avatar
 
Dries committed
150 151 152
  if (is_numeric($node)) {
    $node = node_array(node_load(array("nid" => $node)));
  }
Dries's avatar
 
Dries committed
153

Dries's avatar
 
Dries committed
154 155 156
  /*
  ** Edit node:
  */
Dries's avatar
 
Dries committed
157

Dries's avatar
 
Dries committed
158
  $output .= "<h3>". t("Edit node") ."</h3>";
Dries's avatar
 
Dries committed
159

Dries's avatar
 
Dries committed
160
  $output .= node_form($node);
Dries's avatar
 
Dries committed
161

Dries's avatar
 
Dries committed
162 163 164
  /*
  ** Edit comments:
  */
Dries's avatar
 
Dries committed
165

Dries's avatar
 
Dries committed
166
  $output .= "<h3>". t("Edit comments") ."</h3>";
Dries's avatar
 
Dries committed
167

Dries's avatar
 
Dries committed
168
  $result = db_query("SELECT c.cid, c.subject, u.uid, u.name FROM comments c LEFT JOIN users u ON u.uid = c.uid WHERE lid = '". $node["nid"] ."' ORDER BY c.timestamp");
Dries's avatar
 
Dries committed
169

Dries's avatar
 
Dries committed
170 171
  while ($comment = db_fetch_object($result)) {
    $output .= "<a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\">$comment->subject</a> by ". format_name($comment) ."<br />";
Dries's avatar
Dries committed
172 173
  }

Dries's avatar
 
Dries committed
174
  return $output;
Dries's avatar
 
Dries committed
175 176 177

}

Dries's avatar
 
Dries committed
178 179
function node_admin_nodes() {
  global $query;
Dries's avatar
 
Dries committed
180

Dries's avatar
 
Dries committed
181
  $queries = array(array("ORDER BY n.created DESC", "new nodes"), array("ORDER BY n.changed DESC", "updated nodes"), array("WHERE n.status = 1 AND n.moderate = 0 ORDER BY n.nid DESC", "published nodes"), array("WHERE n.status = 0 AND n.moderate = 0 ORDER BY n.nid DESC", "non-published nodes"), array("WHERE n.status = 1 AND n.moderate = 1 ORDER BY n.nid DESC", "pending nodes"), array("WHERE n.status = 1 AND n.promote = 1 ORDER BY n.nid DESC", "promoted nodes"));
Dries's avatar
 
Dries committed
182

Dries's avatar
 
Dries committed
183
  $result = db_query("SELECT n.*, u.name, u.uid FROM node n LEFT JOIN users u ON n.uid = u.uid ". $queries[$query ? $query : 0][0] ." LIMIT 50");
Dries's avatar
 
Dries committed
184

Dries's avatar
 
Dries committed
185 186
  foreach ($queries as $key => $value) {
    $links[] = "<a href=\"admin.php?mod=node&op=nodes&query=$key\">$value[1]</a>";
Dries's avatar
Dries committed
187 188
  }

Dries's avatar
 
Dries committed
189
  $output .= "<small>". implode(" :: ", $links) ."</small><hr />";
Dries's avatar
 
Dries committed
190

Dries's avatar
 
Dries committed
191 192 193 194
  $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n";
  $output .= " <tr><th>title</th><th>type</th><th>author</th><th>status</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>$node->type</td><td nowrap=\"nowrap\">". format_name($node) ."</td><td>". ($node->status ? t("published") : t("not published")) ."</td><td nowrap=\"nowrap\"><a href=\"node.php?id=$node->nid\">view node</a></td><td nowrap=\"nowrap\"><a href=\"admin.php?mod=node&op=edit&id=$node->nid\">edit node</a></td></tr>";
Dries's avatar
 
Dries committed
195
  }
Dries's avatar
 
Dries committed
196
  $output .= "</table>";
Dries's avatar
 
Dries committed
197

Dries's avatar
 
Dries committed
198
  return $output;
Dries's avatar
Dries committed
199 200
}

Dries's avatar
 
Dries committed
201
function node_admin() {
Dries's avatar
 
Dries committed
202
  global $op, $id, $edit;
Dries's avatar
 
Dries committed
203

Dries's avatar
 
Dries committed
204
  if (user_access("administer nodes")) {
Dries's avatar
 
Dries committed
205

Dries's avatar
 
Dries committed
206 207 208
    /*
    ** Compile a list of the administrative links:
    */
Dries's avatar
Dries committed
209

Dries's avatar
 
Dries committed
210 211 212 213
    $links[] = "<a href=\"admin.php?mod=node&op=nodes\">nodes</a>";
    $links[] = "<a href=\"admin.php?mod=node&op=search\">search content</a>";
    $links[] = "<a href=\"admin.php?mod=node&op=settings\">settings</a>";
    $links[] = "<a href=\"admin.php?mod=node&op=help\">help</a>";
Dries's avatar
 
Dries committed
214

Dries's avatar
 
Dries committed
215
    print "<small>". implode(" &middot; ", $links) ."</small><hr />";
Dries's avatar
 
Dries committed
216 217 218 219 220 221

    switch ($op) {
      case "help":
        print node_help();
        break;
      case "search":
Dries's avatar
 
Dries committed
222
        print search_type("node", "admin.php?mod=node&op=search");
Dries's avatar
 
Dries committed
223
        break;
Dries's avatar
 
Dries committed
224 225 226 227
      case t("Save configuration"):
      case t("Reset to defaults"):
      case "settings":
        print node_admin_settings($edit);
Dries's avatar
 
Dries committed
228 229
        break;
      case "edit":
Dries's avatar
 
Dries committed
230
        print node_admin_edit($id);
Dries's avatar
 
Dries committed
231
        break;
Dries's avatar
 
Dries committed
232
      case t("Preview"):
Dries's avatar
 
Dries committed
233
        print node_preview($edit);
Dries's avatar
 
Dries committed
234
        break;
Dries's avatar
 
Dries committed
235
      case t("Submit"):
Dries's avatar
 
Dries committed
236 237 238 239 240 241
        print node_submit($edit);
        print node_admin_nodes();
        break;
      case t("Delete"):
        print node_remove($edit);
        break;
Dries's avatar
 
Dries committed
242
      default:
Dries's avatar
 
Dries committed
243
        print node_admin_nodes();
Dries's avatar
 
Dries committed
244 245 246 247
    }
  }
  else {
    print message_access();
Dries's avatar
 
Dries committed
248 249 250
  }
}

Dries's avatar
 
Dries committed
251 252 253 254
function node_block() {
  global $theme;

  $block[0][subject] = t("Syndicate");
Dries's avatar
 
Dries committed
255
  $block[0][content] = "<div align=\"center\"><a href=\"module.php?mod=node&op=feed\"><img src=\"". $theme->image("xml.gif") ."\" width=\"36\" height=\"14\" border=\"0\" alt=\"XML\" /></a></div>\n";
Dries's avatar
 
Dries committed
256 257 258 259 260 261
  $block[0][info] = "Syndicate";

  return $block;
}

function node_feed() {
Dries's avatar
 
Dries committed
262

Dries's avatar
 
Dries committed
263
  $result = db_query("SELECT nid, type FROM node WHERE promote = '1' AND status = '1' ORDER BY created DESC LIMIT 15");
Dries's avatar
 
Dries committed
264 265

  while ($node = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
266
    $item = node_load(array("nid" => $node->nid, "type" => $node->type));
Dries's avatar
 
Dries committed
267 268 269

    $link = path_uri() ."node.php?id=$item->nid";

Dries's avatar
 
Dries committed
270
    $items .= format_rss_item($item->title, $link, $item->teaser);
Dries's avatar
 
Dries committed
271 272 273
  }

  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
Dries's avatar
 
Dries committed
274
  $output .= "<!DOCTYPE rss [<!ENTITY % HTMLlat1 PUBLIC \"-//W3C//ENTITIES Latin 1 for XHTML//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent\">\n";
Dries's avatar
 
Dries committed
275
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
 
Dries committed
276
  $output .= format_rss_channel(variable_get("site_name", "drupal"), path_uri(), variable_get("site_slogan", ""), $items);
Dries's avatar
 
Dries committed
277 278
  $output .= "</rss>\n";

Dries's avatar
 
Dries committed
279 280
  header("Content-Type: text/xml");

Dries's avatar
 
Dries committed
281 282 283 284
  print $output;

}

Dries's avatar
 
Dries committed
285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401

function node_fixup($edit) {

  global $user;

  /*
  ** Convert the node to an object if necessary:
  */

  $edit = node_object($edit);

  /*
  ** Validate the title field:
  */

  if (($edit->nid || $edit->body) && !$edit->title) {
    $error["title"] = "<div style=\"color: red;\">". t("You have to specify a valid title.") ."</div>";
  }

  if (user_access("administer nodes")) {

    /*
    ** Setup default values if required:
    */

    if (!$edit->name) {
      $edit->name = $user->name;
    }

    if (!$edit->created) {
      $edit->created = time();
    }

    if (!$edit->date) {
      $edit->date = date("M j, Y g:i a", $edit->created);
    }

    /*
    ** Validate the "authored by"-field:
    */

    if ($account = user_load(array("name" => $edit->name))) {
      $edit->uid = $account->uid;
    }
    else {
      $error["name"] = "<div style=\"color: red;\">". sprintf(t("The name '%s' does not exist."), $edit->name) ."</div>";
    }

    /*
    ** Validate the "authored on"-field:
    */

    if (strtotime($edit->date) > 1000) {
      $edit->created = strtotime($edit->date);
    }
    else {
      $error["date"] = "<div style=\"color: red;\">". t("You have to specifiy a valid date.") ."</div>";
    }
  }

  return $error;
}

function node_form($edit) {

  $error = node_fixup(&$edit);

  $output .= "<div style=\"margin-right: 40px; float: left;\">";

  /*
  ** Add the default fields:
  */

  $output .= form_textfield(t("Title"), "title", $edit->title, 60, 64, $error["title"]);

  if ($edit->body && !$edit->teaser) {
    $edit->teaser = node_teaser($edit->body);
  }

  if ($edit->teaser) {
    $output .= form_textarea(t("Teaser"), "teaser", $edit->teaser, 60, 5);
  }

  /*
  ** Add the node specific parts:
  */

  $output .= module_invoke($edit->type, "form", $edit);

  /*
  ** Add the hidden fields:
  */

  if ($edit->nid) {
    $output .= form_hidden("nid", $edit->nid);
  }

  if ($edit->uid) {
    $output .= form_hidden("uid", $edit->uid);
  }

  if ($edit->created) {
    $output .= form_hidden("created", $edit->created);
  }

  $output .= form_hidden("type", $edit->type);

  /*
  ** Add the buttons:
  */

  $output .= form_submit(t("Preview"));

  if ($edit->title && $edit->type && !$error) {
    $output .= form_submit(t("Submit"));
  }

Dries's avatar
 
Dries committed
402
  if ($edit->nid && node_access("delete", $edit)) {
Dries's avatar
 
Dries committed
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
    $output .= form_submit(t("Delete"));
  }

  $output .= "</div>";

  /*
  ** Add the admin specific parts:
  */

  if (user_access("administer nodes")) {
    $output .= "<div style=\"float: right;\">";
    $output .= form_textfield(t("Authored by"), "name", $edit->name, 20, 25, $error["name"]);
    $output .= form_textfield(t("Authored on"), "date", $edit->date, 20, 25, $error["date"]);
    $output .= "<br />";
    $output .= form_select(t("Current status"), "status", $edit->status, array("Disabled", "Enabled"));
    $output .= form_select(t("User comments"), "comment", $edit->comment, array("Disabled", "Enabled"));
    $output .= form_select(t("Node location"), "promote", $edit->promote, array("Default", "Front page"));
    $output .= "</div>";
  }

  return form($output);
}

function node_add($type) {
  global $user;

  if ($type) {
    $output = node_form(array("uid" => $user->uid, "type" => $type));
  }
  else {
    // TODO: make building a node list generic and find an easy way to associate post permissions with them

Dries's avatar
 
Dries committed
435 436 437 438 439 440
    $links = array();

    foreach (module_list() as $name) {
      if (($info = module_invoke($name, "node", "name")) && node_access("create", array("type" => $name))) {
        $links[] = "<a href=\"module.php?mod=node&op=add&type=$name\">". t($info) ."</a>";
      }
Dries's avatar
 
Dries committed
441 442 443 444 445 446 447 448 449 450 451 452 453 454
    }

    $output .= sprintf(t("Submit a %s."), implode(", ", $links));
  }

  return $output;
}

function node_edit($id) {
  global $user;

  $node = node_load(array("nid" => $id));
    // TODO: make this generic for all node types - temporary solution

Dries's avatar
 
Dries committed
455 456 457 458 459 460 461 462
  if (node_access("update", $node)) {
    $output = node_form($node);
  }
  else {
    $output = message_access();
  }

  return $output;
Dries's avatar
 
Dries committed
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
}

function node_preview($edit) {

  /*
  ** Load the user's name when needed:
  */

  if ($edit["name"]) {
    $user = user_load(array("name" => $edit["name"]));
    $edit["uid"] = $user->uid;
  }
  else if ($edit["uid"]) {
    $user = user_load(array("uid" => $edit["uid"]));
    $edit["name"] = $user->name;
  }

  /*
  ** Set the created time when needed:
  */

  if (empty($edit["nid"])) {
    $edit["created"] = time();
  }

  /*
  ** Display a preview of the node:
  */

  node_view($edit);

  return node_form($edit);
}

Dries's avatar
 
Dries committed
497
function node_submit($node) {
Dries's avatar
 
Dries committed
498 499 500 501 502 503 504

  global $user;

  /*
  ** Fixup the node when required:
  */

Dries's avatar
 
Dries committed
505 506 507
  node_fixup(&$node);

  if ($node->nid) {
Dries's avatar
 
Dries committed
508 509

    /*
Dries's avatar
 
Dries committed
510 511
    ** Check whether the current user has the proper access rights to
    ** perform this operation:
Dries's avatar
 
Dries committed
512 513
    */

Dries's avatar
 
Dries committed
514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530
    if (node_access("update", $node)) {

      /*
      ** Compile a list of the node fields and their default values that users
      ** and administrators are allowed to save when updating a node.
      */

      if (user_access("administer nodes")) {
        $fields = array("nid", "uid", "body", "comment", "promote", "moderate", "status", "teaser", "title", "created", "type" => $node->type);
      }
      else {
        $fields = array("nid", "uid" => $user->uid, "body", "teaser", "title", "type" => $node->type);
      }

      node_save($node, array_merge($fields, module_invoke($node->type, "save", $node)));

      $output = t("The node has been updated.");
Dries's avatar
 
Dries committed
531 532
    }
    else {
Dries's avatar
 
Dries committed
533 534
      watchdog("warning", "node: not authorized to update node");
      $output = t("You are not authorized to update this node.");
Dries's avatar
 
Dries committed
535 536 537 538
    }

  }
  else {
Dries's avatar
 
Dries committed
539

Dries's avatar
 
Dries committed
540
    /*
Dries's avatar
 
Dries committed
541 542
    ** Check whether the current user has the proper access rights to
    ** perform this operation:
Dries's avatar
 
Dries committed
543 544
    */

Dries's avatar
 
Dries committed
545
    if (node_access("create", $node)) {
Dries's avatar
 
Dries committed
546

Dries's avatar
 
Dries committed
547 548 549 550
      /*
      ** Compile a list of the node fields and their default values that users
      ** and administrators are allowed to save when inserting a new node.
      */
Dries's avatar
 
Dries committed
551

Dries's avatar
 
Dries committed
552 553 554 555 556 557
      if (user_access("administer nodes")) {
        $fields = array("uid", "body", "comment" => 1, "promote", "moderate", "status" => 1, "teaser", "title", "type" => $node->type);
      }
      else {
        $fields = array("uid" => $user->uid, "body", "comment" => 1, "teaser", "title", "type" => $node->type);
      }
Dries's avatar
 
Dries committed
558

Dries's avatar
 
Dries committed
559
      node_save($node, array_merge($fields, module_invoke($node->type, "save", $node)));
Dries's avatar
 
Dries committed
560

Dries's avatar
 
Dries committed
561 562 563 564 565 566
      $output = t("Thanks for your submission.");
    }
    else {
      watchdog("warning", "node: not authorized to create node");
      $output = t("You are not authorized to create this node.");
    }
Dries's avatar
 
Dries committed
567 568 569 570 571 572 573
  }

  return $output;
}

function node_remove($edit) {

Dries's avatar
 
Dries committed
574 575 576 577 578
  $node = node_load(array("nid" => $edit["nid"]));

  if (node_access("delete", $node)) {
    if ($edit["confirm"]) {
      node_delete($node);
Dries's avatar
 
Dries committed
579

Dries's avatar
 
Dries committed
580 581 582 583 584 585 586 587 588
      $output = t("The node has been deleted.");
    }
    else {
      $output .= form_item(t("Confirm removal of"), check_output($node->title));
      $output .= form_hidden("nid", $node->nid);
      $output .= form_hidden("confirm", 1);
      $output .= form_submit(t("Delete"));
      $output = form($output, "post", "admin.php?mod=node");
    }
Dries's avatar
 
Dries committed
589 590
  }
  else {
Dries's avatar
 
Dries committed
591 592
    watchdog("warning", "node: not authorized to remove node");
    $output = t("You are not authorized to remove this node.");
Dries's avatar
 
Dries committed
593 594 595 596 597
  }

  return $output;
}

Dries's avatar
 
Dries committed
598
function node_page() {
Dries's avatar
 
Dries committed
599
  global $op, $id, $user, $edit, $type, $theme, $meta, $date;
Dries's avatar
 
Dries committed
600 601 602

  if ($op == "feed") {
    node_feed();
Dries's avatar
 
Dries committed
603
    return;
Dries's avatar
 
Dries committed
604
  }
Dries's avatar
 
Dries committed
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620

  $theme->header();

  switch ($op) {
    case "add":
      $theme->box(t("Node"), node_add($type));
      break;
    case "edit":
      $theme->box(t("Node"), node_edit($id));
      break;
    case t("Preview"):
      $theme->box(t("Node"), node_preview($edit));
      break;
    case t("Submit"):
      $theme->box(t("Node"), node_submit($edit));
      break;
Dries's avatar
 
Dries committed
621 622 623
    case t("Delete"):
      print node_remove($edit);
      break;
Dries's avatar
 
Dries committed
624 625
    default:
      $result = db_query("SELECT nid, type FROM node WHERE ". ($meta ? "attributes LIKE '%". check_input($meta) ."%' AND " : "") ." promote = '1' AND status = '1' AND created <= '". ($date > 0 ? check_input($date) : time()) ."' ORDER BY created DESC LIMIT ". ($user->nodes ? $user->nodes : variable_get(default_nodes_main, 10)));
626
      while ($node = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
627
        node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
628 629
      }
  }
Dries's avatar
 
Dries committed
630 631

  $theme->footer();
Dries's avatar
 
Dries committed
632
}
Dries's avatar
 
Dries committed
633

Dries's avatar
 
Dries committed
634
?>