You are here

function _feeds_comment_save in Feeds Comment Processor 6

This function is copied and pasted from comment_save in Drupal core and then modified to get rid of access restrictions and to prevent extraneous dsms.

Parameters

$edit: A comment array.

Return value

If the comment is successfully saved the comment ID is returned. If the comment is not saved, FALSE is returned.

1 call to _feeds_comment_save()
FeedsCommentProcessor::process in ./FeedsCommentProcessor.inc
Implementation of FeedsProcessor::process().

File

./FeedsCommentProcessor.inc, line 417
Class definition of FeedsCommentProcessor.

Code

function _feeds_comment_save($edit) {
  global $user;
  $edit += array(
    'mail' => '',
    'homepage' => '',
    'name' => '',
    'status' => user_access('post comments without approval') ? COMMENT_PUBLISHED : COMMENT_NOT_PUBLISHED,
  );
  if ($edit['cid']) {

    // Update the comment in the database.
    db_query("UPDATE {comments} SET status = %d, timestamp = %d, subject = '%s', comment = '%s', format = %d, uid = %d, name = '%s', mail = '%s', homepage = '%s' WHERE cid = %d", $edit['status'], $edit['timestamp'], $edit['subject'], $edit['comment'], $edit['format'], $edit['uid'], $edit['name'], $edit['mail'], $edit['homepage'], $edit['cid']);

    // Allow modules to respond to the updating of a comment.
    comment_invoke_comment($edit, 'update');

    // Add an entry to the watchdog log.
    watchdog('content', 'Comment: updated %subject.', array(
      '%subject' => $edit['subject'],
    ), WATCHDOG_NOTICE, l(t('view'), 'node/' . $edit['nid'], array(
      'fragment' => 'comment-' . $edit['cid'],
    )));
  }
  else {

    // Add the comment to database.
    // Here we are building the thread field. See the documentation for
    // comment_render().
    if ($edit['pid'] == 0) {

      // This is a comment with no parent comment (depth 0): we start
      // by retrieving the maximum thread level.
      $max = db_result(db_query('SELECT MAX(thread) FROM {comments} WHERE nid = %d', $edit['nid']));

      // Strip the "/" from the end of the thread.
      $max = rtrim($max, '/');

      // Finally, build the thread field for this new comment.
      $thread = int2vancode(vancode2int($max) + 1) . '/';
    }
    else {

      // This is comment with a parent comment: we increase
      // the part of the thread value at the proper depth.
      // Get the parent comment:
      $parent = _comment_load($edit['pid']);

      // Strip the "/" from the end of the parent thread.
      $parent->thread = (string) rtrim((string) $parent->thread, '/');

      // Get the max value in _this_ thread.
      $max = db_result(db_query("SELECT MAX(thread) FROM {comments} WHERE thread LIKE '%s.%%' AND nid = %d", $parent->thread, $edit['nid']));
      if ($max == '') {

        // First child of this parent.
        $thread = $parent->thread . '.' . int2vancode(0) . '/';
      }
      else {

        // Strip the "/" at the end of the thread.
        $max = rtrim($max, '/');

        // We need to get the value at the correct depth.
        $parts = explode('.', $max);
        $parent_depth = count(explode('.', $parent->thread));
        $last = $parts[$parent_depth];

        // Finally, build the thread field for this new comment.
        $thread = $parent->thread . '.' . int2vancode(vancode2int($last) + 1) . '/';
      }
    }
    if (empty($edit['timestamp'])) {
      $edit['timestamp'] = time();
    }
    if ($edit['uid'] === $user->uid && isset($user->name)) {

      // '===' Need to modify anonymous users as well.
      $edit['name'] = $user->name;
    }
    db_query("INSERT INTO {comments} (nid, pid, uid, subject, comment, format, hostname, timestamp, status, thread, name, mail, homepage) VALUES (%d, %d, %d, '%s', '%s', %d, '%s', %d, %d, '%s', '%s', '%s', '%s')", $edit['nid'], $edit['pid'], $edit['uid'], $edit['subject'], $edit['comment'], $edit['format'], empty($edit['hostname']) ? ip_address() : $edit['hostname'], $edit['timestamp'], $edit['status'], $thread, $edit['name'], $edit['mail'], $edit['homepage']);
    $edit['cid'] = db_last_insert_id('comments', 'cid');

    // Tell the other modules a new comment has been submitted.
    comment_invoke_comment($edit, 'insert');

    // Add an entry to the watchdog log.
    watchdog('content', 'Comment: added %subject.', array(
      '%subject' => $edit['subject'],
    ), WATCHDOG_NOTICE, l(t('view'), 'node/' . $edit['nid'], array(
      'fragment' => 'comment-' . $edit['cid'],
    )));
  }
  _comment_update_node_statistics($edit['nid']);

  // Clear the cache so an anonymous user can see his comment being added.
  cache_clear_all();

  // Explain the approval queue if necessary, and then
  // redirect the user to the node he's commenting on.
  if ($edit['status'] == COMMENT_NOT_PUBLISHED) {
    drupal_set_message(t('Your comment has been queued for moderation by site administrators and will be published after approval.'));
  }
  else {
    comment_invoke_comment($edit, 'publish');
  }
  return $edit['cid'];
}