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
?>