node.module 18.2 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 58 59

  $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 a node"), "minimum_node_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 node should have.  This can be useful to stop test post."));
Dries's avatar
 
Dries committed
60

Dries's avatar
 
Dries committed
61 62 63
  return $output;
}

Dries's avatar
CHANGES  
Dries committed
64
function node_conf_filters() {
Dries's avatar
 
Dries committed
65 66
  $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
67
  $output .= "<hr />";
Dries's avatar
 
Dries committed
68
  $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
69
  $output .= "<hr />";
Dries's avatar
CHANGES  
Dries committed
70 71 72 73 74 75 76 77 78 79 80
  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
81 82 83 84 85
  $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
86 87 88 89 90 91
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
92
function node_link($type, $node = 0) {
Dries's avatar
 
Dries committed
93

Dries's avatar
 
Dries committed
94
  if ($type == "admin" && user_access("administer nodes")) {
Dries's avatar
 
Dries committed
95 96 97 98 99
    $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
100 101
  }

Dries's avatar
 
Dries committed
102
  if ($type == "node") {
Dries's avatar
 
Dries committed
103

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

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

Dries's avatar
 
Dries committed
112 113 114
    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
115 116 117 118

    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
119 120 121 122 123
  }

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

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

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

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

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

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

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

Dries's avatar
 
Dries committed
147
  return form($output);
Dries's avatar
 
Dries committed
148 149
}

Dries's avatar
 
Dries committed
150
function node_admin_edit($node) {
Dries's avatar
 
Dries committed
151

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

Dries's avatar
 
Dries committed
156 157 158
  /*
  ** Edit node:
  */
Dries's avatar
 
Dries committed
159

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

Dries's avatar
 
Dries committed
162
  $output .= node_form($node);
Dries's avatar
 
Dries committed
163

Dries's avatar
 
Dries committed
164 165 166
  /*
  ** Edit comments:
  */
Dries's avatar
 
Dries committed
167

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

Dries's avatar
 
Dries committed
170
  $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
171

Dries's avatar
 
Dries committed
172 173
  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
174 175
  }

Dries's avatar
 
Dries committed
176
  return $output;
Dries's avatar
 
Dries committed
177 178 179

}

Dries's avatar
 
Dries committed
180 181
function node_admin_nodes() {
  global $query;
Dries's avatar
 
Dries committed
182

Dries's avatar
 
Dries committed
183
  $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
184

Dries's avatar
 
Dries committed
185
  $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
186

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

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

Dries's avatar
 
Dries committed
193 194 195 196
  $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
197
  }
Dries's avatar
 
Dries committed
198
  $output .= "</table>";
Dries's avatar
 
Dries committed
199

Dries's avatar
 
Dries committed
200
  return $output;
Dries's avatar
Dries committed
201 202
}

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

Dries's avatar
 
Dries committed
206
  if (user_access("administer nodes")) {
Dries's avatar
 
Dries committed
207

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

Dries's avatar
 
Dries committed
212 213 214 215
    $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
216

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

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

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

  $block[0][subject] = t("Syndicate");
Dries's avatar
 
Dries committed
257
  $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
258 259 260 261 262 263
  $block[0][info] = "Syndicate";

  return $block;
}

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

Dries's avatar
 
Dries committed
265
  $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
266 267

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

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

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

  $output .= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
Dries's avatar
 
Dries committed
276
  $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
277
  $output .= "<rss version=\"0.91\">\n";
Dries's avatar
 
Dries committed
278
  $output .= format_rss_channel(variable_get("site_name", "drupal"), path_uri(), variable_get("site_slogan", ""), $items);
Dries's avatar
 
Dries committed
279 280
  $output .= "</rss>\n";

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

Dries's avatar
 
Dries committed
283 284 285 286
  print $output;

}

Dries's avatar
 
Dries committed
287

Dries's avatar
 
Dries committed
288
function node_validate($node, $error) {
Dries's avatar
 
Dries committed
289 290 291 292 293 294 295

  global $user;

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

Dries's avatar
 
Dries committed
296
  $node = node_object($node);
Dries's avatar
 
Dries committed
297 298 299 300 301

  /*
  ** Validate the title field:
  */

Dries's avatar
 
Dries committed
302
  if (($node->nid || $node->body) && !$node->title) {
Dries's avatar
 
Dries committed
303 304 305 306 307 308 309 310 311
    $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:
    */

Dries's avatar
 
Dries committed
312 313
    if (!$node->name) {
      $node->name = $user->name;
Dries's avatar
 
Dries committed
314 315
    }

Dries's avatar
 
Dries committed
316 317
    if (!$node->created) {
      $node->created = time();
Dries's avatar
 
Dries committed
318 319
    }

Dries's avatar
 
Dries committed
320 321
    if (!$node->date) {
      $node->date = date("M j, Y g:i a", $node->created);
Dries's avatar
 
Dries committed
322 323 324 325 326 327
    }

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

Dries's avatar
 
Dries committed
328 329
    if ($account = user_load(array("name" => $node->name))) {
      $node->uid = $account->uid;
Dries's avatar
 
Dries committed
330 331
    }
    else {
Dries's avatar
 
Dries committed
332
      $error["name"] = "<div style=\"color: red;\">". sprintf(t("The name '%s' does not exist."), $node->name) ."</div>";
Dries's avatar
 
Dries committed
333 334 335 336 337 338
    }

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

Dries's avatar
 
Dries committed
339 340
    if (strtotime($node->date) > 1000) {
      $node->created = strtotime($node->date);
Dries's avatar
 
Dries committed
341 342 343 344
    }
    else {
      $error["date"] = "<div style=\"color: red;\">". t("You have to specifiy a valid date.") ."</div>";
    }
Dries's avatar
 
Dries committed
345 346 347 348 349 350 351 352 353

    /*
    ** Validate the "teaser"-field:
    */

    if ($node->teaser && count(explode(" ", $node->teaser)) < variable_get("minimum_node_size", 0)) {
      $error["teaser"] = "<div style=\"color: red;\">". t("Your teaser is too short.") ."</div>";
    }

Dries's avatar
 
Dries committed
354 355
  }

Dries's avatar
 
Dries committed
356
  return $node;
Dries's avatar
 
Dries committed
357 358 359 360
}

