Уведомления об ответе на ваш комментарий на сайте.

Instantcms2.2.0 Рассылка уведомлений об ответе на комментарий.

#1 20 марта 2015 в 16:47
Сколько тут люди не просили сделать уведомления об ответе в PM — решения так и не нашел. Поэтому пришлось допилить самому.
Итак, нам потребуется доработать всего три файла:
\system\controllers\comments\hooks\user_notify_types.php
\system\controllers\comments\frontend.php
\system\languages\ru\controllers\comments\comments.php

В файле \system\controllers\comments\hooks\user_notify_types.php просто стираем строку 'options'. Получается так:
  1. <?php
  2.  
  3. class onCommentsUserNotifyTypes extends cmsAction {
  4.  
  5. public function run(){
  6.  
  7. return array(
  8. 'comments_new' => array(
  9. 'title'=>LANG_COMMENTS_NOTIFY_NEW
  10. ),
  11. 'comments_reply' => array(
  12. 'title'=>LANG_COMMENTS_NOTIFY_REPLY,
  13.  
  14. )
  15. );
  16.  
  17. }
  18.  
  19. }
  20.  
В файле \system\controllers\comments\frontend.php изменяем функцию notifyParent.

  1.  
  2. public function notifyParent($comment, $parent_comment){
  3.  
  4. if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; }
  5.  
  6. $messenger = cmsCore::getController('messages');
  7.  
  8. $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}";
  9.  
  10. $notice = array(
  11.  
  12. 'content' => sprintf(LANG_COMMENTS_REPLY),
  13. 'actions' => array(
  14. 'view' => array(
  15. 'title' => LANG_SHOW,
  16. 'href' => href_to( $page_url )
  17. ),));
  18.  
  19. if (!$is_guest_parent){
  20. $messenger->addRecipient($parent_comment['user_id']);
  21. $messenger->sendNoticePM($notice,'comments_reply');
  22. }
  23.  
  24. if ($is_guest_parent){
  25. $letter_data['nickname'] = $parent_comment['author_name'];
  26. $to = array('name' => $parent_comment['author_name'], 'email' => $parent_comment['author_email']);
  27. $letter = array('name' => 'comments_reply');
  28. $messenger->sendEmail($to, $letter, $notice);
  29. }
  30.  
  31. }
  32.  
В файле \system\languages\ru\controllers\comments\comments.php добавляем строку
  1. define('LANG_COMMENTS_REPLY', 'На ваш комментарий ответили. Ответ выделен рамкой');
Потом идем в настройки профиля на сайте и выставляем получение уведомлений об ответак на комментарии "на сайте", вот так:
В результате приходят вот такие уведомления:

__________________________________

Если кому-нибудь в окне уведомления недостаточно маленького крестика в углу, а нужна глобальная кнопка "Закрыть" — в файл \system\languages\ru\controllers\comments\comments.php добавляем строку:

  1. define('LANG_TRACK_STOP', 'Закрыть');
а функцию notifyParent дополняем так:
  1. public function notifyParent($comment, $parent_comment){
  2.  
  3. if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; }
  4.  
  5. $messenger = cmsCore::getController('messages');
  6.  
  7. $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}";
  8.  
  9. $notice = array(
  10.  
  11. 'content' => sprintf(LANG_COMMENTS_REPLY),
  12. 'actions' => array(
  13. 'view' => array(
  14. 'title' => LANG_SHOW,
  15. 'href' => href_to( $page_url )
  16. ),
  17. 'stop' => array(
  18. 'title' => LANG_TRACK_STOP,
  19. 'controller' => $this->name,
  20. 'action' => 'track_stop',
  21. 'params' => array($data['target_controller'], $data['target_subject'], $data['target_id']),
  22. ));
  23.  
  24. if (!$is_guest_parent){
  25. $messenger->addRecipient($parent_comment['user_id']);
  26. $messenger->sendNoticePM($notice,'comments_reply');
  27. }
  28.  
  29. if ($is_guest_parent){
  30. $letter_data['nickname'] = $parent_comment['author_name'];
  31. $to = array('name' => $parent_comment['author_name'], 'email' => $parent_comment['author_email']);
  32. $letter = array('name' => 'comments_reply');
  33. $messenger->sendEmail($to, $letter, $notice);
  34. }
  35.  
  36. }
В результате получается такое уведомление:


