Таблица phpbb_topics_watch
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва
Таблица phpbb_topics_watch
Понаблюдал, как при добавлении сообщений с галкой "уведомлять о новых" в quick reply форме и в обычной форме, меняется содержимое таблицы. И понял, что никак не меняется.
"Слежение" за темами начинается только при нажатии на ссылку "следить за сообщениями" внизу темы, но при этом в таблицу добавляется в поле notify_status не 1, а 0. В файле viewtopic.php поменял соответствующий код, изменив добавление 0 на 1, результата не дало.
Проблема: не позволяет следить за новыми темами и не присылает уведомления по почте.
Помогите решить, пожалуйста.
Поиском пользовался, похожее находил, но не то.
Хотя бы подскажите в каком месте искать неверный код и от чего отталкиваться
"Слежение" за темами начинается только при нажатии на ссылку "следить за сообщениями" внизу темы, но при этом в таблицу добавляется в поле notify_status не 1, а 0. В файле viewtopic.php поменял соответствующий код, изменив добавление 0 на 1, результата не дало.
Проблема: не позволяет следить за новыми темами и не присылает уведомления по почте.
Помогите решить, пожалуйста.
Поиском пользовался, похожее находил, но не то.
Хотя бы подскажите в каком месте искать неверный код и от чего отталкиваться
Последний раз редактировалось ferdinand 10.05.2006 13:25, всего редактировалось 1 раз.
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
Судя по названию таблицы у вас установлен мод слежки за новыми темами. С уведомлениями на что конкретно у вас проблемы?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва
Прошу меня извинить, пост писал ночью. Конечно же у меня таблица phpbb_topics_watch.
Модулей установлено достаточно большое количество. В свое время переносил базу еще из-под phpnuke. Проблема в том, что не работает уведомление на почту о новых сообщениях в теме и не заносятся данные в эту таблицу, если при отправке сообщения ставить галку "следить за сообщениями"
Уведомления о личных сообщениях приходят
Как я понял, на это может влиять достаточно большое количество кода в разных скриптах. Подскажите, где копать?
template: SubSilver
phpBB v2.0.19
Модулей установлено достаточно большое количество. В свое время переносил базу еще из-под phpnuke. Проблема в том, что не работает уведомление на почту о новых сообщениях в теме и не заносятся данные в эту таблицу, если при отправке сообщения ставить галку "следить за сообщениями"
Уведомления о личных сообщениях приходят
Как я понял, на это может влиять достаточно большое количество кода в разных скриптах. Подскажите, где копать?
template: SubSilver
phpBB v2.0.19
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
ferdinand
Почитайте тему "Письма с форума индексируются как спам", похожу у вас сервер не приемлет заголовок To, который выдается форумом.
Почитайте тему "Письма с форума индексируются как спам", похожу у вас сервер не приемлет заголовок To, который выдается форумом.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва
Xpert
Исключено. Я вижу, что в таблицу записываются неправильные данные или вообще не записываются.
Некоторое время мне приходили уведомления о трех темах, записи о которых еще оставались в таблице с предыдущих времен. Как только я для чистоты эксперимента стер эти три строки из таблицы, перестали. Не в почте дело.
Просто хочется узнать точно, какой код отвечает за подписку на тему (из формы быстрого ответа, из формы ответа и по ссылке внизу темы), а также какой код отсылает уведомления.
Помогите хотя бы этим, сам найти я не смог
Добавлено спустя 4 минуты 18 секунд:
Даже при подписывании на тему, в таблицу добавляется 0 вместо 1 в поле статуса
Добавлено спустя 26 минут 59 секунд:
Возможно, стоит взять файлы, отвечающие за отправку сообщений и просмотр темы из дистрибутива и сравнить их построчно, но как быть с тем, что количество установленных модулей уже достаточно велико?
Добавлено спустя 3 часа 56 минут 24 секунды:
Сверил файлы functions_post.php, posting.php, viewtopic.php в местах с переменными уведомления с дистрибутивом phpbb v2.0.20. На свой взгляд различий не нашел.
Добавлено спустя 2 часа 51 минуту 41 секунду:
Проблема немного локализована. Форум стал отправлять уведомления о новых сообщениях в теме только при подписке по ссылке внизу темы. При отправке сообщения (создании поста, ответе на пост) подписка на уведомления не происходит (в базу ничего не пишет).
А еще {TOPIC_TITLE} в письме не отображает...
Мне кто-нибудь поможет?
Исключено. Я вижу, что в таблицу записываются неправильные данные или вообще не записываются.
Некоторое время мне приходили уведомления о трех темах, записи о которых еще оставались в таблице с предыдущих времен. Как только я для чистоты эксперимента стер эти три строки из таблицы, перестали. Не в почте дело.
Просто хочется узнать точно, какой код отвечает за подписку на тему (из формы быстрого ответа, из формы ответа и по ссылке внизу темы), а также какой код отсылает уведомления.
Помогите хотя бы этим, сам найти я не смог
Добавлено спустя 4 минуты 18 секунд:
Даже при подписывании на тему, в таблицу добавляется 0 вместо 1 в поле статуса
Добавлено спустя 26 минут 59 секунд:
Возможно, стоит взять файлы, отвечающие за отправку сообщений и просмотр темы из дистрибутива и сравнить их построчно, но как быть с тем, что количество установленных модулей уже достаточно велико?
Добавлено спустя 3 часа 56 минут 24 секунды:
Сверил файлы functions_post.php, posting.php, viewtopic.php в местах с переменными уведомления с дистрибутивом phpbb v2.0.20. На свой взгляд различий не нашел.
Добавлено спустя 2 часа 51 минуту 41 секунду:
Проблема немного локализована. Форум стал отправлять уведомления о новых сообщениях в теме только при подписке по ссылке внизу темы. При отправке сообщения (создании поста, ответе на пост) подписка на уведомления не происходит (в базу ничего не пишет).
А еще {TOPIC_TITLE} в письме не отображает...
Мне кто-нибудь поможет?
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
Да, но про пункт 3.5 правил форума просьба не забывать.ferdinand писал(а):Мне кто-нибудь поможет?
Это при ответе через быстрый ответ? Очень может быть, это глюк мода ответа...ferdinand писал(а): При отправке сообщения (создании поста, ответе на пост) подписка на уведомления не происходит (в базу ничего не пишет).
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва
Нет, это как я уже написал при создании темы или ответе. Без разницы, через быстрый ответ или через нормальный.Xpert писал(а):Это при ответе через быстрый ответ? Очень может быть, это глюк мода ответа...
Добавлено спустя 1 минуту 7 секунд:
И еще.
Переменные USERNAME, POSTER_USERNAME, TOPIC_TITLE в уведомлении пусты
Добавлено спустя 1 час 24 секунды:
Любопытное наблюдение. Внес в таблицу в поле notify_status 0 (что, как я теперь выяснил соответствует подписке на тему, а вот 1 - подписке с уведомлениями, по которым не сделан переход) и как только я отвечаю в этой же теме с автоматически установленной галкой "получать уведомления", строка из таблицы удаляется.
Видимо, где-то в posting.php неправильно распознаются поля формы отправки (и быстрой формы тоже)
А все переменные кроме ссылки на тему и ссылки на отписку от темы нулевые.
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
За это в posting.php отвечает вызов следующей функции:
Код: Выделить всё
user_notification($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user);
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва
В posting.php код у меня такой же.
В functions_post.php функция описана так:
Извините, если что не так делаю, я совсем с этой проблемой запутался
В functions_post.php функция описана так:
Код: Выделить всё
//
// Handle user notification on new post
//
function user_notification($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user)
{
global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
global $userdata, $user_ip;
$current_time = time();
if ($mode != 'delete')
{
if ($mode == 'reply')
{
$sql = "SELECT ban_userid
FROM " . BANLIST_TABLE;
if (!($result = $db->sql_query($sql)))
{
message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql);
}
$user_id_sql = '';
while ($row = $db->sql_fetchrow($result))
{
if (isset($row['ban_userid']) && !empty($row['ban_userid']))
{
$user_id_sql .= ', ' . $row['ban_userid'];
}
}
$sql = "SELECT u.user_id, u.user_email, u.user_lang
FROM " . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u
WHERE tw.topic_id = $topic_id
AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . ")
AND tw.notify_status = " . TOPIC_WATCH_UN_NOTIFIED . "
AND u.user_id = tw.user_id";
if (!($result = $db->sql_query($sql)))
{
message_die(GENERAL_ERROR, 'Could not obtain list of topic watchers', '', __LINE__, __FILE__, $sql);
}
$update_watched_sql = '';
$bcc_list_ary = array();
if ($row = $db->sql_fetchrow($result))
{
// Sixty second limit
@set_time_limit(60);
do
{
if ($row['user_email'] != '')
{
$bcc_list_ary[$row['user_lang']][] = $row['user_email'];
}
$update_watched_sql .= ($update_watched_sql != '') ? ', ' . $row['user_id'] : $row['user_id'];
}
while ($row = $db->sql_fetchrow($result));
//
// Let's do some checking to make sure that mass mail functions
// are working in win32 versions of php.
//
if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery'])
{
$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';
// We are running on windows, force delivery to use our smtp functions
// since php's are broken by default
$board_config['smtp_delivery'] = 1;
$board_config['smtp_host'] = @$ini_val('SMTP');
}
if (sizeof($bcc_list_ary))
{
include($phpbb_root_path . 'includes/emailer.'.$phpEx);
$emailer = new emailer($board_config['smtp_delivery']);
$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx;
$server_name = trim($board_config['server_name']);
$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/';
$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);
$emailer->from($board_config['board_email']);
$emailer->replyto($board_config['board_email']);
if ($post_data['poster_id'] != ANONYMOUS)
{
$sql = "SELECT username
FROM " . USERS_TABLE . "
WHERE user_id = " . $post_data['poster_id'];
$result = $db->sql_query($sql);
$result = $db->sql_fetchrow($sql);
$username = $result['username'];
}
else
{
$username = ($post_data['poster_username']) ? $post_data['poster_username'] : $lang['Guest'];
}
//by me
//$username = (count($orig_word)) ? preg_replace($orig_word, $replacement_word, unprepare_message($username)) : unprepare_message($username);
@reset($bcc_list_ary);
while (list($user_lang, $bcc_list) = each($bcc_list_ary))
{
$emailer->use_template('topic_notify', $user_lang);
for ($i = 0; $i < count($bcc_list); $i++)
{
$emailer->bcc($bcc_list[$i]);
}
// The Topic_reply_notification lang string below will be used
// if for some reason the mail template subject cannot be read
// ... note it will not necessarily be in the posters own language!
$emailer->set_subject($lang['Topic_reply_notification']);
// This is a nasty kludge to remove the username var ... till (if?)
// translators update their templates
$emailer->assign_vars(array(
'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
'SITENAME' => $board_config['sitename'],
'TOPIC_TITLE' => stripslashes($topic_title),
'USERNAME' => $username,
'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id",
'U_STOP_WATCHING_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_TOPIC_URL . "=$topic_id&unwatch=topic")
);
$emailer->send();
$emailer->reset();
}
}
}
$db->sql_freeresult($result);
if ($update_watched_sql != '')
{
$sql = "UPDATE " . TOPICS_WATCH_TABLE . "
SET notify_status = " . TOPIC_WATCH_NOTIFIED . "
WHERE topic_id = $topic_id
AND user_id IN ($update_watched_sql)";
$db->sql_query($sql);
}
}
$sql = "SELECT topic_id
FROM " . TOPICS_WATCH_TABLE . "
WHERE topic_id = $topic_id
AND user_id = " . $userdata['user_id'];
if (!($result = $db->sql_query($sql)))
{
message_die(GENERAL_ERROR, 'Could not obtain topic watch information', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
if (!$notify_user && !empty($row['topic_id']))
{
$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
WHERE topic_id = $topic_id
AND user_id = " . $userdata['user_id'];
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not delete topic watch information', '', __LINE__, __FILE__, $sql);
}
}
else if ($notify_user && empty($row['topic_id']))
{
$sql = "INSERT INTO " . TOPICS_WATCH_TABLE . " (user_id, topic_id, notify_status)
VALUES (" . $userdata['user_id'] . ", $topic_id, 0)";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not insert topic watch information', '', __LINE__, __FILE__, $sql);
}
}
}
}
-
- phpBB 1.2.1
- Сообщения: 21
- Стаж: 19 лет
- Откуда: Москва