comment.module 19.1 KB
Newer Older
Dries's avatar
   
Dries committed
1
<?
2
// $Id$
Dries's avatar
 
Dries committed
3

Dries's avatar
   
Dries committed
4
5
$GLOBALS["cmodes"] = array(1 => "Flat list - collapsed", 2 => "Flat list - expanded", 3 => "Threaded list - collapsed", 4 => "Threaded list - expanded");
$GLOBALS["corder"] = array(1 => "Date - oldest first", 2 => "Date - newest first");
Dries's avatar
   
Dries committed
6

Dries's avatar
   
Dries committed
7
function comment_settings($mode, $order, $threshold) {
Dries's avatar
   
Dries committed
8
9
  global $user;

Dries's avatar
   
Dries committed
10
11
  if ($user->uid) {
    $user = user_save($user, array("mode" => $mode, "sort" => $order, "threshold" => $threshold));
Dries's avatar
   
Dries committed
12
13
14
  }
}

Dries's avatar
   
Dries committed
15
function comment_access($op, $comment) {
Dries's avatar
   
Dries committed
16
17
  global $user;

Dries's avatar
   
Dries committed
18
19
20
21
22
23
24
25
26
27
28
  if ($op == "edit") {

    /*
    ** Authenticated users can edit their comments as long they have
    ** not been replied to.  This, in order to avoid people changing
    ** or revising their statements based on the replies their posts
    ** got. Furthermore, users can't reply to their own comments and
    ** are encouraged to extend their original comment.
    */

    return $user->uid && $user->uid == $comment->uid && comment_num_replies($comment->cid) == 0;
Dries's avatar
   
Dries committed
29
  }
Dries's avatar
   
Dries committed
30

Dries's avatar
   
Dries committed
31
32
33
34
35
36
37
38
39
40
41
}

function comment_form($edit) {
  global $user;

  $form .= "<a name=\"comment\"></a>\n";

  // name field:
  $form .= form_item(t("Your name"), format_name($user));

  // subject field:
Dries's avatar
   
Dries committed
42
  $form .= form_textfield(t("Subject"), "subject", $edit["subject"], 50, 64);
Dries's avatar
   
Dries committed
43
44

  // comment field:
Dries's avatar
   
Dries committed
45
  $form .= form_textarea(t("Comment"), "comment", $edit["comment"] ? $edit["comment"] : $user->signature, 70, 10, t("Allowed HTML tags") .": ". htmlspecialchars(variable_get("allowed_html", "")));
Dries's avatar
   
Dries committed
46
47

  // preview button:
Dries's avatar
   
Dries committed
48
  $form .= form_hidden("cid", $edit["cid"]);
Dries's avatar
   
Dries committed
49
  $form .= form_hidden("pid", $edit["pid"]);
Dries's avatar
   
Dries committed
50
  $form .= form_hidden("nid", $edit["nid"]);
Dries's avatar
   
Dries committed
51

Dries's avatar
   
Dries committed
52
  if (!$edit["comment"]) {
Dries's avatar
   
Dries committed
53
54
55
56
57
58
59
60
61
62
    $form .= form_submit(t("Preview comment"));
  }
  else {
    $form .= form_submit(t("Preview comment"));
    $form .= form_submit(t("Post comment"));
  }

  return form($form);
}

Dries's avatar
   
Dries committed
63
64
65
66
67
68
69
70
71
72
73
function comment_edit($cid) {
  global $user;

  $comment = db_fetch_object(db_query("SELECT c.*, u.name, u.uid FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$cid'"));

  if (comment_access("edit", $comment)) {
    comment_preview(object2array($comment));
  }
}

function comment_reply($pid, $nid) {
Dries's avatar
   
Dries committed
74
75
76
  global $theme;

  if ($pid) {
Dries's avatar
   
Dries committed
77
78
    $comment = db_fetch_object(db_query("SELECT c.*, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$pid'"));
    comment_view($comment, t("reply to this comment"));
Dries's avatar
   
Dries committed
79
80
  }
  else {
Dries's avatar
   
Dries committed
81
    node_view(node_load(array("nid" => $nid)));
Dries's avatar
   
Dries committed
82
83
84
85
    $pid = 0;
  }

  if (user_access("post comments")) {
Dries's avatar
   
Dries committed
86
    $theme->box(t("Reply"), comment_form(array("pid" => $pid, "nid" => $nid)));
Dries's avatar
   
Dries committed
87
88
89
90
91
92
93
94
95
  }
  else {
    $theme->box(t("Reply"), t("You are not authorized to post comments."));
  }
}

