Установка скрипта «Карма пользователя»

Введение

Благодарим за покупку скрипта! Установка скриптового решения займет некоторое время. Пожалуйста, внимательно читайте инструкции и старайтесь следовать всем рекомендациям.

Скрипт "Кармы" призван для того, чтобы в реальном смысле сопоставить права деятельности пользователя с его заслугами перед вашим проектом, поощряя или же наоборот, ограничивая в действиях на сайте.
Всем известно, что в системе uCoz есть функция "Репутации пользователя". Конечно, всем приятно, чтобы заслуги на сайте поощрялись и можно было на досуге просмотреть свои заслуженные "плюсики". С помощью нестандартных решений завсегдатаи системы создают достаточно необычные решения отображая ту или иную информацию в зависимости от уровня репутации, но увы – это максимум, которого чаще всего недостаточно.

Если вы уважаете своих пользователей и желаете по настоящему порадовать их и поощрить за активность на своем сайте – наш скрипт вам в этом поспособствует. Вы сможете автономно поменять права пользователю, расширив или уменьшив их на стороне системы, переведя в специально созданную вами группу сразу же по достижению определенного числа оценок.
Скрипт работает на основе оценок комментариев авторизированных пользователей, а также позволяет выставлять оценку за добавленный материал.

    Дополнительные возможности скрипта:
  • карма засчитывается лишь для авторизированных пользователей сайта;
  • карма всегда доступна в личном аккаунте для всех остальных пользователей сайта;
  • карму может изменять как угодно пользователь в группе с соответствующими правами;
  • скрипт кармы полностью безопасен, все запросы сведены к минимуму;
  • продумана защита от повторной оценки материалов пользователя. Также в качестве дополнительной защиты о накрутки кармы используется md5-хэш и набор символов (например "соль"), известный ограниченному кругу лиц.

    Требования к установке:
  • активированное PHP;
  • использование базового API.

Первый шаг: активация API и PHP


Активация API

Для работы скрипта, нам необходимо включить возможность использования API, сделать это вы можете перейдя в Панель управления » Верхний-бар: Настройки » Общие настройки.
Почти в самом низу страницы найдите опцию "Разрешить использование API", установите напротив неё галочку, затем прокрутите страницу вниз и сохраните изменения.
Примечание: поле "API key" вы можете активировать. В этом случае система сгенерирует специальный уникальный ключ о применении которого речь пойдёт ниже. В случае, если для вас нет разницы использовать API key или не использовать его – можно оставить неактивным.


Активация PHP

Убедитесь, что на вашем сайте активна услуга PHP. Для этого перейдите на главную страницу панели управления и обратите внимание на правую часть страницы. В случае наличия активной услуги вы увидите текст "PHP детали".
– перейдите к следующему шагу установки, PHP-услуга у вас активна. Если такой текст отсутствует, значит услуга PHP отключена или просрочена. Для подключения PHP необходимо оплатить премиум пакет, включающий возможность использования PHP-скриптов, либо заказать данную услугу отдельно.

Второй шаг: загрузка скриптов на FTP PHP


Этап 1. Установка пароля

Если у вас задан пароль к FTP PHP, сразу же переходите к следующему этапу.
Перейдите на главную страницу панели управления вашим сайтом, в правой верхней части нажмите на ссылку «PHP детали».
В открывшемся окне кликните на ссылку: «Пароль не установлен.
Мы попадем на страницу установки пароля на FTP PHP. Заполните поля, продолжайте следовать инструкциям системы.

Этап 2. Подключение к PHP FTP серверу

После установки пароля, скачайте FTP-клиент, рекомендуем бесплатный FTP клиент FileZilla. После установки программы, в верхней части вводим параметры подключения:
  • Сервер: s2000.ucoz.net
  • Логин (FTP login): введите свой логин, который указан в меню "PHP детали"
  • Пароль: пароль который вы ввели ранее в специальном разделе

После заполнения полей нажмите на кнопку «Быстрое соединение».


Этап 3. Загрузка скриптов на PHP FTP сервер

После успешного подключения вы увидите каталог под именем «scripts» в правой части окна программы. Обязательно переходим в этот каталог двойным кликом по нему.