function node_form($edit) {

Dries's avatar
 
Dries committed
361
  $edit = node_validate($edit, &$error);
Dries's avatar
 
Dries committed
362 363 364 365 366 367 368 369 370 371 372 373 374 375

  $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) {
Dries's avatar
 
Dries committed
376
    $output .= form_textarea(t("Teaser"), "teaser", $edit->teaser, 60, 5, $error["teaser"]);
Dries's avatar
 
Dries committed
377 378 379 380 381 382
  }

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

Dries's avatar
 
Dries committed
383 384 385 386
  $function = $edit->type ."_form";
  if (function_exists($function)) {
    $output .= $function($edit, &$error);
  }
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

  /*
  ** 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
416
  if ($edit->nid && node_access("delete", $edit)) {
Dries's avatar
 
Dries committed
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
    $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 {
Dries's avatar
 
Dries committed
447 448 449 450 451 452
    $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
453 454 455 456 457 458 459 460 461 462 463 464 465
    }

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

  return $output;
}

function node_edit($id) {
  global $user;

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

Dries's avatar
 
Dries committed
466 467 468 469 470 471 472 473
  if (node_access("update", $node)) {
    $output = node_form($node);
  }
  else {
    $output = message_access();
  }

  return $output;
Dries's avatar
 
Dries committed
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507
}

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
508
function node_submit($node) {
Dries's avatar
 
Dries committed
509 510 511 512 513 514 515

  global $user;

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

Dries's avatar
 
Dries committed
516
  $node = node_validate($node);
Dries's avatar
 
Dries committed
517 518

  if ($node->nid) {
Dries's avatar
 
Dries committed
519 520

    /*
Dries's avatar
 
Dries committed
521 522
    ** Check whether the current user has the proper access rights to
    ** perform this operation:
Dries's avatar
 
Dries committed
523 524
    */

Dries's avatar
 
Dries committed
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
    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
542 543
    }
    else {
Dries's avatar
 
Dries committed
544 545
      watchdog("warning", "node: not authorized to update node");
      $output = t("You are not authorized to update this node.");
Dries's avatar
 
Dries committed
546 547 548 549
    }

  }
  else {
Dries's avatar
 
Dries committed
550

Dries's avatar
 
Dries committed
551
    /*
Dries's avatar
 
Dries committed
552 553
    ** Check whether the current user has the proper access rights to
    ** perform this operation:
Dries's avatar
 
Dries committed
554 555
    */

Dries's avatar
 
Dries committed
556
    if (node_access("create", $node)) {
Dries's avatar
 
Dries committed
557

Dries's avatar
 
Dries committed
558 559 560 561
      /*
      ** 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
562

Dries's avatar
 
Dries committed
563 564 565 566 567 568
      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
569

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

Dries's avatar
 
Dries committed
572 573 574 575 576 577
      $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
578 579 580 581 582 583 584
  }

  return $output;
}

function node_remove($edit) {

Dries's avatar
 
Dries committed
585 586 587 588 589
  $node = node_load(array("nid" => $edit["nid"]));

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

Dries's avatar
 
Dries committed
591 592 593 594 595 596 597 598 599
      $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
600 601
  }
  else {
Dries's avatar
 
Dries committed
602 603
    watchdog("warning", "node: not authorized to remove node");
    $output = t("You are not authorized to remove this node.");
Dries's avatar
 
Dries committed
604 605 606 607 608
  }

  return $output;
}

Dries's avatar
 
Dries committed
609
function node_page() {
Dries's avatar
 
Dries committed
610
  global $op, $id, $user, $edit, $type, $theme, $meta, $date;
Dries's avatar
 
Dries committed
611 612 613

  if ($op == "feed") {
    node_feed();
Dries's avatar
 
Dries committed
614
    return;
Dries's avatar
 
Dries committed
615
  }
Dries's avatar
 
Dries committed
616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631

  $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
632 633 634
    case t("Delete"):
      print node_remove($edit);
      break;
Dries's avatar
 
Dries committed
635 636
    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)));
637
      while ($node = db_fetch_object($result)) {
Dries's avatar
 
Dries committed
638
        node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
639 640
      }
  }
Dries's avatar
 
Dries committed
641 642

  $theme->footer();
Dries's avatar
 
Dries committed
643
}
Dries's avatar
 
Dries committed
644

Dries's avatar
 
Dries committed
645
?>