function comment_preview($edit) {
  global $theme, $user;

Dries's avatar
   
Dries committed
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  foreach ($edit as $key => $value) {
    $comment->$key = filter($value);
  }

  /*
  ** Attach the user information:
  */

  $comment->uid = $user->uid;
  $comment->name = $user->name;

  /*
  ** Attach the time:
  */

  $comment->timestamp = time();

  /*
  ** Preview the comment:
  */

  comment_view($comment, t("reply to this comment"));
Dries's avatar
   
Dries committed
118
119
120
121
122
123
124
125
126

  $theme->box(t("Reply"), comment_form($edit));
}

function comment_post($edit) {
  global $theme, $user;

  if (user_access("post comments")) {

Dries's avatar
   
Dries committed
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
    /*
    ** Validate the comment's subject.  If not specified, extract
    ** one from the comment's body.
    */

    $edit["subject"] = strip_tags(($edit["subject"] ? $edit["subject"] : substr($edit["comment"], 0, 29)));

    /*
    ** Validate the comment's body.
    */

    $edit["comment"] = filter($edit["comment"]);

    /*
    ** Check for duplicate comments.  Note that we have to use the
    ** validated/filtered data to perform such check.
    */

Dries's avatar
   
Dries committed
145
    $duplicate = db_result(db_query("SELECT COUNT(cid) FROM comments WHERE pid = '". check_query($edit["pid"]) ."' AND nid = '". check_query($edit["nid"]) ."' AND subject = '". check_query($edit["subject"]) ."' AND comment = '". check_query($edit["comment"]) ."'"), 0);
Dries's avatar
   
Dries committed
146
147

    if ($duplicate != 0) {
Dries's avatar
   
Dries committed
148
      watchdog("warning", "comment: duplicate '". $edit["subject"] ."'");
Dries's avatar
   
Dries committed
149
150
151
    }
    else {

Dries's avatar
   
Dries committed
152
      if ($edit["cid"]) {
Dries's avatar
   
Dries committed
153

Dries's avatar
   
Dries committed
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
        /*
        ** Update the comment in the database.  Note that the update
        ** query will fail if the comment isn't owned by the current
        ** user.
        */

        db_query("UPDATE comments SET subject = '". check_query($edit["subject"]) ."', comment = '". check_query($edit["comment"]) ."' WHERE cid = '". check_query($edit["cid"]) ."' AND uid = '$user->uid'");

        /*
        ** Add entry to the watchdog log:
        */

        watchdog("special", "comment: updated '". $edit["subject"] ."'");
      }
      else {
        /*
        ** Check the user's comment submission rate.  If exceeded,
        ** throttle() will bail out.
        */

        throttle("post comment", variable_get("max_comment_rate", 60));

        /*
        ** Add the comment to database:
        */

        db_query("INSERT INTO comments (nid, pid, uid, subject, comment, hostname, timestamp) VALUES ('". check_query($edit["nid"]) ."', '". check_query($edit["pid"]) ."', '$user->uid', '". check_query($edit["subject"]) ."', '". check_query($edit["comment"]) ."', '". getenv("REMOTE_ADDR") ."', '". time() ."')");

        /*
        ** Add entry to the watchdog log:
        */
Dries's avatar
   
Dries committed
185

Dries's avatar
   
Dries committed
186
187
        watchdog("special", "comment: added '". $edit["subject"] ."'");
      }
Dries's avatar
   
Dries committed
188
189
190
191

      /*
      ** Clear the cache:
      */
Dries's avatar
   
Dries committed
192
193

      cache_clear();
Dries's avatar
   
Dries committed
194

Dries's avatar
   
Dries committed
195
196
    }
  }
Dries's avatar
   
Dries committed
197
198
199
200
201
202
203
204

  /*
  ** Redirect the user the node he commented on:
  */

  $url = "node.php?id=". $edit["nid"];
  drupal_goto($url);

Dries's avatar
   
Dries committed
205
206
}

Dries's avatar
   
