Перейти к контенту

Бред в коде подписки на тему


Рекомендуемые сообщения

Есть такая феня, не знаю зачем она, никогда ею не занимался.

А заключается она в том, что отсылаются посты топика на мыло только тем пользователям, время последней активности которых позже, чем последний пост в теме.

Я думал-думал, но так и не нашёл никакого правдоподобного объяснения этой фиче.

Может кто из all'а догадается?

 

Т.е. получаем вот такой бред:

 

Участник зашёл на форум в 14.00

Подписался на топик.

Ушёл в 14.05

 

В 14.30 пришёл ответ 1, он не отсылается.

В 15.30 пришёл ответ 2, он не отсылается.

 

В 19.00 участник пришёл на форум. Ответы не отсылаются.

В 19.05 он всё ещё на форуме.

В 19.05 пришёл в тему ответ 3.

 

И тут ему пошли отсылаться сразу все поста.

Если бы 3-го поста так и не последовало, ответы бы так и не отослались.

 

Может конечно я переглючил, и оно не так, но посудите сами:

  $DB->query("SELECT tr.trid, tr.topic_id, m.name, m.email, m.id, m.email_full, m.language,

                              m.last_activity, t.title, t.forum_id

      FROM ibf_tracker tr, ibf_topics t,ibf_members m

      WHERE tr.topic_id='".$tid."'

      AND m.disable_mail=0

      AND tr.member_id=m.id

      AND m.id!='".$ibforums->member['id']."'

      AND t.tid=tr.topic_id

      AND m.last_activity > ".$last_post."'");

 

где

$tid - ид топика, в который поступил ответ

$last_post - время последнего поста в топике на момент срабатывания запроса.

Ссылка на комментарий
Поделиться на других сайтах

Как я понял, то это чтобы несколько ответов подряд не присылалось, а только один раз в первый ответ. Будет присылать еще раз - когда пользватель зайдет на форум.

 

Вызов функции такой:

    
               //-------------------------------------------------
               // Check for subscribed topics
               // Pass on the previous last post time of the topic
               // to see if we need to send emails out
               //-------------------------------------------------
$class->topic_tracker( $this->topic['tid'], $this->post['post'], $class->forum['last_poster_name'], $this->topic['last_post'] );

 

Где $this->topic['last_post'] - это предыдущий последний пост.

 

И там это же в комментах написано :D

Ссылка на комментарий
Поделиться на других сайтах

Странно это как-то..

в таких случаях делают просто GROUP BY member_id ORDER BY pid DESC

 

а моё описание глюка правдиво?

Ссылка на комментарий
Поделиться на других сайтах

Зачем "GROUP BY" ? :D

 

а моё описание глюка правдиво?

Ага, я даже уже хотел удалять "AND m.last_activity > ".$last_post."'" ;)

Ссылка на комментарий
Поделиться на других сайтах

Да не нужно. Я спутал, думал здесь ещё таблица постов джойнится. А тут пост передаётся в параметре. Тогда добвлять в запрос ничего не нужно.
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

Та не там все правильно.

 

Есть тема_1

 

Последнее сообщение темы_1 ($last_post) в 14:00

 

В 14:05 пользователь подписывается на тему, и сразу выходит из форума. Т.е. m.last_activity= в 14:05

 

Затем кто-то еще пишет в 14:10 и условие AND m.last_activity > ".$last_post."' ~ 14:05 > 14:00 выполняется

 

И $last_post == 14:10

 

Затем (m.last_activity все еще == 14:05) еще кто-то отвечает в тему_1. И уже условие AND m.last_activity > ".$last_post."' ~ 14:05 > 14:10 НЕ выполняется. Как и задумано (если ответов будет к примеру 10, то чтобы не слать 10 писем)

Ссылка на комментарий
Поделиться на других сайтах

2Hostem

 

1) А если он не уходит с форума ? Просто тусуется в другом разделе. А уходит уже потОм ?

 

2) >> Затем кто-то еще пишет в 14:10 и условие AND m.last_activity > ".$last_post."' ~ 14:05 > 14:00 выполняется

 

Как же оно выполняется? last_post будет при этом равен 14.10, т.к. last_post это unix time последнего поста в теме.

Ссылка на комментарий
Поделиться на других сайтах

А если он не уходит с форума ? Просто тусуется в другом разделе. А уходит уже потОм ?

То ему может прийти больше одного письма

Как же оно выполняется? last_post будет при этом равен 14.10, т.к. last_post это unix time последнего поста в теме

Последнего поста до вставки нового поста, т.е. предыдущего поста

 

 

Из комментов в коде

                //-------------------------------------------------

              // Check for subscribed topics

              // Pass on the previous last post time of the topic

              // to see if we need to send emails out

              //-------------------------------------------------

Ссылка на комментарий
Поделиться на других сайтах

Правду говоришь :D

Ну тогда почему оно не работает ?

Вижу пока только один глюк: мод склейки не приведён в соответствие с отсылкой.

Ну это даже не так важно.

И без склейки работает через раз.

 

Hostem, а у тебя работает ?

Ссылка на комментарий
Поделиться на других сайтах

Через склейку - не работает. Я об этом даже не подумал :D...

 

Но вообще подписки на темы особо не проверял. Только надо проверять же с двух логинов - один подписывается, второй пишет сообщение.

Ссылка на комментарий
Поделиться на других сайтах

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.