Теперь загрузите в этот каталог папку из архива со скриптом «karma». Загрузить легко, просто перетащите эту папку в правый диалог (где отображаются каталоги и файлы хранящиеся на сервере).
Узнать статус передачи файлов вы можете в окне статуса, которое находится в нижней части программы, там отображаются файлы которые ожидают передачи и те, которые не удалось передать, в частности которые были успешно переданы.

Третий шаг: установка кода


Перейдите в Панель управления » Управление дизайном » Глобальные блоки: Верхняя часть сайта, в самый верх разместите код:
<script type="text/javascript">
    window.entries = [];
    <?if($PAGE_ID$ == "entry" || $PAGE_ID$ == "usercomments")?>window.entries.push('$MODULE_ID$/$ID$/$UID$');<?endif?>
	window.hashes = [];
    window.users = [];
</script> 
и сохраните изменения.

Если у вас нет такого шаблона, создайте глобальный блок и вставьте в него код, а затем разместите этот глобальный блок во всех шаблонах "Страница материала и комментариев к нему", в том числе и в "Общий вид страниц форума", ОБЯЗАТЕЛЬНО сразу после открывающего тега <body>.
Затем перейдите в Панель управления » Управление дизайном » Глобальные блоки: Нижняя часть сайта, и в самый низ разместите код из файла:
<script type="text/javascript">
    <?if($ADMIN_BAR$ && $GROUP_ID$ == "4")?>
	(function() {
	    var tmp;
	    tmp = setInterval(function() {
		if ($('.uadm-comments .uadm-subl').length > 0) {
		    $('.uadm-comments .uadm-subl').append('<div id="karmaButton" style="height: 28px;padding: 0 17px 0 12px;cursor:pointer;color:#000" onclick="new _uWnd(\'karmaWindow\',\'Настройка\',400,160,{align:\'left\',closeonesc:1,min:0,max:0},{url:\'/php/karma/karma.php?config=true\'});return false;">Настройка кармы</div>');
		    clearInterval(tmp);
		}
	    }, 100);
	})();
    <?endif?>
	<?if($PAGE_ID$ == "entry" || $PAGE_ID$ == "usercomments")?>
	    <?if($RATE_FORM$)?>
		(function() {
		    if (typeof ustarrating != 'function') return;
			ustarrating2 = ustarrating;
		    ustarrating = function(id, mark) {
			$.post('/php/karma/karma.php', {id: '$UID$', karma: mark-3, entry: '$MODULE_ID$/$ID$', hash: window.hashes['$MODULE_ID$/$ID$/$UID$']});
			ustarrating2(id, mark);
		    }
			})();
    $(document).ready(function() {
	if ($('#rt$ID$').length) {
	    var onChange = $('#rt$ID$').attr('onChange').replace('disabled=true;', 'disabled=true;$.post("/php/karma/karma.php",{id: "$UID$", karma: this.options[this.selectedIndex].value-3, entry: "$MODULE_ID$/$ID$", hash: window.hashes["$MODULE_ID$/$ID$/$UID$"]});');
	    $('#rt$ID$').attr('onChange', onChange);
	}
    });
    <?endif?>
	if(typeof window.entries != 'undefined') $.post('/php/karma/karma.php', {entries: window.entries.join(',')}, function(data) {
	    window.hashes = data;
	}, 'json');
    <?endif?>
</script>
и сохраните изменения.