Dries committed
207
function comment_num_replies($id) {
Dries's avatar
   
Dries committed
208
209
210
211
212
213
214
215
216

  $result = db_query("SELECT COUNT(cid) FROM comments WHERE pid = '$id'");
  return ($result) ? db_result($result, 0) : 0;

}

function comment_moderation($comment) {
  global $user;

Dries's avatar
   
Dries committed
217
218
219
  // XXX: disabled for now
  return "";

Dries's avatar
   
Dries committed
220
  $values = array("--", "1", "2", "3", "4", "5");
Dries's avatar
   
Dries committed
221
222
223
224
225
226
227
228
229
230
231
232
233

  $moderate = db_fetch_object(db_query("SELECT * FROM moderate WHERE cid = '$comment->cid' AND uid = '$user->uid'"));

  foreach ($values as $key => $value) {
    $options .= " <option value=\"$key\"". ($moderate->score == $key ? " selected=\"selected\"" : "") .">$value</option>\n";
  }

 $output .= "<select name=\"moderate[comment][$comment->cid]\">$options</select><br />". ($comment->score ? $comment->score : "--") ." / $comment->votes";

  return $output;
}

function comment_threshold($threshold) {
Dries's avatar
   
Dries committed
234
235
236
  // XXX: disabled for now
  return "";

Dries's avatar
   
Dries committed
237
238
239
240
241
242
243
  for ($i = 0; $i < 6; $i++) $options .= " <option value=\"$i\"". ($threshold == $i ? " SELECTED" : "") .">". t("Visibility") ." - $i</option>";
  return "<select name=\"threshold\">$options</select>\n";
}

function comment_mode($mode) {
  global $cmodes;

Dries's avatar
   
Dries committed
244
  foreach ($cmodes as $key => $value) $options .= " <option value=\"$key\"". ($mode == $key ? " SELECTED" : "") .">$value</option>\n";
Dries's avatar
   
Dries committed
245
246
247
248
249
250
251
252
253
254
  return "<select name=\"mode\">$options</select>\n";
}

function comment_order($order) {
  global $corder;

  foreach ($corder as $key=>$value) $options .= " <option value=\"$key\"". ($order == $key ? " SELECTED" : "") .">$value</option>\n";
  return "<select name=\"order\">$options</select>\n";
}

Dries's avatar
   
Dries committed
255
function comment_query($nid, $order, $pid = -1) {
Dries's avatar
   
Dries committed
256

Dries's avatar
   
Dries committed
257
  $query .= "SELECT c.cid, c.pid, c.nid, c.subject, c.comment, c.timestamp, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.nid = '$nid'";
Dries's avatar
   
Dries committed
258
259
260
261
262

  if ($pid >= 0) {
    $query .= " AND pid = '$pid'";
  }

Dries's avatar
   
Dries committed
263
  $query .= " GROUP BY c.cid, c.pid, c.nid, c.subject, c.comment, c.timestamp, u.uid, u.name";
Dries's avatar
   
Dries committed
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285

  if ($order == 1) {
    $query .= " ORDER BY c.timestamp DESC";
  }
  else if ($order == 2) {
    $query .= " ORDER BY c.timestamp";
  }

  return db_query($query);

}

function comment_visible($comment, $threshold = 0) {
  if ($comment->votes == 0 || $comment->score >= $threshold) {
    return 1;
  }
  else {
    return 0;
  }
}

function comment_links($comment, $return = 1) {
Dries's avatar
   
Dries committed
286
  global $user, $theme;
Dries's avatar
   
Dries committed
287

Dries's avatar
   
Dries committed
288
289
  $links = array();

Dries's avatar
   
Dries committed
290
  if ($return) {
Dries's avatar
   
Dries committed
291
    $links[] = "<a href=\"node.php?id=$comment->nid#$comment->cid\"><font color=\"$theme->type\">". t("return") ."</font></a>";
Dries's avatar
   
Dries committed
292
  }
Dries's avatar
   
Dries committed
293
294
295
296
297
298

  if (user_access("administer comments")) {
    $links[] = "<a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\"><font color=\"$theme->type\">". t("administer") ."</font></a>";
  }

  if (user_access("post comments")) {
Dries's avatar
   
Dries committed
299
300
301
302
303
304
    if (comment_access("edit", $comment)) {
      $links[] = "<a href=\"module.php?mod=comment&op=edit&id=$comment->cid\"><font color=\"$theme->type\">". t("edit your comment") ."</font></a>";
    }
    else {
      $links[] = "<a href=\"module.php?mod=comment&op=reply&id=$comment->nid&pid=$comment->cid\"><font color=\"$theme->type\">". t("reply to this comment") ."</font></a>";
    }
Dries's avatar
   
Dries committed
305
  }
Dries's avatar
   
Dries committed
306

Dries's avatar
   
Dries committed
307

Dries's avatar
   
Dries committed
308
  return $theme->links($links);
Dries's avatar
   
Dries committed
309
310
311
312
313
314
315
316
317
}

