VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Исправление ошибки с неработающим недельным дайджестом в 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($posts, 0); // 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($threads, 0); // eska - fixed error in 3.8.11 }
@hoo, наверное и в 3.8.12 надо сразу добавить исправление этой ошибки.
Не работают уже месяца 4 дайджесты и суточные и недельные. Сразу как перешли на 3.8.11 и поставили PHP7.
Крон отрабатывает другие задачи нормально. Письма уходят исправно ( уведомления, нарушения итд)
Мучаемся который месяц и решения нет.
@tays
Эксперт
Join Date: Jun 2006
Posts: 369
Версия vB: 3.8.x
Пол:
Reputation:
Professional 1064
Репутация в разделе: 746
1
@Все работники Работн, после описанных в начале темы исправлений дайджест полностью работоспособен на 3.8.11, в том числе и на PHP7.
Возможно у Вас проблема в чем-то другом.
Проверьте логи на предмет ошибок и проводите отладку functions_digest.php, выводя отладочные сообщения в файл.
Для начала убедитесь, что у вас просто доходит ход до функции exec_digest.
Далее для простоты сделайте отладку для какого-либо одного юзера, добавив в SQL запрос в строке 52 условие "user.userid=... AND".
Подписываете этого юзера на некоторую тему, делаете в ней новый ответ от другого пользователя и запускаете дайждест.
Для удобства отладки нужно исправить строчку:
PHP Code:
$lastdate = mktime(0, 0); // midnight today
на
PHP Code:
$lastdate = time(); // now
Тогда в дайджест будут попадать все обновления до времени запуска скрипта, а не по 00:00 текущей даты.
Теоретически у вас что-то может висеть на хуках, вызывающее падение.
Ищете по коду словом hook все хуки, которые вызываются в коде, строчки вида
($hook = vBulletinHook::fetch_hook('digest_thread_post')) ? eval($hook) : false;
и смотрите в Продукты и модули -> Управление модулями что висит на этих хуках (если висит).