2 ответ(ов) в теме
aleksandr_romanovich
не в сети 6 дней
На сайте с 03.05.2018
Участник
Тем 8
Сообщения 16
1
16:47

Здравствуйте!

Речь пойдет о функции pfm_add_global_var_approval_count() (файл approval.php, стр. 59).

Фрагмент кода:

    $get_approval_count = $wpdb->get_results("SELECT topic_id, MIN(post_index) as min_post_index, COUNT(*) as count FROM " . RCL_PREF . "pforum_posts WHERE topic_id IN($lists) AND post_status = 'need_approval' GROUP BY topic_id", ARRAY_A);

    if ($get_approval_count)) {
        $TopicListApprovalID = array();
        foreach ($get_approval_count as $get) {
            $TopicListApprovalID[$get['topic_id']] = array('min_post_index' => $get['min_post_index'], 'count' => $get['count']);
        }
    }

    return $TopicListApprovalID;

Во-первых, $wpdb->get_results() может вернуть пустой массив, поэтому условие if ($get_approval_count)) нужно дополнить "проверкой на пустоту".
Во-вторых, даже если $wpdb->get_results() вернет NULL, return $TopicListApprovalID; вернет предварительно сформированный массив $TopicListApprovalID (в строках 64-70).

А когда функция pfm_add_global_var_approval_count() возвращает такой массив, вызывающая ее функция pfm_topic_approval_class($classes) насыпает кучу notice в лог ошибок и непредсказуемо помечает топики, как нуждающиеся в утверждении или имеющие в себе записи, нуждающиеся в утверждении. И это при том, что ни у одного топика или поста нет статуса "need_approval"!

В общем, предлагаю немножко изменить код, приведенный выше:

    $get_approval_count = $wpdb->get_results("SELECT topic_id, MIN(post_index) as min_post_index, COUNT(*) as count FROM " . RCL_PREF . "pforum_posts WHERE topic_id IN($lists) AND post_status = 'need_approval' GROUP BY topic_id", ARRAY_A);

    if ($get_approval_count && !empty($get_approval_count)) {
        $TopicListApprovalID = array();
        foreach ($get_approval_count as $get) {
            $TopicListApprovalID[$get['topic_id']] = array('min_post_index' => $get['min_post_index'], 'count' => $get['count']);
        }
    }
    else return false;

    return $TopicListApprovalID;

Это полностью решает проблему.

1
Preci
не в сети 3 часа
На сайте с 11.11.2014
Участник
Тем 55
Сообщения 545
2
20:30

Спасибо, исправил

1
Тема закрыта. Публикация новых сообщений запрещена.