function comment_view($comment, $folded = 0) {
  global $theme;

  if ($folded) {
    $theme->comment($comment, $folded);
  }
  else {
Dries's avatar
   
Dries committed
318
    print "<a href=\"node.php?id=$comment->nid&cid=$comment->cid#$comment->cid\">". check_output($comment->subject) ."</a> by ". format_name($comment) ."</small><p />";
Dries's avatar
   
Dries committed
319
320
321
  }
}

Dries's avatar
   
Dries committed
322
function comment_thread_min($comments, $threshold, $pid = 0) {
Dries's avatar
   
Dries committed
323
324
  global $user;

Dries's avatar
   
Dries committed
325
326
327
328
329
330
331
  foreach ($comments as $comment) {
    if ($comment->pid == $pid) {
      print "<ul>";
      print comment_view($comment);
      comment_thread_min($comments, $threshold, $comment->cid);
      print "</ul>";
    }
Dries's avatar
   
Dries committed
332
333
334
  }
}

Dries's avatar
   
Dries committed
335
function comment_thread_max($comments, $threshold, $pid = 0, $level = 0) {
Dries's avatar
   
Dries committed
336
337
338
339
340
341
342
343
344
345
346
  global $user;

  /*
  ** We had quite a few browser specific issues: expanded comments below
  ** the top level got truncated on the right hand side.  A range of
  ** solutions have been proposed and tried but either the right margins of
  ** the comments didn't line up well, or the heavily nested tables made
  ** for slow rendering and cluttered HTML.  This is the best work-around
  ** in terms of speed and size.
  */

Dries's avatar
   
Dries committed
347
348
349
  foreach ($comments as $comment) {
    if ($comment->pid == $pid) {
      print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td width=\"". ($level * 25) ."\">&nbsp;</td><td>\n";
Dries's avatar
   
Dries committed
350
      comment_view($comment, comment_links($comment, 0));
Dries's avatar
   
Dries committed
351
      print "</td></tr></table>\n";
Dries's avatar
   
Dries committed
352

Dries's avatar
   
Dries committed
353
354
      comment_thread_max($comments, $threshold, $comment->cid, $level + 1);
    }
Dries's avatar
   
Dries committed
355
356
357
358
  }

}

Dries's avatar
   
