Instant cms добавляем рейтинг и карму из админки.
Итак зачастую на сайте с Instant cms возникает надобность поощрить пользователя сайта, добавив
рейтинг
и
карму
, этого нету в стандартной сборке Instant, поэтому пользователем MrJenika добавлены изменения, позволяющие из
админки
добавлять
рейтинг
и
карму
пользователю, прямо в настройке профиля пользователя.
Этот хак работает на системе Instant cms 1.7 и на Instant cms 1.8
Добавляем рейтинг
Открываем в admin\applets\users.php ищем строку этак 190 +/- пару строк
и находим такой код:
$email = $inCore->request('email', 'str'); $group_id = $inCore->request('group_id', 'int'); $is_locked = $inCore->request('is_locked', 'int');
После этого вставляем ещё одну строку:
$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> </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) и тогда будет минусоваться от кармы и в истории будет красным цветом.
Если кому надо будет, выложу файлы которые правил.