Карма из админки (Дополнено 13.01.11)

+27
1.9K
(Исправлено одно из условий, вместо OR надо было написать AND )
Привет, на досуге помогал знакомому, столкнулся с InstantCms впервые.
Стояла задача допилить возможность добавления кармы из Админки. Не спрашивайте зачем, надо.
И собственно к делу: если кому надо, могу выложить свою наработку и полную инструкцию по "прикрутке".
Пишите в комменты, будет хоть одно пожелание, выложу.
Иллюстрация

Для версии 1.7
Скачать можно тут
1. Для начала напишу простенькую функцию которая получает текущую карму пользователя (скорей всего функция есть где-то в недрах cms но моё знакомство с ней слишком кратко). Так что кто знает, может ткнуть в файл.
Да, функция действительно есть, поэтому я заменил немного код .

Предупреждение!!! Делалось для админки, поэтому о безопасности как-то не думалось.
Для простоты использования я поместил это функцию в \admin\applets\users.php (все пути идут от корня) где-то в самом начале, а точнее после 30-й строки.

Далее все записи относятся к файлу \admin\applets\users.php пока не будет указан следующий.
  1.  
  2. //получаем текущее значение кармы для пользователя
  3. $nowkarma = cmsUser::getKarma($id);
  4.  
2. Следующий пункт это добавление в БД записи.
После вставки функции и её вызова ищем строку 193 ± пару строк