Dries committed
359
function comment_render($nid, $cid) {
Dries's avatar
   
Dries committed
360
361
362
363
364
365
366
367
  global $user, $theme, $mode, $order, $threshold, $REQUEST_URI;

  if (user_access("access comments")) {

    /*
    ** Pre-process variables:
    */

Dries's avatar
   
Dries committed
368
369
    if (empty($nid)) {
      $nid = 0;
Dries's avatar
   
Dries committed
370
371
372
373
374
375
376
    }

    if (empty($cid)) {
      $cid = 0;
    }

    if (empty($mode)) {
Dries's avatar
   
Dries committed
377
      $mode = $user->uid ? $user->mode : variable_get("default_comment_mode", 4);
Dries's avatar
   
Dries committed
378
379
380
    }

    if (empty($order)) {
Dries's avatar
   
Dries committed
381
      $order = $user->uid ? $user->sort : variable_get("default_comment_order", 1);
Dries's avatar
   
Dries committed
382
383
384
    }

    if (empty($threshold)) {
Dries's avatar
   
Dries committed
385
386
      // $threshold = $user->uid ? $user->threshold : variable_get("default_comment_threshold", 3);
      $threshold = 0;
Dries's avatar
   
Dries committed
387
388
389
390
391
392
393
394
395
396
397
398
    }

    print "<a name=\"comment\"></a>\n";
    print "<form method=\"post\" action=\"$REQUEST_URI\">\n";

    /*
    ** Render control panel:
    */

    $theme->box(t("Control panel"), $theme->comment_controls($threshold, $mode, $order));

    if ($cid > 0) {
Dries's avatar
   
Dries committed
399
      $result = db_query("SELECT c.cid, c.pid, c.nid, c.subject, c.comment, c.timestamp, u.uid, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$cid' GROUP BY c.cid, c.pid, c.nid, c.subject, c.comment, c.timestamp, u.uid, u.name");
Dries's avatar
   
Dries committed
400
401
402
403
404
405
      if ($comment = db_fetch_object($result)) {
        comment_view($comment, comment_links($comment));
      }
    }
    else {
      if ($mode == 1) {
Dries's avatar
   
Dries committed
406
        $result = comment_query($nid, $order);
Dries's avatar
   
Dries committed
407
408
409
410
        print "<table border=\"0\" cellpadding=\"2\" cellspacing=\"2\">\n";
        print " <tr><th>Subject</th><th>Author</th><th>Date</th><th>Score</th></tr>\n";
        while ($comment = db_fetch_object($result)) {
          if (comment_visible($comment, $threshold)) {
Dries's avatar
   
Dries committed
411
            print " <tr><td><a href=\"node.php?id=$comment->nid&cid=$comment->cid#$comment->cid\">". check_output($comment->subject) ."</a></td><td>". format_name($comment) ."</td><td>". format_date($comment->timestamp, "small") ."</td><td>$comment->score</td></tr>\n";
Dries's avatar
   
Dries committed
412
413
414
415
416
          }
        }
        print "</table>\n";
      }
      else if ($mode == 2) {
Dries's avatar
   
Dries committed
417
        $result = comment_query($nid, $order);
Dries's avatar
   
Dries committed
418
419
420
421
422
        while ($comment = db_fetch_object($result)) {
          comment_view($comment, (comment_visible($comment, $threshold) ? comment_links($comment, 0) : 0));
        }
      }
      else if ($mode == 3) {
Dries's avatar
   
Dries committed
423
        $result = comment_query($nid, $order);
Dries's avatar
   
Dries committed
424
        while ($comment = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
425
426
427
428
429
          $comments[] = $comment;
        }

        if ($comments) {
          comment_thread_min(array_reverse($comments), $threshold);
Dries's avatar
   
Dries committed
430
431
432
        }
      }
      else {
Dries's avatar
   
Dries committed
433
        $result = comment_query($nid, $order);
Dries's avatar
   
Dries committed
434
        while ($comment = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
435
436
437
438
439
          $comments[] = $comment;
        }

        if ($comments) {
          comment_thread_max(array_reverse($comments), $threshold);
Dries's avatar
   
Dries committed
440
441
442
443
444
445
446
447
448
        }
      }
    }

    print "</form>";

  }
}

Dries's avatar
   
Dries committed
449
function comment_search($keys) {
Dries's avatar
   
Dries committed
450
  global $PHP_SELF;
Dries's avatar
   
Dries committed
451
  $result = db_query("SELECT c.*, u.name FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.subject LIKE '%$keys%' OR c.comment LIKE '%$keys%' ORDER BY c.timestamp DESC LIMIT 20");
Dries's avatar
   
Dries committed
452
  while ($comment = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
453
    $find[$i++] = array("title" => check_output($comment->subject), "link" => (strstr($PHP_SELF, "admin.php") ? "admin.php?mod=comment&op=edit&id=$comment->cid" : "node.php?id=$comment->nid&cid=$comment->cid"), "user" => $comment->name, "date" => $comment->timestamp);
Dries's avatar
   
Dries committed
454
455
456
  }
  return $find;
}
Dries's avatar
 
Dries committed
457

Dries's avatar
   
Dries committed
458
function comment_perm() {
Dries's avatar
   
Dries committed
459
460
461
  return array("access comments", "post comments", "administer comments");
}

Dries's avatar
   
