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

Я создал правило для предоставления пользователям пользовательских баллов при добавлении комментария к узлу. Однако я хотел бы дать им эти очки только один раз. Это означает: они не получают больше очков, когда реагируют второй или третий раз на одном и том же узле, но, тем не менее, им будут начисляться очки после комментирования другого узла.

Как я могу это сделать?

2 ответа

Решение

Я решил свою проблему с модулем Flags: я создал флаги под названием "Комментируется на этом узле" и "Первая реакция" * и правило под названием "Комментируется на узле". Это настройки моего правила:

СОБЫТИЯ: После сохранения нового комментария

УСЛОВИЯ:

  • Содержимое имеет тип Параметр: Содержимое: [comment:node]Типы контента: статья
  • НЕ Узел помечен Параметр: Флаг: Комментируется этот узел, узел:[comment:node]Пользователь, от имени которого проверять: [comment:author]

ДЕЙСТВИЯ:

  • Предоставление баллов пользователю Параметр: Пользователь: [comment:author], Очки: 2, Очки категория: Реакция, Сущность: [comment:node], Описание: Новая реакция, Операция: Добавить, Отображение: false, Умеренный: Автоматически одобрено
  • Пометить узел Параметр: Пометить: Комментарий к узлу, Узел:[comment:node]Пользователь, от имени которого помечается: [comment:author], Пропустить проверку разрешения: false
  • Отметить комментарий: Параметр: Флаг: Первая реакция, Комментарий: [comment]Пользователь, от имени которого помечается: [comment:author], Пропустить проверку разрешения: false

Таким образом, каждый раз, когда пользователь добавляет комментарий к определенному узлу в первый раз, узел помечается как "Комментарий к узлу", реакция помечается как "Первая реакция", а пользователь, добавивший комментарий, получает 2 балла.,

** Я использую флаг "Первый комментарий" в связанном вопросе.*

Правила должны иметь: События: Перед сохранением комментария

Conditions: this code

global $user;
$node  =array();
$query = db_select('comment', 'c');
$query->fields('c', array('nid'));
$query->condition('c.uid', $user->uid);
$result = $query->execute();
while ($res = $result->fetchAll()) {
foreach ($res AS $re) {
$node[] = $re->nid;
}
}

if(!in_array($comment->nid, $node)){
return TRUE;
}

Действия: предоставить пользователям баллы пользователей

=============================

Условия: выполнение пользовательского кода PHP или создание пользовательских условий

/**
 * Implements hook_rules_condition_info().
 */
function MYMODULE_rules_condition_info() {
  $conditions = array();
  $conditions['MYCONDITION'] = array(
    'label' => t('lable'),
    'parameter' => array(
      'user' => array(
        'type' => 'user',
        'label' => t('User'),
      ),
    ),
    'group' => t('Custom'),
    'callbacks' => array(
      'execute' => 'MYMODULE_rules_condition_MYCONDITION',
    ),
  );
  return $conditions;
}
function MYMODULE_rules_condition_MYCONDITION($user) {
$node  =array();
$query = db_select('comment', 'c');
$query->fields('c', array('nid'));
$query->condition('c.uid', $user->uid);
$result = $query->execute();
while ($res = $result->fetchAll()) {
foreach ($res AS $re) {
$node[] = $re->nid;
}
}

if(!in_array($comment->nid, $node)){
return TRUE;
}
}
Другие вопросы по тегам