После строк
  1.  
  2. if ($do == 'update'){
  3. if(isset($_REQUEST['id'])) {
  4. $id = (int)$_REQUEST['id'];
  5. ......
Видим получение переменных методом request и можно в самый конец этих request`ов дописать получение

  1.  
  2. $karma = $inCore->request('newkarma','int'); // получение числа введённого в форму
  3. $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) ;

и уже после! него, но ДО закрывающейся фигурной скобки после этого запроса вставляем следующее :
  1.  
  2. // проверяем была ли добавлена карма пользователю в админке
  3. if (isset($karma) AND ($karma != 0)){ // такое условия для того если кому-то захочется вписать туда ноль.
  4.  
  5. // меняем значение кармы для пользователя
  6. $sql_new ="UPDATE cms_user_profiles
  7. SET karma = '$newkarma'
  8. WHERE user_id = '$id'
  9. LIMIT 1";
  10. dbQuery($sql_new) ;
  11.  
  12. // регистрируем это действие для истории кармы
  13. $sql_hyst = "INSERT INTO cms_user_karma (user_id, sender_id, points, senddate)
  14. VALUES ('$id',0, '$karma', NOW())"; // вставляем 0 для отправителя, будет использовано в истории кармы.
  15. dbQuery($sql_hyst);
  16.  
  17.  
  18. // Отправляем сообщение о повышении либо понижении кармы.
  19. cmsUser::sendMessage(USER_UPDATER, $id, '<b>Ваша карма была изменена на '.$karma.' пунктов!</b>');
  20. }
  21.  
И тут где-то должна быть та самая закрывающаяся скобка( тут надо быть осторожным, закрывающих скобок должно быть 2, одна от условия, другая та самая в которую мы добавили эти строки. ) .

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

Скролим дальше, находим форму, находим строку Заблокировать аккаунт, перед закрывающимся тегом таблицы </table>
Вставляем новый ряд :
  1.  
  2. <tr>
  3. <td><strong>Добавить кармы </strong>
  4. текущее значение: <b><?php echo $nowkarma ;?> </b> </td>
  5. <td><b><?php echo $nowkarma ;?> + </b> <input name="newkarma" type="text" id="newkarma" style="width:50px"/> <td>
  6. </tr>
Тут уже скрипт можно проверить, он должен записывать карму в БД .

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

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

И там уже между <tr></tr> заменяем все ячейки на
  1.  
  2. <td style="border-bottom:solid 1px silver" width="150" valign="middle">{$karm.fsenddate}</td>
  3. {if $karm.sender_id == 0}
  4. <td style="border-bottom:solid 1px silver" width="120" valign="middle" >{$LANG.KARMA_ADMIN}</td>
  5. {else}
  6. <td style="border-bottom:solid 1px silver" width="200" valign="middle"><a href="{profile_url login=$karm.login}">{$karm.nickname}</a></td>
  7. {/if}
  8. <td style="border-bottom:solid 1px silver" width="100" valign="middle" align="center">{$karm.kpoints}</td>
  9.  
И для полного счастья добавим в languages\ru\components\users.php добавим строку (можно в конец, но до ?>):

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

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

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

Скачать
0
Greener Greener 13 лет назад #
Предварительно спасибо! ) Только недавно об этом думал... Не сегодня, но скоро может понадобиться. А можно так сделать, чтобы исключительно из админки редактировать карму, а для пользователей закрыть эту опцию?
+1
Anabiotick Anabiotick 13 лет назад #
Странно, что еще никто не отозвался. Вместе с подарками и наградами это была бы прекрасная возможность дополнительно поощрять пользователей. Выкладывайте если не жалко, ждем.
0
Умные Интернет Разработки Умные Интернет Разработки 13 лет назад #
Очень удобно, вот только в истории кармы что будет? Как я догадываюсь, то ничего. А в целом очень полезная вещь, ставлю +
+1
MrJenika MrJenika 13 лет назад #
это предусмотрено ,правда придётся чуть больше файлов править но всё будет замечательно:) Сегодня вечером выложу под скрином инструкцию
0
Anabiotick Anabiotick 13 лет назад #
Раз из админки, то можно на главного админа и валить :)
+1
MrJenika MrJenika 13 лет назад #
Почти так и есть. Можно дописать что угодно.
0
Pampa Pampa 13 лет назад #
Полезная вещь, для тех случаев, когда идет активное администрирование и взаимодействие с пользователями. Для моего проекта - очень нужно. Заплюсовал.
0
lezginka.ru lezginka.ru 13 лет назад #
тоже + нужная вещь, только надо упростить установку для чайников
+4
Fuze Fuze 13 лет назад #
метод, возвращающий значение кармы пользователя
Код PHP:
$user_karma = cmsUser::getKarma($user_id);
+3
MrJenika MrJenika 13 лет назад #
Спасибо, сейчас исправлю.
0
Pampa Pampa 13 лет назад #
Спасибо! Поставил, все работает. Отличный полезный инструмент! Удачи!
0
Pampa Pampa 13 лет назад #
"Если кому надо будет, выложу файлы которые правил." Если можно, выложи, плиз. Для чайника.
-5
13 лет назад #
"Карма" в принципе на фиг особо не нужна, все ровно, за подарки плата "Рейтинг"
+2
MrJenika MrJenika 13 лет назад #
Вам не нужна, мне пригодилась. К тому же из-за "тех же" причин мне понадобилось "брать" плату за подарки из кармы.
-3
13 лет назад #
"Карма" это немного не то, чем расплачиваются за подарки :))) Хотя если сделать функцию "Украсть подарок у другого пользователя", тогда да, "Карма" должна сниматься :))) Или например еще вариант - "Убить пользователя" :))) Тоже карму можно снимать смело :))
0
Keep Keep 13 лет назад #
А есть тоже самое, только с рейтингом?
+1
MrJenika MrJenika 13 лет назад #
у меня нету, но можно переделать, там ещё проще, не надо будет записывать в историю ничего.
0
Keep Keep 13 лет назад #
Можете переделать, очень нужно?
+1
MrJenika MrJenika 13 лет назад #
на выходных, раньше никак :(
+1
MrJenika MrJenika 13 лет назад #
http://instantcms.ru/blogs/zapiski-studenta/reiting-iz-adminki.html
0
Keep Keep 13 лет назад #
Большое спасибо!

Еще от автора

Карма из админки для версии InstantCMS 1.9
Меняем карму пользователю из админки. Для предыдущих версий - на этой странице.
Рейтинг из админки для версии InstantCMS 1.9
For Darik5. Рейтинг из админки для версии 1.9 Для предыдущих версий (1.7 - 1.8 )прошу сюда: Вот вам грязный хак:
Рейтинг из админки
Допилено по просьбе одного из посетитлей этого сайта. Рейтинг из админки для версии 1.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.