User Karma: репутация пользователя

24 Дек 2008
Опубликовано VladSavitsky

Описание с сайта

Модуль User Karma: репутация пользователя

Модуль подсчитывает карму пользователей, используя модуль VotingAPI.

Обратите внимание: Модуль требует MySQL 4.1.X или выше для работы.

Что такое "Карма"?

Технически

В контексте этого модуля карма это сумма всех карм полученных через хук hook_user_karma_partial().

Модуль user_karma опрашивает другие модули на предмет того, могут ли они рассчитывать карму.
Эти модули определяют hook_user_karma_partial().
Карма пользователя будет суммой всех этих полученных карм.

Это значит, что вам нужны дополнительные модули, которые реально рассчитывают карму.

Этот модуль поставляется с:

  • user_karma_receive_vote_node
  • user_karma_receive_vote_comment
  • user_karma_give_vote
  • user_karma_write_comment (скоро!)

Эти плагины очень-очень просто написать, поэтому любой разумный запрос новых возможностей будет легко воплотить!

Как карма работает?

Например, если пользователь #99 написал 10 комментариев и они все получили голоса больше 0, карма пользователя останется положительной. Точно также, если пользователь #98 имеет 10 комментарие и они все получили голоса меньше 0, карма пользователя будет отрицательной.

Это значит, что рейтинг может быть меньше 0.

Идем дальше... работа некоторых модулей отличается и позволяет только положительные голоса (например, оценка от 1 до 10).
В таких условиях модуль также будет работать: так как карма имеет срок действия (только контент, который был создан в течении последних N дней будет использован для расчета кармы), карма пользователя в конечном счете стабилизируется.

Назначение ролей

Этот модуль управляет набором ролей и назначает их в соответствии с кармой пользователя. Есть 2 пути назначения ролей: основанный на чистом (raw) значении кармы и основанный на ранжировании пользователя (user ranking), свыше 10000. Это дает вам точность.

Виды (Views)

Этот модуль использует VotingAPI. Это значит, что вы можете использовать модуль с модулем "views".
Все, что вам нужно знать это то, что модуль добавляет один "vote" (или "entry") для каждого пользователя, где value_type это karma_points и тег - "karma".
Я использовал разные value_type потому что я не хочу, чтобы VotingAPI подсчитывал сумму, среднее и др. (Это просто не имеет смысла).

Принцип расчета кармы модулем User Karma

Модуль (версии 6.x-1.0-beta1) содержит 4 метода расчета кармы, которые нужно активировать в настройках модуля.
Если включены соотвествующие методы расчета кармы, то карма дается:

  1. Карма начисляется автору комментария за получение оценки (рейтинга) комментарием.
  2. Карма начисляется автору ноды за получение оценки (рейтинга) нодой.
  3. Карма начисляется автору ноды за публикацию ноды.
  4. Карма начисляется тому, кто дал оценку ноды или комментария.

Пользователь получит сумму всех карм, полученных каждым из активированных методов.

В настройках любого из 4х модулей можно установить такие параметры:

  • Коэффициент умножения (может быть и дробным, и отрицательным),
  • Период (в днях), в течении которого комментарии учитываются в расчете.

Метод 1. За получение оценки комментарием ("On comments")

Карма начисляется автору комментария за получение оценки (рейтинга) комментарием.

Подсчитывается общая сумма оценок (положительных и отрицательных), которые получили комментарии, опубликованые в течении указанного периода.
Полученная сумма умножается на коэффициент умножения.
Эта сумма и начисляется автору комментария.

Если коэффициент отрицательный, то все оценки поменяются на противоположные.

В версии 6.x-1.0-beta1 не учитывается опубликована нода или нет. Таким образом пользователю будет начислена карма даже за неопубликованную ноду.

Метод 2. За получение оценки нодой ("On nodes")

Карма начисляется автору ноды за получение оценки (рейтинга) нодой.

В версии 6.x-1.0-beta1 не учитывается опубликована нода или нет. Таким образом пользователю будет начислена карма даже за неопубликованную ноду.

Подсчитывается общая сумма оценок (положительных и отрицательных), которые получили ноды пользователя, опубликованые в течении указанного периода.
Полученная сумма умножается на коэффициент умножения.
Эта сумма и начисляется автору комментария.

Если коэффициент отрицательный, то все оценки поменяются на противоположные.

Метод 3. Карма за публикацию ноды ("On posting")

Карма начисляется автору ноды за публикацию ноды.

В версии 6.x-1.0-beta1 не учитывается опубликована нода или нет. Таким образом пользователю будет начислена карма даже за неопубликованную ноду.

Коэффициент умножения кармы может быть и положительным, и отрицательным, и дробным.

Метод 4. За оценку ноды или комментария ("On voting")

Карма начисляется тому, кто дал оценку ноды или комментария.

Коэффициент умножения кармы может быть и положительным, и отрицательным, и дробным.

Настройка модуля

В зависимости от того, что вы хотите получить, - будет много вариантов настройки.
Параметры которыми можно варьировать поведение модуля:

  • За какой период учитываются ноды/комментарии. Задается отдельно для каждого из методов расчета. Оценка ноды или комментария, которые не попадают в этот период (старые) не учитываются модулем.
  • Коэффициент умножения кармы. Задается отдельно для каждого из методов расчета и это позволяет создать огромное количество вариантов настроек. Для некоторых методово расчета коэффициент может быть отрицательным.
  • Карма-роли. Роли назначаются в зависимости от того, сколько кармы насчитано пользователю. Разумно распределяя права доступа для этих ролей, а также диапазон кармы для которого назначается роль, можно создать много вариантов настроек. Автор модуля рекомендует создать отдельные роли (специально для модуля User Karma), а не использовать уже существующие.

Защита от "накрутки" кармы

Вариант 1

Автор решения: Krotty@drupal.org.

Пользователи на сайте поделены на две основные группы (роли): "Не проявившие себя" и "Заслуженные".
Сразу после регистрации пользователи попадают в группу "Не проявившие себя" и не имеют права оценивать комментарии и ноды других. Оценивать могут только "заслуженные".

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

Такая схема естественно не исключает возможности протаскивания "заслуженными" своих ботов/знакомых или гнобления ими "Не проявивших себя". Но наиболее явные накрутки такого рода выявляются и очищаются парой sql-запросов раз в неделю.

Вариант 2

Можно использовать отрицательные коэффициенты умножения для методов "On posting" и "On voting" и положительные для "On comments" и "On nodes".
Таким образом карма увеличивается при получении комментариев и нод автора оценки от других пользователей, а уменьшается при публикации своих нод и оценке чужих нод и комментариев.
Остается продумать числовое значение коэффициентов, чтобы исключить быстрое получение кармы.
В сочетании с первым вариантом это даст несколько большую защиту от накруток.

Использованные материалы

Доработка модуля User Karma

Категории модулей:
Версия Drupal:
Модуль зависит от:
Модули:

Комментарии

Это, похоже "покинутый" модуль. А как насчет Userpoints Karma?

Гость | Фев 11th, 2010 в 4:43 после полудня
 
 
 

RSS-лента новостей

Dries Buytaert по-русски
]]>Русский поиск Drupal]]>

Перенос сайта из Joomla в Drupal
Перенос сайта из WordPress в Drupal

]]> Drupal - это бесплатная система управления контентом с открытым исходным кодом ]]>