Если у вас нет такого шаблона, создайте глобальный блок, вставьте в него код, затем разместите этот глобальный блок во всех шаблонах "Страница материала и комментариев к нему", в том числе и в "Общий вид страниц форума", ОБЯЗАТЕЛЬНО сразу перед закрывающим тегом </body>.
Далее перейдите в Панель управления » Управление дизайном » Комментарии: Вид комментариев, найдите код оценки комментария (примерно следующий код):
<?if($GOOD_COMMENT_URL$)?>
<a href="$GOOD_COMMENT_URL$"><img alt="" src="http://s701.uweb.ru/img/icon/thumbu2.png" title="Хороший пост" style="margin: 0 4px;vertical-align: middle;"></a>
<?if($COMMENT_RATING$ > 0)?>
$COMMENT_RATING$
<?else?>
$COMMENT_RATING$
<?endif?>
<a href="$BAD_COMMENT_URL$"><img alt="" src="http://s701.uweb.ru/img/icon/thumbd2.png" title="Плохой пост" style="margin: 0 4px;vertical-align: middle;"></a>
<?else?>
<img alt="" src="http://s701.uweb.ru/img/icon/thumbu2_.png" title="Хороший пост" style="margin: 0 4px;vertical-align: middle;opacity: .5;">
<?if($COMMENT_RATING$ > 0)?>
$COMMENT_RATING$
<?else?>
$COMMENT_RATING$
<?endif?>
<img alt="" src="http://s701.uweb.ru/img/icon/thumbd2_.png" title="Плохой пост" style="margin: 0 4px;vertical-align: middle;opacity: .5;">
<?endif?>
и замените данный код на:
<script type="text/javascript">
    // В текущем окне:
    //window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9))?>';
    // В новом окне (простом):
    //window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9,strpos($PROFILE_URL$,'" target="')-strpos($PROFILE_URL$,"index/8-")-8))?>';
    // В новом окне (оформленном):
    window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9,strpos($PROFILE_URL$,"','up")-strpos($PROFILE_URL$,"index/8-")-8))?>';
    window.entries.push('$MODULE_ID$/comments/$ID$/'+window.users['$USERNAME$']);
</script>
<?if($GOOD_COMMENT_URL$)?>
<a href="javascript://" rel="nofollow" onclick="$.ajax({url: '/index/60-$ID$-1', dataType: 'xml', success: function(data) {
var js = $(data).find('cmd[p=\'js\']').text();
$.globalEval(js);
if(js.indexOf('Оценка засчитана')>-1) $.post('/php/karma/karma.php', {id: window.users['$USERNAME$'], karma: 1, entry: '$MODULE_ID$/comments/$ID$', hash: window.hashes['$MODULE_ID$/comments/$ID$/'+window.users['$USERNAME$']]});
}});return false;"><img src="/.s/img/icon/thumbu.png" align="absmiddle" border="0" title="+1"></a>
<?else?>
<img src="/.s/img/icon/thumbu_.png" align="absmiddle" border="0">
<?endif?>
<b id="comrat$ID$"<?if($COMMENT_RATING$<0)?>class="myWinError"><?else?><?if($COMMENT_RATING$=0)?>style="color:gray;"><?else?>class="myWinSuccess">+<?endif?><?endif?>$COMMENT_RATING$</b>
<?if($BAD_COMMENT_URL$)?>
<a href="javascript://" rel="nofollow" onclick="$.ajax({url: '/index/60-$ID$-2', dataType: 'xml', success: function(data) {
var js = $(data).find('cmd[p=\'js\']').text();
$.globalEval(js);
if(js.indexOf('Оценка засчитана')>-1) $.post('/php/karma/karma.php', {id: window.users['$USERNAME$'], karma: -1, entry: '$MODULE_ID$/comments/$ID$', hash: window.hashes['$MODULE_ID$/comments/$ID$/'+window.users['$USERNAME$']]});
}});return false;"><img src="/.s/img/icon/thumbd.png" border="0" align="absmiddle" title="-1"></a>
<?else?><img src="/.s/img/icon/thumbd_.png" align="absmiddle" border="0"><?endif?>
При этом, обратите внимание в этом коде на три строчки: в зависимости от того, в каком окне открывается профиль, надо использовать только одну из них, а остальные закомментировать (или удалить):
    // В текущем окне:
    //window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9))?>';
    // В новом окне (простом):
    //window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9,strpos($PROFILE_URL$,'" target="')-strpos($PROFILE_URL$,"index/8-")-8))?>';
    // В новом окне (оформленном):
    window.users['$USERNAME$'] = '<?(substr($PROFILE_URL$,strpos($PROFILE_URL$,"/index/8-")+9,strpos($PROFILE_URL$,"','up")-strpos($PROFILE_URL$,"index/8-")-8))?>';
    window.entries.push('$MODULE_ID$/comments/$ID$/'+window.users['$USERNAME$']);
