Карма из админки для версии InstantCMS 1.9

+28
2.02K
Меняем карму пользователю из админки.
Для предыдущих версий — на этой странице.

Иллюстрация


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

После строк
  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 Скролим чуток дальше строка этак 283 ± пару строк Видим 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 Отрицательные значения тоже принимаются.
Номера строк указаны с учетом ранее проделанных правок!
0
Darik Darik 13 лет назад #
все супер +1,но полностью 3 пункт у меня не зароботал
0
MrJenika MrJenika 13 лет назад #
странно, полностью файлик выглядит так:
Код PHP:
{* ================================================================================ *}
{* ======================== Карма пользователя ==================================== *}
{* ================================================================================ *}
<div class="con_heading">{$LANG.KARMA_HISTORY} - {$usr.nickname}</div>
{if $karma}
<table width="">
		{foreach key=id item=karm from=$karma}
			<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>	
 										
			</tr>
		{/foreach}
</table>
{else}
<p>{$LANG.KARMA_NOT_MODIFY}</p>
<p>{$LANG.KARMA_NOT_MODIFY_TEXT}</p>
<p>{$LANG.KARMA_DESCRIPTION}</p>
{/if}

0
fact fact 13 лет назад #
ещё бы к рейтингу на 1.9 такое проделать было бы вообще замечательно!
-1
fact fact 13 лет назад #
О! Не замел что уже появилось для рейтинга! +100500!
0
MrJenika MrJenika 13 лет назад #
да, последние две записи в этом блоге для версии 1,9 для кармы и рейтинга
0
CROSS &#12484; CROSS ツ 12 лет назад #
А сообщение юзеру должно приходить???
0
MrJenika MrJenika 12 лет назад #
За это отвечает строка 17 в выше описанном коде
Код PHP:
// Отправляем сообщение о повышении либо понижении кармы.
cmsUser::sendMessage(USER_UPDATER, $id, '<b>Ваша карма была изменена на '.$karma.' пунктов!</b>');
} 
Сейчас уже не могу проверить, но было задумано чтобы приходило. Проверьте, в нужное ли место вставлена эта строка.
0
Эд Эд 12 лет назад #
Спасибо, версия 1.9 работает отлично.
0
Санечек Санечек 12 лет назад #
1.9 полет отличный, с меня +
0
alegcool alegcool 11 лет назад #
Искал на 1.10, но нашел только это.

Кто подскажет как на 1.10. воплотить сеё чудо.

Еще от автора

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