Instant cms рейтинг и карма с админки.

Опубликовано:
Просмотров: 6057
+11
Голосов: 11

Instant cms добавляем рейтинг и карму из админки.

Итак зачастую на сайте с Instant cms возникает надобность поощрить пользователя сайта, добавив

рейтинг

и

карму

, этого нету в стандартной сборке Instant, поэтому пользователем MrJenika добавлены изменения, позволяющие из

админки

добавлять

рейтинг

и

карму

пользователю, прямо в настройке профиля пользователя.

Этот хак работает на системе Instant cms 1.7 и на Instant cms 1.8

Добавляем рейтинг

Открываем в admin\applets\users.php ищем строку этак 190 +/- пару строк

и находим такой код:

Код PHP:
  1. $login = htmlspecialchars($_REQUEST['login'], ENT_QUOTES);
  2. $nickname = htmlspecialchars($_REQUEST['nickname'], ENT_QUOTES, 'cp1251');
  3. $email = $inCore->request('email', 'str');
  4. $group_id = $inCore->request('group_id', 'int');
  5. $is_locked = $inCore->request('is_locked', 'int');

После этого вставляем ещё одну строку:

Код PHP:
  1. $rat = $inCore->request('rat','int'); //получение рейтинга из формы

Ещё ниже после такого вот запроса :

$sql = "UPDATE cms_users

SET login = '$login',

nickname = '$nickname',

email = '$email',

group_id = $group_id,

is_locked = $is_locked $pass_sql

WHERE id = $id

LIMIT 1";

dbQuery($sql) ;

Перед закрывающейся скобкой ("}")

Вставляем следующий код:

// проверяем был ли изменнён рейтинг

if (isset($rat) AND ($rat != 0)){

// Отправляем сообщение

cmsUser::sendMessage(USER_UPDATER, $id, '<b>Ваш рейтинг был изменён на '.$rat.' пунктов</b>');

$sql_hp ="UPDATE cms_users

SET rating = rating + ({$rat})

WHERE id = '$id'

LIMIT 1";

dbQuery($sql_hp) ;

}

Осталось лишь добавить необходимые поля в форму редактирования пользователя.

Скролим дальше, к форме, находим что-то подобное :

<tr>

<td valign="middle"><strong>Заблокировать аккаунт?</strong></td>

<td valign="middle"><input name="is_locked" type="radio" value="1" <?php if ($mod['is_locked']) { echo 'checked="checked"'; } ?> />

Да

<label>

<input name="is_locked" type="radio" value="0" <?php if (!$mod['is_locked']) { echo 'checked="checked"'; } ?> />

Нет</label></td>

<td>&nbsp;</td>

</tr>

и после него, но до закрывающегося тега таблицы вставляем :

<tr>

<td><strong>Изменить рейтинг на : </strong></td>

<td> <input name="rat" type="text" id="rat" style="width:50px"/> <b> пунктов</b> <td>

</tr>

ТЕПЕРЬ ДОБАВИМ ДОБАВЛЕНИЕ КАРМЫ ИЗ АДМИНКИ

все записи относятся к файлу \admin\applets\users.php пока не будет указан следующий.

//получаем текущее значение кармы для пользователя

$nowkarma = cmsUser::getKarma($id);

Видим получение переменных методом request и можно в самый конец этих request`ов дописать получение

$karma = $inCore->request('newkarma','int'); // получение числа введённого в форму

$newkarma = $karma + $nowkarma; // получение суммы кармы + число заданное админом

2.1 Скролим чуток дальше строка этак 213 +/- пару строк Видим sql запросик

$sql = "UPDATE cms_users

SET login = '$login',

nickname = '$nickname',

email = '$email',

group_id = $group_id,

is_locked = $is_locked $pass_sql

WHERE id = $id

LIMIT 1";

dbQuery($sql) ;

и уже после! него, но ДО закрывающейся фигурной скобки после этого запроса вставляем следующее :

// проверяем была ли добавлена карма пользователю в админке

if (isset($karma) AND ($karma != 0)){ // такое условия для того если кому-то захочется вписать туда ноль.

// меняем значение кармы для пользователя

$sql_new ="UPDATE cms_user_profiles

SET karma = '$newkarma'

WHERE user_id = '$id'

LIMIT 1";

dbQuery($sql_new) ;

// регистрируем это действие для истории кармы

$sql_hyst = "INSERT INTO cms_user_karma (user_id, sender_id, points, senddate)

VALUES ('$id',0, '$karma', NOW())"; // вставляем 0 для отправителя, будет использовано в истории кармы.

dbQuery($sql_hyst);

// Отправляем сообщение о повышении либо понижении кармы.

cmsUser::sendMessage(USER_UPDATER, $id, '<b>Ваша карма была изменена на '.$karma.' пунктов!</b>');

}

И тут где-то должна быть та самая закрывающаяся скобка( тут надо быть осторожным, закрывающих скобок должно быть 2 , одна от условия, другая та самая в которую мы добавили эти строки. ) .

2.2Теперь непосредственно к форме :

Скролим дальше, находим форму, находим строку Заблокировать аккаунт , перед закрывающимся тегом таблицы </table>

Вставляем новый ряд :

<tr>

<td><strong>Добавить кармы </strong>

текущее значение: <b><?php echo $nowkarma ;?> </b> </td>

<td><b><?php echo $nowkarma ;?> + </b> <input name="newkarma" type="text" id="newkarma" style="width:50px"/> <td>

</tr>

Тут уже скрипт можно проверить , он должен записывать карму в БД .

Теперь надо бы всё это отобразить в истории. (Кому не надо могут не заморачиваться).

3. Идём в пользовательскую часть : \templates\_default_\components\com_users_karma.tpl

И там уже между <tr></tr> заменяем все ячейки на

<td style="border-bottom:solid 1px silver" width="150" valign="middle">{$karm.fsenddate}</td>

{if $karm.sender_id == 0}

<td style="border-bottom:solid 1px silver" width="120" valign="middle" >{$LANG.KARMA_ADMIN}</td>

{else}

<td style="border-bottom:solid 1px silver" width="200" valign="middle"><a href="{profile_url login=$karm.login}">{$karm.nickname}</a></td>

{/if}

<td style="border-bottom:solid 1px silver" width="100" valign="middle" align="center">{$karm.kpoints}</td>

И для полного счастья добавим в languages\ru\components\users.php добавим строку (можно в конец, но до ?>):

$_LANG['KARMA_ADMIN'] ='Администрация'; // Тут подпись от кого добавлена карма.

Вроде всё. если что, пишите, постараюсь ответить.

P.S Чуть не забыл ,можно писать отрицательные числа (-10) и тогда будет минусоваться от кармы и в истории будет красным цветом.

Если кому надо будет, выложу файлы которые правил.

Комментарии (2)
джин #
: 0
Спасибо. Если можно, то выложите.
Максим Шорин #
: 0
Очень давно реализовал уже это, так как вешь очень нужная и полезная. не будешь же каждый раз в базу лезть =)

Голосуем

Самый нужный компонент