После чего перейдите в Панель управления » Управление дизайном » Пользователи: Персональная страница пользователя, и разместите следующий код в то место, где хотите видеть отображение вывода кармы пользователя:
<script type="text/javascript">
    var getthiskarm;
    (function() {
	getthiskarm = function() {
	    $('#karmasbm').attr('src','/.s/img/wd/1/ajaxs.gif');
	    $.post('/php/karma/karma.php', $('#karmaform').serialize(), function(data) {
		$('#newKarma').val(data);
		$('#karmasbm').attr('src','/.s/img/icon/ok.png');
	    }, 'json');
	};
	document.write('<div id="karma"></div>');
	$.post('/php/karma/karma.php', {users: $_USER_ID$}, function(data) {
	    if (data == null) return;
		data = data['$_USER_ID$'];
	    $('#karma').html('<div class="udtb"><div class="udtlb">Карма:</div> <?if($MODER_PANEL$)?><form id="karmaform"><input type="hidden" name="id" value="$_USER_ID$"><input type="text" name="newKarma" id="newKarma" value="' + data + '" class="manFlaName" style="width:80px;"><img align="absmiddle" style="cursor:pointer;margin-left:5px;" src="/.s/img/icon/ok.png" id="karmasbm" onclick="getthiskarm();return false;"></form><?else?><span class="karma">' + data + '</span><?endif?></div>');
	}, 'json');
    })();
</script>

Четвёртый шаг: настройка и использование


Настройка управления изменения кармы.

Откройте текстовой файл allow.txt в папке karma (которую мы загружали на FTP PHP), и укажите в нём ID-пользователя(ей), которым разрешено изменять настройки кармы. Каждый ID нужно прописывать с новой строки.
Определить ID-пользователя можно перейдя в Панель управления » Пользователи: Список пользователей. На открывшейся странице, в левой части контента, будет расположен столбец ID, нижние цифры и есть нужные нам индентификаторы.
Теперь у пользователя(ей), которых вы указали, появится возможность использовать админ-панель кармы расположенную в юзер-баре администратора.

Создание бота.

Нам нужно создать бота, который будет выполнять переводы из группы в группу. Перейдите в Панель управления » Пользователи » Пользователи: Добавить пользователя.
На открывшейся странице вводим логин бота (например, Bot), пароль скопируйте в буфер обмена (выделите пароль и зажмите клавиши CTRL и C), группу устанавливаем "Администраторы", имя и почту указываем любое, на свое усмотрение. Далее, зайдите на FTP PHP, в папке "karma" найдите файл "bot.txt", откройте его в любом текстовом редакторе и укажите в нём логин и пароль бота. Логин и пароль должны быть расположены таком виде:
  • логин бота
  • пароль бота

Ключ базового API.

В том случае, если вы используете ключ API, откройте текстовой файл apikey.txt в папке karma (которую мы загружали на FTP PHP), и укажите в нем ключ (без пробелов и переносов строк).

