Уведомление и публикация в ленту истории репутации

ЕСТЬ РЕШЕНИЕ InstantCMS 2.X

Подскажите как реализовать

#1 13 июля 2021 в 22:52

Прошу подсказать как реализовать уведомления при оценке репутации в профиле, так же не плохо бы чтобы это заносилось в ленту активности. Например я повысил или понизил репутацию пользователя а ему в уведомлениях показывается это, а то постоянно заходить в профиль и проверять не очень удобно. Думаю многим поможет эта информация. Заранее спасибо за помощь.

 

Версия движка 2.14.2

#2 16 июля 2021 в 00:47

Up

#3 16 июля 2021 в 08:27

Есть такой хук github.com/instantsoft/icms2/blob/master/system/controllers/users/actions/karma_vote.php#L58, если умеете писать код, то можете им воспользоваться, если нет, то либо начать изучение данного вопроса, либо искать того, кто вам его напишет. Галочками в админке этого не сделать.

#4 16 июля 2021 в 14:13

Есть такой хук github.com/instantsoft/icms2/blob/master/system/controllers/users/actions/karma_vote.php#L58, если умеете писать код, то можете им воспользоваться, если нет, то либо начать изучение данного вопроса, либо искать того, кто вам его напишет. Галочками в админке этого не сделать.

Loadырь

Благодарю, с горем пополам справился. Благо компонент был от Ris'a для накрутки кармы, по его аналогии сделал. 

 

Кому нужно оставляю свой «горе код», но рабочий.

...\system\controllers\users\actions\karma_vote.php

  1. <?php
  2.  
  3. class actionUsersKarmaVote extends cmsAction {
  4.  
  5. public function run($profile_id) {
  6.  
  7. if (!$this->cms_user->is_logged) {
  8. return cmsCore::error404();
  9. }
  10.  
  11. if (!$this->request->isAjax()) {
  12. return cmsCore::error404();
  13. }
  14.  
  15. $direction = $this->request->get('direction', '');
  16. $comment = $this->request->get('comment', '');
  17.  
  18. //
  19. // Проверяем валидность
  20. //
  21. $is_valid = cmsUser::isAllowed('users', 'vote_karma') &&
  22. is_numeric($profile_id) &&
  23. $this->cms_user->id != $profile_id &&
  24. in_array($direction, array('up', 'down')) &&
  25. (!$this->options['is_karma_comments'] || $comment);
  26.  
  27. if (!$is_valid) {
  28. return $this->cms_template->renderJSON([
  29. 'error' => true,
  30. 'message' => LANG_ERROR
  31. ]);
  32. }
  33.  
  34. $profile = $this->model->getUser($profile_id);
  35.  
  36. if (!$profile || $profile['is_locked'] ||
  37. !$this->model->isUserCanVoteKarma($this->cms_user->id, $profile_id, $this->options['karma_time'])) {
  38. return $this->cms_template->renderJSON([
  39. 'error' => true,
  40. 'message' => LANG_ERROR
  41. ]);
  42. }
  43.  
  44. //
  45. // Сохраняем оценку
  46. //
  47. $vote = [
  48. 'user_id' => $this->cms_user->id,
  49. 'profile_id' => $profile_id,
  50. 'points' => $direction == 'up' ? 1 : -1,
  51. 'comment' => $comment
  52. ];
  53.  
  54. $user_ids = $this->cms_user->id;
  55. $user_voted = $this->cms_user->nickname;
  56. $user_voteds = "<a title=\"$user_voted\" href=\"/users/$user_ids\">$user_voted</a>";
  57. $vote_id = $this->model->addKarmaVote($vote);
  58.  
  59. $value = $profile['karma'] + $vote['points'];
  60.  
  61. cmsEventsManager::hook('users_karma_vote', [
  62. 'profile' => $profile,
  63. 'vote' => $vote
  64. ]);
  65. $points = $vote['points'];
  66. if ($points > 0){
  67. $mess = $user_voteds . ' ' . 'оставил Вам <div class="positive_otz">ПОЛОЖИТЕЛЬНЫЙ</div> отзыв' . ' ' . 'с комментарием:' . '<blockquote class="otziv"> ' .$comment . '</blockquote> ' . 'НЕ ЗАБУДЬТЕ ЕГО ОТБЛАГОДАРИТЬ';}
  68. else
  69. {$mess = $user_voteds . ' ' . 'оставил Вам <div class="negative_otz">НЕГАТИВНЫЙ</div> отзыв' . ' ' . 'с комментарием' . '<blockquote class="otziv"> ' .$comment . '</blockquote> ';}
  70. if ($points != 0){
  71. $item = array(
  72. 'user_id' => $this->cms_user->id,
  73. 'points' => $points,
  74. 'comment' => $mess
  75. );
  76. cmsCore::getModel('users')->addKarmaVote($item);
  77.  
  78.  
  79. $messenger = cmsCore::getController('messages');
  80.  
  81. $messenger->addRecipient($profile);
  82.  
  83. $messenger->sendNoticePM(array(
  84. 'content' => $mess,
  85. 'actions' => array(
  86. 'view' => array(
  87. 'title' => 'Посмотреть отзыв',
  88. 'href' => href_to('users', $profile_id, 'karma')
  89. )
  90. )
  91. ));
  92. }
  93.  
  94. return $this->cms_template->renderJSON([
  95. 'error' => $vote_id ? false : true,
  96. 'value' => html_signed_num($value),
  97. 'css_class' => html_signed_class($value)
  98. ]);
  99.  
  100. }
  101.  
  102.  
  103. }
  104.  
  105. ?>
  106.  

 

Добавляем в ваш файл со стилями CSS

  1. .positive_otz {
  2. font-weight: 900;
  3. color: green;
  4. cursor: default;
  5. display: contents;
  6. }
  7. .negative_otz {
  8. font-weight: 900;
  9. color: red;
  10. cursor: default;
  11. display: contents;
  12. }
  13. .otziv {
  14. text-overflow: ellipsis;
  15. width: 100%;
  16. white-space: nowrap;
  17. overflow: hidden;
  18. }

 

Демонстрация:

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.