Dries committed
462
function comment_link($type, $node = 0, $main = 0) {
Dries's avatar
   
Dries committed
463
  if ($type == "admin" && user_access("administer comments")) {
Dries's avatar
   
Dries committed
464
465
466
    $links[] = "<a href=\"admin.php?mod=comment\">comments</a>";
  }

Dries's avatar
   
Dries committed
467
  if ($type == "node" && $node->comment) {
Dries's avatar
   
Dries committed
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485

    if ($main) {

      /*
      ** Main page: display the number of comments that have been posted.
      */

      if (user_access("access comments")) {
        $links[] = "<a href=\"node.php?id=$node->nid#comment\">". format_plural(node_get_comments($node->nid), "comment", "comments") ."</a>";
      }
    }
    else {
      /*
      ** Node page: add a "post comment" link if the user is allowed to
      ** post comments.
      */

      if (user_access("post comments")) {
Dries's avatar
   
Dries committed
486
        $links[] = "<a href=\"module.php?mod=comment&op=reply&id=$node->nid#comment\">". t("add new comment") ."</a>";
Dries's avatar
   
Dries committed
487
488
489
490
      }
    }
  }

Dries's avatar
   
Dries committed
491
  return $links ? $links : array();
Dries's avatar
   
Dries committed
492
493
}

Dries's avatar
   
Dries committed
494
495
function comment_node_link($node) {

Dries's avatar
   
Dries committed
496
  if (user_access("administer comments") && node_get_comments($node->nid)) {
Dries's avatar
   
Dries committed
497

Dries's avatar
   
Dries committed
498
499
500
    /*
    ** Edit comments:
    */
Dries's avatar
   
Dries committed
501

Dries's avatar
   
Dries committed
502
    $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 nid = '$node->nid' ORDER BY c.timestamp");
Dries's avatar
   
Dries committed
503

Dries's avatar
   
Dries committed
504
505
506
507
508
509
510
511
512
513
514
515
    $output .= "<h3>". t("Edit comments") ."</h3>";
    $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">";
    $output .= " <tr><th>title</th><th>author</th><th colspan=\"3\">operations</th></tr>";

    while ($comment = db_fetch_object($result)) {
      $output .= "<tr><td><a href=\"node.php?id=$node->nid&cid=$comment->cid#$comment->cid\">$comment->subject</a></td><td>". format_name($comment) ."</td><td><a href=\"node.php?id=$node->nid&cid=$comment->cid#$comment->cid\">". t("view comment") ."</a></td><td><a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\">". t("edit comment") ."</a></td><td><a href=\"admin.php?mod=comment&op=delete&id=$comment->cid\">". t("delete comment") ."</a></td></tr>";
    }

    $output .= "</table>";

    return $output;
  }
Dries's avatar
   
Dries committed
516
517
}

Dries's avatar
   
Dries committed
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553

function comment_save($id, $edit) {
  db_query("UPDATE comments SET subject = '". check_query(filter($edit["subject"])) ."', comment = '". check_query(filter($edit["comment"])) ."' WHERE cid = '$id'");
  watchdog("special", "comment: modified '". $edit["subject"] ."'");
}

function comment_page() {
  global $theme, $op, $edit, $id, $pid, $cid;

  switch ($op) {
    case "edit":
      $theme->header();
      comment_edit(check_query($id));
      $theme->footer();
      break;
    case "reply":
      $theme->header();
      comment_reply(check_query($pid), check_query($id));
      $theme->footer();
      break;
    case t("Preview comment"):
      $theme->header();
      comment_preview($edit);
      $theme->footer();
      break;
    case t("Post comment"):
      comment_post($edit);
      break;
    case t("Update settings"):
      comment_settings(check_query($mode), check_query($order), check_query($threshold));
      break;
    default:
  }
}

function comment_admin_edit($id) {
Dries's avatar
   
Dries committed
554

Dries's avatar
   
Dries committed
555
  $result = db_query("SELECT c.*, u.name, u.uid FROM comments c LEFT JOIN users u ON c.uid = u.uid WHERE c.cid = '$id'");
Dries's avatar
 
Dries committed
556
557
  $comment = db_fetch_object($result);

Dries's avatar
   
Dries committed
558
  $form .= form_item(t("Author"), format_name($comment));
Dries's avatar
   
Dries committed
559
560
  $form .= form_textfield(t("Subject"), "subject", $comment->subject, 70, 128);
  $form .= form_textarea(t("Comment"), "comment", $comment->comment, 70, 15);
Dries's avatar
   
Dries committed
561
  $form .= form_hidden("cid", $id);
Dries's avatar
   
Dries committed
562
  $form .= form_submit(t("Submit"));
Dries's avatar
   
Dries committed
563
  $form .= form_submit(t("Delete"));
Dries's avatar
 
Dries committed
564

Dries's avatar
   
Dries committed
565
  return form($form);
Dries's avatar
 
Dries committed
566
567
}

