Как запретить отвечать на комментарии пользователям?

Главные вкладки

Аватар пользователя MAXIM58 MAXIM58 2 декабря 2012 в 12:10

Здравствуйте. Скажите, как запретить пользователям отвечать на комментарий?
Я думаю можно было бы просто убрать ссылку, но это решение не будет достаточно хорошим. Как совсем запретить отвечать на комментарии?
Причем просто писать комментарий любой желающий может.

Комментарии

Аватар пользователя HydroBlast HydroBlast 2 декабря 2012 в 12:23

Что значит "отвечать на комментарии" ?

Вы имеете в виду древовидную структуру с наличием описанной вами ссылки в каждом комментарии ?

Аватар пользователя MAXIM58 MAXIM58 2 декабря 2012 в 12:54

Да. Имею ввиду именно это. Возможность "Ответить" должна быть только у администратора.
Но просто написать комментарий может любой.

Аватар пользователя MAXIM58 MAXIM58 2 декабря 2012 в 12:58

Я могу скрыть ссылку. Но также нужно запретить вообще отвечать. (Иначе кто-либо сможет прописать ссылку и всё-таки ответить).
Есть такая идея: перекрыть путь к форме ответа на комментарий через views. Не знаю, получится это или нет. Но если и получится - тоже не очень хорошее решение. Подскажите пожалуйста, как всё таки запретить доступ к этому разделу (ответ на комментарий) для анонимов?

Аватар пользователя MAXIM58 MAXIM58 2 декабря 2012 в 15:19

"HydroBlast" wrote:
А отменить формирование ссылки не пробовали ?

Имеете ввиду "unset"? На данный момент часть реализована через него. Но страница по адресу (если ввести руками) всё равно отображается.

Аватар пользователя HydroBlast HydroBlast 2 декабря 2012 в 16:30

Накидал условие , посмотрите еще варианты .

function comment_reply($node, $pid = NULL) {
  global $user; //================Добавлено=====================
  // Set the breadcrumb trail.
  drupal_set_breadcrumb(array(l(t('Home'), NULL), l($node->title, 'node/' . $node->nid)));
  $op = isset($_POST['op']) ? $_POST['op'] : '';
  $build = array();

  // The user is previewing a comment prior to submitting it.
  if ($op == t('Preview')) {
    if (user_access('post comments')) {
      $build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) array('pid' => $pid, 'nid' => $node->nid));
    }
    else {
      drupal_set_message(t('You are not authorized to post comments.'), 'error');
      drupal_goto("node/$node->nid");
    }
  }
  else {
    // $pid indicates that this is a reply to a comment.
    if ($pid) {
      //if (user_access('access comments')) { //==================Было==================
      if (in_array('administrator', $user->roles)) {  //============Стало=================

        // Load the comment whose cid = $pid
        $comment = db_query('SELECT c.*, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data FROM {comment} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = :cid AND c.status = :status', array(
          ':cid' => $pid,
          ':status' => COMMENT_PUBLISHED,
        ))->fetchObject();
        if ($comment) {
          // If that comment exists, make sure that the current comment and the
          // parent comment both belong to the same parent node.
          if ($comment->nid != $node->nid) {
            // Attempting to reply to a comment not belonging to the current nid.
            drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
            drupal_goto("node/$node->nid");
          }
          // Display the parent comment
          $comment->node_type = 'comment_node_' . $node->type;
          field_attach_load('comment', array($comment->cid => $comment));
          $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
          $build['comment_parent'] = comment_view($comment, $node);
        }
        else {
          drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
          drupal_goto("node/$node->nid");
        }
      }
      else {
        drupal_set_message(t('You are not authorized to view comments.'), 'error');
        drupal_goto("node/$node->nid");
      }
    }
    // This is the case where the comment is in response to a node. Display the node.
    elseif (user_access('access content')) {
      $build['comment_node'] = node_view($node);
    }

    // Should we show the reply box?
    if ($node->comment != COMMENT_NODE_OPEN) {
      drupal_set_message(t("This discussion is closed: you can't post new comments."), 'error');
      drupal_goto("node/$node->nid");
    }
    elseif (user_access('post comments')) {
      $edit = array('nid' => $node->nid, 'pid' => $pid);
      $build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) $edit);
    }
    else {
      drupal_set_message(t('You are not authorized to post comments.'), 'error');
      drupal_goto("node/$node->nid");
    }
  }

  return $build;

}

Аватар пользователя HydroBlast HydroBlast 4 декабря 2012 в 17:04

Это часть comment.pages.inc , модуль comment в ядре.

И это не конечный результат , но работать будет .

Я бы не советовал использовать это на постоянной основе .