Как начислять пользовательские баллы после добавления комментария один раз?
Я создал правило для предоставления пользователям пользовательских баллов при добавлении комментария к узлу. Однако я хотел бы дать им эти очки только один раз. Это означает: они не получают больше очков, когда реагируют второй или третий раз на одном и том же узле, но, тем не менее, им будут начисляться очки после комментирования другого узла.
Как я могу это сделать?
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;
}
}