В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной, не содержит никакой информации и просто отправляет на ответ.
Если кто сможет добавить в окно уведомления ник ответившего и информацию на какой странице (заголовок страницы) — буду очень признателен.
#2 20 марта 2015 в 20:02
Переключился полностью на нехакающие )))) решения, а так конечно здорово. Слово разработчикам, делов то тут, ну или поглядим как без ножа можно этот момент порешать.
#3 20 марта 2015 в 20:38
PIN,
Если честно, я тоже не люблю различных доработок кода не от создателя CMS. При любом обновлении именно в месте хака, как правило, возникают проблемы. Но уведомления на сайте — вещь нужная.
Матроскин интересовался по этому поводу — ему никто ничего не ответил.
Если разработчики озаботятся этим вопросом — огромный им респект!
#4 25 октября 2015 в 16:45
Отличная штука, спасибо!
#5 14 ноября 2015 в 17:25
После обновления до 2.3 перестало работать, увы(
#6 15 ноября 2015 в 13:47

После обновления до 2.3 перестало работать, увы(

Dimon

Конечно перестало. Надо всё заново сделать. Файлы при обновлении заменяются.

На всякий случай сделал уведомление слегка более информативным.
Итак, по порядку:
1. В файле \system\controllers\comments\hooks\user_notify_types.php просто стираем строку 'options'. Получается так:
  1. <?php
  2.  
  3. class onCommentsUserNotifyTypes extends cmsAction {
  4.  
  5. public function run(){
  6.  
  7. return array(
  8. 'comments_new' => array(
  9. 'title'=>LANG_COMMENTS_NOTIFY_NEW
  10. ),
  11. 'comments_reply' => array(
  12. 'title'=>LANG_COMMENTS_NOTIFY_REPLY,
  13.  
  14. )
  15. );
  16.  
  17. }
  18.  
  19. }
  20.  
2, В файле \system\controllers\comments\frontend.php изменяем функцию notifyParent.


  1.  
  2. public function notifyParent($comment, $parent_comment){
  3.  
  4. if ($comment['user_id'] && ($comment['user_id'] == $parent_comment['user_id'])) { return; }
  5.  
  6. $messenger = cmsCore::getController('messages');
  7. $page_url = href_to($comment['target_url']) . "#comment_{$comment['id']}";
  8. $notice = array(
  9.  
  10. 'content' => sprintf (LANG_COMMENTS_REPLY, mb_substr($parent_comment['content'], 0, 30),
  11. $comment['user_nickname'], mb_substr($comment['content'], 0, 30 )),
  12. 'actions' => array(
  13. 'view' => array(
  14. 'title' => LANG_SHOW,
  15. 'href' => href_to( $page_url )
  16. ),));
  17.  
  18. if (!$is_guest_parent){
  19. $messenger->addRecipient($parent_comment['user_id']);
  20. $messenger->sendNoticePM($notice,'comments_reply');
  21. }
  22.  
  23. if ($is_guest_parent){
  24. $letter_data['nickname'] = $parent_comment['author_name'];
  25. $to = array('name' => $parent_comment['author_name'], 'email' => $parent_comment['author_email']);
  26. $letter = array('name' => 'comments_reply');
  27. $messenger->sendEmail($to, $letter, $notice);
  28. }
  29.  
  30. }
  31.  
3, В файле \system\languages\ru\controllers\comments\comments.php добавляем строку
  1.  
  2. define('LANG_COMMENTS_REPLY', 'На ваш комментарий <b style="color:green;" >"%s..."</b> пользователь <b style="color:blue;" >%s</b> ответил: <b style="color:green;" >"%s..."</b>. Ответ выделен рамкой');
  3.  
4, Потом идем в настройки профиля на сайте и выставляем получение уведомлений об ответак на комментарии "на сайте", вот так:
Иллюстрация
Всё. Имеем вот такие уведомления о комментариях:

Можно, конечно, было нагородить что-то типа "В теме обсуждения блога бла-бла-бла пользователь такой-то ответил на Ваш комментарий...", но мне кажется, что так будет понятнее.
#7 15 ноября 2015 в 18:46



Dimon
Не приходит уведомление на почту (хотя установил уведомлять по почте и на сайте), дождался чтоб система поняла что я не онлайн, попробовал несколько раз но не пришло уведомление на почту, на сайте да уведомляет.

HiAndy
#8 15 ноября 2015 в 18:50
Колян,
Ну если есть спрос на уведомление на почту...
Попробую доработать функцию notifyParent...

Результат выложу здесь.
#9 15 ноября 2015 в 18:54


Колян,
Ну если есть спрос на уведомление на почту...
Попробую доработать функцию notifyParent...

Результат выложу здесь.

HiAndy
Яду нашкребу спасибку отправлю😊 Просто не хорошо, вариант выбора есть сейчас, на мыло и на сайте, а по факту только на сайте уведомляется.
#10 15 ноября 2015 в 19:00
Так интересно а к кому с феншуем обратиться… ато уведомления об ответах на стене группы вон какие, а эти какието кривенькие)))


За системой уведомлений на стенах групп обращаться к PIN

А сама система комментариев в группе совершенно необычная и так прикольно себя ведёт когда из уведомления к комментарию переходишь😊 необычная т.к. показывает ветвь разговора и нет нужды отвлекаться на разговоры левые и можно выбрать какую ветвь разговора поддерживать а про какую забыть.
#11 15 ноября 2015 в 19:04
А в идеале надо чтоб учитывалось ещё, есть юзер на сайте или нет, чтоб если на сайте, сервак не дёргать на отправку письма, да и юзеру читать сообщение на почте, незачем, если он его на сайте прочёл + странное дело, звука нету об этом уведомлении, на других уведомлениях писк есть.
#12 15 ноября 2015 в 19:14
Колян,
Из какого компонента первое уведомление?

Так интересно а к кому с феншуем обратиться...

Колян

К разработчикам.
#13 15 ноября 2015 в 19:40


Колян,
Из какого компонента первое уведомление?

Так интересно а к кому с феншуем обратиться...

Колян

К разработчикам.

HiAndy

Первое от стены групп, только PIN теперь важная птица, фиг поймаешь) Я подредактировал выше пост про стену комментариев для групп и уведомлениях со стены групп.
#14 15 ноября 2015 в 19:53
Колян,
Прекрасно понимаю Ваши чаяния. Но ко мне — ехать. Шашечки — к разработчикам.
Я ж писал еще в марте месяце:

В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной,

HiAndy
#15 15 ноября 2015 в 20:10


Колян,
Прекрасно понимаю Ваши чаяния. Но ко мне — ехать. Шашечки — к разработчикам.
Я ж писал еще в марте месяце:

В пыхе не понимаю совершенно ничего, поэтому функция получилась примитивной,

HiAndy

HiAndy

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

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