node.module 18.2 KB
Newer Older
Dries Buytaert's avatar
 
Dries Buytaert committed
1
<?php
2
// $Id$
Dries Buytaert's avatar
 
Dries Buytaert committed
3

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
10
        print "<h3>". ucfirst($name) ." type</h3>";
Dries Buytaert's avatar
   
Dries Buytaert committed
11
12
13
14
15
16
        print module_invoke($name, "help");
      }
    }
  }
}

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
41
function node_perm() {
Dries Buytaert's avatar
   
Dries Buytaert committed
42
  return array("administer nodes", "access content", "post content");
Dries Buytaert's avatar
   
Dries Buytaert committed
43
44
}

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
56
function node_conf_options() {
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
60

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

Dries Buytaert's avatar
CHANGES    
Dries Buytaert committed
64
function node_conf_filters() {
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
67
  $output .= "<hr />";
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
69
  $output .= "<hr />";
Dries Buytaert's avatar
CHANGES    
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
CHANGES    
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
92
function node_link($type, $node = 0) {
Dries Buytaert's avatar
   
Dries Buytaert committed
93

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

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

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

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

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
119
120
121
122
123
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

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

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

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

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

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

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

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

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

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

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

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
216

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

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

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

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

  return $block;
}

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

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

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

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

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

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

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

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

}

Dries Buytaert's avatar
   
Dries Buytaert committed
287

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

  global $user;

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

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

  /*
  ** Validate the title field:
  */

Dries Buytaert's avatar
   
Dries Buytaert committed
302
  if (($node->nid || $node->body) && !$node->title) {
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
312
313
    if (!$node->name) {
      $node->name = $user->name;
Dries Buytaert's avatar
   
Dries Buytaert committed
314
315
    }

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

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

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

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

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

Dries Buytaert's avatar
   
Dries Buytaert committed
339
340
    if (strtotime($node->date) > 1000) {
      $node->created = strtotime($node->date);
Dries Buytaert's avatar
   
Dries Buytaert committed
341
342
343
344
    }
    else {
      $error["date"] = "<div style=\"color: red;\">". t("You have to specifiy a valid date.") ."</div>";
    }
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
354
355
  }

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

function node_form($edit) {

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

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

Dries Buytaert's avatar
   
Dries Buytaert committed
383
384
385
386
  $function = $edit->type ."_form";
  if (function_exists($function)) {
    $output .= $function($edit, &$error);
  }
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
416
  if ($edit->nid && node_access("delete", $edit)) {
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
508
function node_submit($node) {
Dries Buytaert's avatar
   
Dries Buytaert committed
509
510
511
512
513
514
515

  global $user;

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

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

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

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

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
542
543
    }
    else {
Dries Buytaert's avatar
   
Dries Buytaert committed
544
545
      watchdog("warning", "node: not authorized to update node");
      $output = t("You are not authorized to update this node.");
Dries Buytaert's avatar
   
Dries Buytaert committed
546
547
548
549
    }

  }
  else {
Dries Buytaert's avatar
   
Dries Buytaert committed
550

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

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

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
562

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
569

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

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
578
579
580
581
582
583
584
  }

  return $output;
}

function node_remove($edit) {

Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
590

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

  return $output;
}

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

  if ($op == "feed") {
    node_feed();
Dries Buytaert's avatar
   
Dries Buytaert committed
614
    return;
Dries Buytaert's avatar
   
Dries Buytaert committed
615
  }
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
632
633
634
    case t("Delete"):
      print node_remove($edit);
      break;
Dries Buytaert's avatar
   
Dries Buytaert 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 Buytaert's avatar
   
Dries Buytaert committed
638
        node_view(node_load(array("nid" => $node->nid, "type" => $node->type)), 1);
639
640
      }
  }
Dries Buytaert's avatar
   
Dries Buytaert committed
641
642

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

Dries Buytaert's avatar
 
Dries Buytaert committed
645
?>