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