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