Информация о настройках в админ-панели кармы


  • Использовать функцию кармы – эта настройка позволяет включить или выключить функцию кармы. Если вы деактивируете этот пункт, то скрипт кармы перестанет засчитываться и не будет отображаться на страницах сайта, то есть один раз отключив (временно), вам больше не придётся "возиться" с кодами кармы в шаблонах.

  • Правила смены группы – самая важная настройка. Перед использованием этого скрипта вам будет необходимо создать группы с нужными правами. Это необходимо для того, чтобы созданный бот смог переводить пользователей набравших определенный уровень кармы в соответствующие группы.
    Формат правила: GID:MINIMAL, где GID – айди группы, MINIMAL – минимальное значение кармы. Пример: 2:10 – означает, если карма пользователя достигнет 10, то пользователь перейдёт в группу с ID, равным 2 ("Проверенные").
    Например, владелец сайт посвященного популярной компьютерной игре сможет создать правило, которое реализует систему баллов на его сайте. Комментируя материалы, пользователи сумеют продвигаться вперед и набирать все большее количество баллов. За 50 баллов будет совершен перевод в группу "Воин", правило будет выглядеть следующим образом: 2:50 — где просто указано, что пользователь с кармой 50 или выше перейдет в группу с ID равным 2.

    Или же возможно владельцу сайта посвященного копирайтингу необходимо выделить самых лучших авторов. Например, при наличии кармы в 90 баллов пользователя необходимо переводить в специально созданную группу "Профи". Правило будет выглядеть следующим образом: 2:90 — для данной группы возможно открыть доступ для определенных страниц, модулей и снять прочие ограничения на системном уровне.
    Также вы можете задать правило лишь с ограничениями. Например при количестве отрицательной кармы в -70 переводить пользователя в группу с запретом на комментирование материалов "Нарушители" с ID 8. Правило в этом случае такое: 8:-70
    Перевести пользователя в группу с расширенными правами для просмотра некоторых страниц, модулей и т.д., наоборот урезать права за отрицательные оценки или же просто фиксировать количество оценок за материалы и комментарии, решать только вам. Скрипт очень гибок и не требует каких-либо специальных условий, кроме одного: помните, максимальное количество групп пользователей в системе: 20. Поэтому количество правил для перевода также будет ограничено.

    Важно: не используйте для регулировки те группы, которые имеют административные права (то, что выделено красным в настройке группы), т.к. в эти группы автоматического переноса не будет (он возможен только в панели управления сайтом - таково ограничение системы). В частности, автоматический перенос в группу "Администраторы", или "Модераторы" невозможен. Проще говоря, создайте группу, настройте её и попробуйте в профиле пользователя (на сайте, не в админке!) перенести его в эту группу. Если получится – значит, автоматический перенос возможен и эту группу использовать можно.
    Минимальные и максимальные значения кармы: -9223372036854775808 и 9223372036854775807 соответственно (64-bit signed integer).

    Карма вычисляется следующим образом:

    • авторизованный пользователь ставит оценку за комментарий – автор комментария получает либо +1, либо -1 к карме, в зависимости от указанной оценки.
    • авторизованный пользователь ставит оценку за материал – автор материала получает к карме число, вычисляемое по формуле "mark минус 3", где mark - оценка за материал (от 1 до 5). То есть, например, за оценку "отлично", автор материала получит +2 к карме, за "удовлетворительно" - 0, за "плохо" – -1. Эи параметры вы можете изменить.
    • После оценки md5-хэши - md5($entry . $myID) – записываются в базу скрипта. Таким образом, повторно с теми же параметрами на карму нельзя повлиять. При расхождении присланного хэша и хэша, вычисленного на основании пришедших данных – карма не засчитывается. "Соль" не позволяет подобрать хэш.
    • Администратор может изменять настройки функции кармы в админ-баре (выпадающее меню "Управление" и в самом низу пункт "Настройка кармы"). Доступ к этой настройке определяется в файле "allow.txt", который расположен в папке karma на FTP PHP.

  • Группы, на которые карма не действует – эта настройка позволяет не применять правила смены группы у введенных групп. Вводить каждый ID нужно с новой строки.
    Определить ID-группы можно перейдя в Панель управления » Пользователи: Группы пользователей. На открывшейся странице, в левой части контента, будет расположен столбец ID, нижние цифры и есть нужные нам индентификаторы.
  • Пользователи, на которых карма не действует – эта настройка позволяет не применять правила смены группы, то есть если у нас выставлено условие: 2:50 (при достижении 50 пунктов кармы, перевод в группу с ID 2 ("Проверенные")) – правило не будет срабатывать для указанного пользователя, эта настройка особенна полезна для управляющих групп. Вводить каждый ID нужно с новой строки.
    Определить ID-пользователя можно перейдя в Панель управления » Пользователи: Список пользователей. На открывшейся странице, в левой части контента, будет расположен столбец ID, нижние цифры и есть нужные нам индентификаторы.
  • Администраторы кармы – эта настройка позволяет установить администраторов кармы, которые смогут редактировать в профиле пользователя карму. Как правило, обычно указываются группы модераторов (ID – 3) и администраторов (ID – 4). Определить ID-группы можно перейдя в Панель управления » Пользователи: Группы пользователей. На открывшейся странице, в левой части контента, будет расположен столбец ID, нижние цифры и есть нужные нам индентификаторы.
    Пользователь, который имеет права администратора или модератора, а также указанный в настройках кармы как "Администратор кармы", сможет изменить карму на любую.


Установка завершена. Если у вас возникли вопросы, которые не затрагивались в документации, спрашивайте в комментариях к товару.