форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
  • »
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
 
 
 
 
tays
Эксперт
 
tays's Avatar
Default Исправление ошибки с неработающим недельным дайджестом в 3.8.11
5

Риторический вопрос индусам, которые в 3.8.11 почему-то решили заняться улучшениями: зачем лезть в чужой код, если до конца не понимаешь, что делаешь?
В прошлой серии речь шла о недокументированном изменении в vb 3.8.11, которое может затронуть сторонние хаки и продукты (Опция threadmarking пропала в vBulletin 3.8.11).
Теперь речь о более серьезном изменении в 3.8.11, которое затрагивает сам vbulletin.
В общем-то идея у индусов была хорошая - добавить кэширование запросов к БД в функцию рассылки недельного дайджеста подписок.
Но вот реализация подкачала, ведь они не знают русский язык и не читают vbsupport.ru. . В итоге 90-95% пользователей с подписками просто перестали получать недельный дайджест. Т.к. некоторые все же получали дайджест, то определение наличия проблемы и диагностика была особенно затруднена.

Лечение возможно двумя способами - ампутация (удалить кэширование по коду - искать по ключевым словам $thread_cache и $forum_cache) или доработка напильником.
Второй способ мне кажется предпочтительным, все-таки кэширование в принципе вещь полезная.
Для этого исправления нужно внести в файл forum/includes/functions_digest.php в двух местах:
Фрагмент:
PHP Code:
        // get posts
        
if (array_key_exists($thread['threadid'], $thread_cache))
        {
            
$posts $thread_cache[$thread['threadid']];
        } 
меняем на:
PHP Code:
        // get posts
        
if (array_key_exists($thread['threadid'], $thread_cache))
        {
            
$posts $thread_cache[$thread['threadid']];
            
$vbulletin->db->data_seek($posts0); // eska - fixed error in 3.8.11
        

а фрагмент
PHP Code:
        if (array_key_exists($forum['forumid'], $forum_cache))
        {
            
$threads $forum_cache[$forum['forumid']];
        } 
на
PHP Code:
        if (array_key_exists($forum['forumid'], $forum_cache))
        {
            
$threads $forum_cache[$forum['forumid']];
            
$vbulletin->db->data_seek($threads0); // eska - fixed error in 3.8.11
        

@hoo, наверное и в 3.8.12 надо сразу добавить исправление этой ошибки.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
wangyu1314
Простоузер
Default
0

Thank you, we have patched the codes.
 
 
Все работники Работн
Простоузер
Default
0

Не получилось исправить. Не работает рассылка:-(((
 
 
hoo
Гуру
 
hoo's Avatar
Default
0

А разве крон сразу должен сработать?)
 
 
Все работники Работн
Простоузер
Default
0

Quote:
Originally Posted by hoo View Post
А разве крон сразу должен сработать?)
Не работают уже месяца 4 дайджесты и суточные и недельные. Сразу как перешли на 3.8.11 и поставили PHP7.
Крон отрабатывает другие задачи нормально. Письма уходят исправно ( уведомления, нарушения итд)
Мучаемся который месяц и решения нет.
 
 
tays
Эксперт
 
tays's Avatar
Default
1

@Все работники Работн, после описанных в начале темы исправлений дайджест полностью работоспособен на 3.8.11, в том числе и на PHP7.
Возможно у Вас проблема в чем-то другом.
Проверьте логи на предмет ошибок и проводите отладку functions_digest.php, выводя отладочные сообщения в файл.
Для начала убедитесь, что у вас просто доходит ход до функции exec_digest.
Далее для простоты сделайте отладку для какого-либо одного юзера, добавив в SQL запрос в строке 52 условие "user.userid=... AND".
Подписываете этого юзера на некоторую тему, делаете в ней новый ответ от другого пользователя и запускаете дайждест.
Для удобства отладки нужно исправить строчку:
PHP Code:
$lastdate mktime(00); // midnight today 
на
PHP Code:
$lastdate time(); // now 
Тогда в дайджест будут попадать все обновления до времени запуска скрипта, а не по 00:00 текущей даты.

Теоретически у вас что-то может висеть на хуках, вызывающее падение.
Ищете по коду словом hook все хуки, которые вызываются в коде, строчки вида
($hook = vBulletinHook::fetch_hook('digest_thread_post')) ? eval($hook) : false;
и смотрите в Продукты и модули -> Управление модулями что висит на этих хуках (если висит).
 

Tags
3.8.11, ошибка


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 05:27 AM.


Powered by vBulletin® Version Nulled Edition
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Loading...