Dries's avatar
   
Dries committed
568
function comment_admin_overview() {
Dries's avatar
   
Dries committed
569
  $result = db_query("SELECT c.*, u.name, u.uid FROM comments c LEFT JOIN users u ON u.uid = c.uid ORDER BY timestamp DESC LIMIT 50");
Dries's avatar
   
Dries committed
570

Dries's avatar
   
Dries committed
571
572
  $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n";
  $output .= " <tr><th>subject</th><th>author</th><th>date</th><th colspan=\"2\">operations</th></tr>\n";
Dries's avatar
 
Dries committed
573
  while ($comment = db_fetch_object($result)) {
Dries's avatar
   
Dries committed
574
    $output .= " <tr><td><a href=\"node.php?id=$comment->nid&cid=$comment->cid&pid=$comment->pid#$comment->cid\">". check_output($comment->subject) ."</a></td><td>". format_name($comment) ."</td><td>". format_date($comment->timestamp, "small") ."</td><td><a href=\"admin.php?mod=comment&op=edit&id=$comment->cid\">edit comment</a></td><td><a href=\"admin.php?mod=comment&op=delete&id=$comment->cid\">delete comment</a></td></tr>\n";
Dries's avatar
 
Dries committed
575
  }
Dries's avatar
   
Dries committed
576
  $output .= "</table>\n";
Dries's avatar
   
Dries committed
577

Dries's avatar
   
Dries committed
578
  return $output;
Dries's avatar
 
Dries committed
579
580
}

Dries's avatar
   
Dries committed
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
function comment_delete($edit) {

  if ($edit["confirm"]) {
    db_query("DELETE FROM comments WHERE cid = '". check_query($edit["cid"]) ."'");
    watchdog("special", "comment: deleted comment #". $edit["cid"]);
  }
  else {
    $output .= form_item(t("Confirm deletion"), "");
    $output .= form_hidden("cid", $edit["cid"]);
    $output .= form_hidden("confirm", 1);
    $output .= form_submit(t("Delete"));
    $output = form($output);
  }

  return $output;
Dries's avatar
   
Dries committed
596
597
}

Dries's avatar
 
Dries committed
598
function comment_admin() {
Dries's avatar
   
Dries committed
599
  global $op, $id, $edit, $mod, $keys, $order;
Dries's avatar
 
Dries committed
600

Dries's avatar
   
Dries committed
601
  if (user_access("administer comments")) {
Dries's avatar
   
Dries committed
602

Dries's avatar
   
Dries committed
603
    print "<small><a href=\"admin.php?mod=comment\">overview</a> | <a href=\"admin.php?mod=comment&op=search\">search comment</a></small><hr />\n";
Dries's avatar
   
Dries committed
604
605
606

    switch ($op) {
      case "edit":
Dries's avatar
   
Dries committed
607
        print comment_admin_edit($id);
Dries's avatar
   
Dries committed
608
609
        break;
      case "search":
Dries's avatar
   
Dries committed
610
        print search_type("comment", "admin.php?mod=comment&op=search");
Dries's avatar
   
Dries committed
611
        break;
Dries's avatar
   
Dries committed
612
      case "delete":
Dries's avatar
   
Dries committed
613
614
615
616
        print comment_delete(array("cid" => $id));
        break;
      case t("Delete"):
        print comment_delete($edit);
Dries's avatar
   
Dries committed
617
        break;
Dries's avatar
   
Dries committed
618
      case t("Submit"):
Dries's avatar
   
Dries committed
619
        print status(comment_save(check_query($id), $edit));
Dries's avatar
   
Dries committed
620
        print comment_admin_overview();
Dries's avatar
   
Dries committed
621
622
        break;
      default:
Dries's avatar
   
Dries committed
623
        print comment_admin_overview();
Dries's avatar
   
Dries committed
624
625
626
627
    }
  }
  else {
    print message_access();
Dries's avatar
 
Dries committed
628
629
  }
}
Dries's avatar
   
Dries committed
630

Dries's avatar
   
Dries committed
631
?>