Example #1
0
function forum_search($forum_search, $offset)
{
    if (!($db_forum_search = db_connect())) {
        return false;
    }
    if (!is_numeric($offset)) {
        return false;
    }
    if (($uid = bh_session_get_value('UID')) === false) {
        return false;
    }
    $lang = load_language_file();
    // Array to hold our forums in.
    $forums_array = array();
    if (strlen(trim($forum_search)) > 0) {
        $forum_search_array = explode(";", $forum_search);
        $forum_search_array = array_map('forum_search_array_clean', $forum_search_array);
        $forum_search_webtag = implode("%' OR FORUMS.WEBTAG LIKE '%", $forum_search_array);
        $forum_search_svalue = implode("%' OR FORUM_SETTINGS.SVALUE LIKE '%", $forum_search_array);
        $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '.', FORUMS.WEBTAG, '_') AS PREFIX, ";
        $sql .= "FORUMS.FID, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST FROM FORUM_SETTINGS ";
        $sql .= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUM_SETTINGS.FID ";
        $sql .= "AND USER_FORUM.UID = '{$uid}') LEFT JOIN FORUMS ON (FORUMS.FID = FORUM_SETTINGS.FID) ";
        $sql .= "WHERE FORUMS.ACCESS_LEVEL > -1 AND (FORUMS.WEBTAG LIKE ";
        $sql .= "'%{$forum_search_webtag}%' OR FORUM_SETTINGS.SVALUE LIKE ";
        $sql .= "'%{$forum_search_svalue}%') GROUP BY FORUMS.FID ";
        $sql .= "LIMIT {$offset}, 10";
        if (!($result_forums = db_query($sql, $db_forum_search))) {
            return false;
        }
        // Fetch the number of total results
        $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";
        if (!($result_count = db_query($sql, $db_forum_search))) {
            return false;
        }
        list($forums_count) = db_fetch_array($result_count, DB_RESULT_NUM);
        if (db_num_rows($result_forums) > 0) {
            while ($forum_data = db_fetch_array($result_forums)) {
                $forum_fid = $forum_data['FID'];
                $forum_settings = forum_get_settings_by_fid($forum_fid);
                foreach ($forum_settings as $key => $value) {
                    if (!isset($forum_data[strtoupper($key)])) {
                        $forum_data[strtoupper($key)] = $value;
                    }
                }
                // Check the forum name is set. If it isn't set it to 'A Beehive Forum'
                if (!isset($forum_data['FORUM_NAME']) || strlen(trim($forum_data['FORUM_NAME'])) < 1) {
                    $forum_data['FORUM_NAME'] = "A Beehive Forum";
                }
                // Check the forum description variable is set.
                if (!isset($forum_data['FORUM_DESC'])) {
                    $forum_data['FORUM_DESC'] = "";
                }
                // Unread cut-off stamp.
                $unread_cutoff_stamp = forum_process_unread_cutoff($forum_settings);
                // Get available folders for queries below
                $folders = folder_get_available_by_forum($forum_fid);
                // User relationship constants
                $user_ignored = USER_IGNORED;
                $user_ignored_completely = USER_IGNORED_COMPLETELY;
                // Get any unread messages
                if (is_numeric($unread_cutoff_stamp) && $unread_cutoff_stamp !== false) {
                    $sql = "SELECT SUM(THREAD.LENGTH) - SUM(COALESCE(USER_THREAD.LAST_READ, 0)) ";
                    $sql .= "AS UNREAD_MESSAGES FROM {$forum_data['PREFIX']}THREAD THREAD ";
                    $sql .= "LEFT JOIN {$forum_data['PREFIX']}USER_THREAD USER_THREAD ";
                    $sql .= "ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '{$uid}') ";
                    $sql .= "WHERE THREAD.FID IN ({$folders}) ";
                    $sql .= "AND (THREAD.MODIFIED > FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - ";
                    $sql .= "{$unread_cutoff_stamp}) OR {$unread_cutoff_stamp} = 0) ";
                    if (!($result_unread_count = db_query($sql, $db_forum_search))) {
                        return false;
                    }
                    list($unread_messages) = db_fetch_array($result_unread_count, DB_RESULT_NUM);
                    $forum_data['UNREAD_MESSAGES'] = $unread_messages;
                } else {
                    $forum_data['UNREAD_MESSAGES'] = 0;
                }
                // Total number of messages
                $sql = "SELECT SUM(THREAD.LENGTH) AS NUM_MESSAGES ";
                $sql .= "FROM {$forum_data['PREFIX']}THREAD THREAD ";
                $sql .= "WHERE THREAD.FID IN ({$folders}) ";
                if (!($result_messages_count = db_query($sql, $db_forum_search))) {
                    return false;
                }
                $num_messages_data = db_fetch_array($result_messages_count);
                if (!isset($num_messages_data['NUM_MESSAGES']) || is_null($num_messages_data['NUM_MESSAGES'])) {
                    $forum_data['NUM_MESSAGES'] = 0;
                } else {
                    $forum_data['NUM_MESSAGES'] = $num_messages_data['NUM_MESSAGES'];
                }
                // Get unread to me message count
                $sql = "SELECT COUNT(POST.PID) AS UNREAD_TO_ME ";
                $sql .= "FROM {$forum_data['PREFIX']}THREAD THREAD ";
                $sql .= "LEFT JOIN {$forum_data['PREFIX']}POST POST ";
                $sql .= "ON (POST.TID = THREAD.TID) WHERE THREAD.FID IN ({$folders}) ";
                $sql .= "AND POST.TO_UID = '{$uid}' AND POST.VIEWED IS NULL ";
                if (!($result_unread_to_me = db_query($sql, $db_forum_search))) {
                    return false;
                }
                $post_count_data = db_fetch_array($result_unread_to_me);
                if (!isset($post_count_data['UNREAD_TO_ME']) || is_null($post_count_data['UNREAD_TO_ME'])) {
                    $forum_data['UNREAD_TO_ME'] = 0;
                } else {
                    $forum_data['UNREAD_TO_ME'] = $post_count_data['UNREAD_TO_ME'];
                }
                // Sometimes the USER_THREAD table might have a higher count that the thread
                // length due to table corruption. I've only seen this on the SF provided
                // webspace but none the less we do this check here anyway.
                if ($forum_data['NUM_MESSAGES'] < 0) {
                    $forum_data['NUM_MESSAGES'] = 0;
                }
                if ($forum_data['UNREAD_MESSAGES'] < 0) {
                    $forum_data['UNREAD_MESSAGES'] = 0;
                }
                if ($forum_data['UNREAD_TO_ME'] < 0) {
                    $forum_data['UNREAD_TO_ME'] = 0;
                }
                // Get Last Visited
                $sql = "SELECT UNIX_TIMESTAMP(LAST_VISIT) AS LAST_VISIT FROM USER_FORUM ";
                $sql .= "WHERE UID = '{$uid}' AND FID = '{$forum_fid}' ";
                $sql .= "AND LAST_VISIT IS NOT NULL AND LAST_VISIT > 0";
                if (!($result_last_visit = db_query($sql, $db_forum_search))) {
                    return false;
                }
                $user_last_visit_data = db_fetch_array($result_last_visit);
                if (!isset($user_last_visit_data['LAST_VISIT']) || is_null($user_last_visit_data['LAST_VISIT'])) {
                    $forum_data['LAST_VISIT'] = 0;
                } else {
                    $forum_data['LAST_VISIT'] = $user_last_visit_data['LAST_VISIT'];
                }
                $forums_array[] = $forum_data;
            }
        } else {
            if ($forums_count > 0) {
                $offset = floor(($forums_count - 1) / 10) * 10;
                return forum_search($forum_search, $offset);
            }
        }
    }
    return array('forums_array' => $forums_array, 'forums_count' => $forums_count);
}
Example #2
0
function forum_search($forum_search, $page, $sort_by, $sort_dir)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!is_numeric($page)) {
        return false;
    }
    $offset = calculate_page_offset($page, 10);
    $sort_by_array = array('FORUM_NAME', 'FORUM_DESC', 'LAST_VISIT');
    $sort_dir_array = array('ASC', 'DESC');
    if (!in_array($sort_by, $sort_by_array)) {
        $sort_by = 'LAST_VISIT';
    }
    if (!in_array($sort_dir, $sort_dir_array)) {
        $sort_dir = 'DESC';
    }
    if (($uid = session::get_value('UID')) === false) {
        return false;
    }
    if (strlen(trim($forum_search)) == 0) {
        return false;
    }
    $forums_array = array();
    $forum_search_array = explode(";", $forum_search);
    $forum_search_array = array_map('forum_search_array_clean', $forum_search_array);
    $forum_search_webtag = implode("%' OR FORUMS.WEBTAG LIKE '%", $forum_search_array);
    $forum_search_svalue = implode("%' OR FORUM_SETTINGS.SVALUE LIKE '%", $forum_search_array);
    $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '`.`', FORUMS.WEBTAG, '_') AS PREFIX, ";
    $sql .= "FORUM_SETTINGS_NAME.SVALUE AS FORUM_NAME, FORUM_SETTINGS_DESC.SVALUE AS FORUM_DESC, ";
    $sql .= "FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST FROM FORUMS ";
    $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS ON (FORUM_SETTINGS.FID = FORUMS.FID) ";
    $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_NAME ON (FORUM_SETTINGS_NAME.FID = FORUMS.FID AND FORUM_SETTINGS_NAME.SNAME = 'forum_name') ";
    $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_DESC ON (FORUM_SETTINGS_DESC.FID = FORUMS.FID AND FORUM_SETTINGS_DESC.SNAME = 'forum_desc') ";
    $sql .= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUMS.FID AND USER_FORUM.UID = '{$uid}') ";
    $sql .= "WHERE FORUMS.ACCESS_LEVEL > -1 AND (FORUMS.WEBTAG LIKE ";
    $sql .= "'%{$forum_search_webtag}%' OR FORUM_SETTINGS.SVALUE LIKE ";
    $sql .= "'%{$forum_search_svalue}%') GROUP BY FORUMS.FID ";
    $sql .= "ORDER BY {$sort_by} {$sort_dir} LIMIT {$offset}, 10";
    if (!($result_forums = $db->query($sql))) {
        return false;
    }
    // Fetch the number of total results
    $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";
    if (!($result_count = $db->query($sql))) {
        return false;
    }
    list($forums_count) = $result_count->fetch_row();
    if ($result->num_rows == 0 && $forums_count > 0 && $page > 1) {
        return forum_search($forum_search, $page - 1, $sort_by, $sort_dir);
    }
    while ($forum_data = $result_forums->fetch_assoc()) {
        $forum_fid = $forum_data['FID'];
        // Check the forum name is set. If it isn't set it to 'A Beehive Forum'
        if (!isset($forum_data['FORUM_NAME']) || strlen(trim($forum_data['FORUM_NAME'])) < 1) {
            $forum_data['FORUM_NAME'] = "A Beehive Forum";
        }
        // Check the forum description is set.
        if (!isset($forum_data['FORUM_DESC']) || strlen(trim($forum_data['FORUM_DESC'])) < 1) {
            $forum_data['FORUM_DESC'] = "";
        }
        // Check the LAST_VISIT column to make sure its OK.
        if (!isset($forum_data['LAST_VISIT']) || is_null($forum_data['LAST_VISIT'])) {
            $forum_data['LAST_VISIT'] = 0;
        }
        // Unread cut-off stamp.
        $unread_cutoff_datetime = forum_get_unread_cutoff_datetime();
        // Get available folders for queries below
        $folders = folder_get_available_by_forum($forum_fid);
        // Get any unread messages
        if ($unread_cutoff_datetime !== false) {
            $sql = "SELECT SUM(THREAD.LENGTH) - SUM(COALESCE(USER_THREAD.LAST_READ, 0)) AS UNREAD_MESSAGES ";
            $sql .= "FROM `{$forum_data['PREFIX']}THREAD` THREAD LEFT JOIN `{$forum_data['PREFIX']}USER_THREAD` USER_THREAD ";
            $sql .= "ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '{$uid}') WHERE THREAD.FID IN ({$folders}) ";
            $sql .= "AND (THREAD.MODIFIED > CAST('{$unread_cutoff_datetime}' AS DATETIME)) ";
            if (!($result_unread_count = $db->query($sql))) {
                return false;
            }
            list($unread_messages) = $result_unread_count->fetch_row();
            $forum_data['UNREAD_MESSAGES'] = $unread_messages;
        } else {
            $forum_data['UNREAD_MESSAGES'] = 0;
        }
        // Total number of messages
        $sql = "SELECT SUM(THREAD.LENGTH) AS NUM_MESSAGES FROM `{$forum_data['PREFIX']}THREAD` THREAD ";
        $sql .= "WHERE THREAD.FID IN ({$folders}) ";
        if (!($result_messages_count = $db->query($sql))) {
            return false;
        }
        $num_messages_data = $result_messages_count->fetch_assoc();
        if (!isset($num_messages_data['NUM_MESSAGES']) || is_null($num_messages_data['NUM_MESSAGES'])) {
            $forum_data['NUM_MESSAGES'] = 0;
        } else {
            $forum_data['NUM_MESSAGES'] = $num_messages_data['NUM_MESSAGES'];
        }
        // Get unread to me message count
        $sql = "SELECT COUNT(POST.PID) AS UNREAD_TO_ME ";
        $sql .= "FROM `{$forum_data['PREFIX']}THREAD` THREAD ";
        $sql .= "LEFT JOIN `{$forum_data['PREFIX']}POST` POST ";
        $sql .= "ON (POST.TID = THREAD.TID) WHERE THREAD.FID IN ({$folders}) ";
        $sql .= "AND POST.TO_UID = '{$uid}' AND POST.VIEWED IS NULL ";
        if (!($result_unread_to_me = $db->query($sql))) {
            return false;
        }
        $forum_unread_post_data = $result_unread_to_me->fetch_assoc();
        if (!isset($forum_unread_post_data['UNREAD_TO_ME']) || is_null($forum_unread_post_data['UNREAD_TO_ME'])) {
            $forum_data['UNREAD_TO_ME'] = 0;
        } else {
            $forum_data['UNREAD_TO_ME'] = $forum_unread_post_data['UNREAD_TO_ME'];
        }
        // Sometimes the USER_THREAD table might have a higher count that the thread
        // length due to table corruption. I've only seen this on the SF provided
        // webspace but none the less we do this check here anyway.
        if ($forum_data['NUM_MESSAGES'] < 0) {
            $forum_data['NUM_MESSAGES'] = 0;
        }
        if ($forum_data['UNREAD_MESSAGES'] < 0) {
            $forum_data['UNREAD_MESSAGES'] = 0;
        }
        if ($forum_data['UNREAD_TO_ME'] < 0) {
            $forum_data['UNREAD_TO_ME'] = 0;
        }
        $forums_array[] = $forum_data;
    }
    return array('forums_array' => $forums_array, 'forums_count' => $forums_count);
}
Example #3
0
function get_my_forums($view_type, $page = 1, $sort_by = 'LAST_VISIT', $sort_dir = 'DESC')
{
    if (!($db = db::get())) {
        return false;
    }
    if (!is_numeric($view_type)) {
        return false;
    }
    if (!is_numeric($page) || $page < 1) {
        $page = 1;
    }
    $offset = calculate_page_offset($page, 10);
    $sort_by_array = array('FORUM_NAME', 'FORUM_DESC', 'LAST_VISIT');
    $sort_dir_array = array('ASC', 'DESC');
    if (!in_array($sort_by, $sort_by_array)) {
        $sort_by = 'LAST_VISIT';
    }
    if (!in_array($sort_dir, $sort_dir_array)) {
        $sort_dir = 'DESC';
    }
    if (($uid = session::get_value('UID')) === false) {
        return false;
    }
    $forums_array = array();
    if ($view_type == FORUMS_SHOW_ALL) {
        $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '`.`', FORUMS.WEBTAG, '_') AS PREFIX, ";
        $sql .= "FORUM_SETTINGS_NAME.SVALUE AS FORUM_NAME, FORUM_SETTINGS_DESC.SVALUE AS FORUM_DESC, ";
        $sql .= "FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST, UNIX_TIMESTAMP(USER_FORUM.LAST_VISIT) AS LAST_VISIT FROM FORUMS ";
        $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_NAME ON (FORUM_SETTINGS_NAME.FID = FORUMS.FID AND FORUM_SETTINGS_NAME.SNAME = 'forum_name') ";
        $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_DESC ON (FORUM_SETTINGS_DESC.FID = FORUMS.FID AND FORUM_SETTINGS_DESC.SNAME = 'forum_desc') ";
        $sql .= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUMS.FID AND USER_FORUM.UID = '{$uid}') ";
        $sql .= "WHERE FORUMS.ACCESS_LEVEL > -1  AND FORUMS.ACCESS_LEVEL < 3 AND (USER_FORUM.INTEREST > -1 ";
        $sql .= "OR USER_FORUM.INTEREST IS NULL) ORDER BY {$sort_by} {$sort_dir} LIMIT {$offset}, 10";
    } else {
        if ($view_type == FORUMS_SHOW_FAVS) {
            $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '`.`', FORUMS.WEBTAG, '_') AS PREFIX, ";
            $sql .= "FORUM_SETTINGS_NAME.SVALUE AS FORUM_NAME, FORUM_SETTINGS_DESC.SVALUE AS FORUM_DESC, ";
            $sql .= "FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST, UNIX_TIMESTAMP(USER_FORUM.LAST_VISIT) AS LAST_VISIT FROM FORUMS ";
            $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_NAME ON (FORUM_SETTINGS_NAME.FID = FORUMS.FID AND FORUM_SETTINGS_NAME.SNAME = 'forum_name') ";
            $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_DESC ON (FORUM_SETTINGS_DESC.FID = FORUMS.FID AND FORUM_SETTINGS_DESC.SNAME = 'forum_desc') ";
            $sql .= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUMS.FID AND USER_FORUM.UID = '{$uid}') ";
            $sql .= "WHERE FORUMS.ACCESS_LEVEL > -1 AND FORUMS.ACCESS_LEVEL < 3 AND USER_FORUM.INTEREST = 1 ";
            $sql .= "ORDER BY {$sort_by} {$sort_dir} LIMIT {$offset}, 10";
        } else {
            if ($view_type == FORUMS_SHOW_IGNORED) {
                $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '`.`', FORUMS.WEBTAG, '_') AS PREFIX, ";
                $sql .= "FORUM_SETTINGS_NAME.SVALUE AS FORUM_NAME, FORUM_SETTINGS_DESC.SVALUE AS FORUM_DESC, ";
                $sql .= "FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST, UNIX_TIMESTAMP(USER_FORUM.LAST_VISIT) AS LAST_VISIT FROM FORUMS ";
                $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_NAME ON (FORUM_SETTINGS_NAME.FID = FORUMS.FID AND FORUM_SETTINGS_NAME.SNAME = 'forum_name') ";
                $sql .= "LEFT JOIN FORUM_SETTINGS FORUM_SETTINGS_DESC ON (FORUM_SETTINGS_DESC.FID = FORUMS.FID AND FORUM_SETTINGS_DESC.SNAME = 'forum_desc') ";
                $sql .= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUMS.FID AND USER_FORUM.UID = '{$uid}') ";
                $sql .= "WHERE FORUMS.ACCESS_LEVEL > -1 AND FORUMS.ACCESS_LEVEL < 3 AND USER_FORUM.INTEREST = -1 ";
                $sql .= "ORDER BY {$sort_by} {$sort_dir} LIMIT {$offset}, 10";
            }
        }
    }
    if (!($result = $db->query($sql))) {
        return false;
    }
    $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";
    if (!($result_count = $db->query($sql))) {
        return false;
    }
    list($forums_count) = $result_count->fetch_row();
    if ($result->num_rows == 0 && $forums_count > 0 && $page > 1) {
        return get_my_forums($view_type, $page - 1, $sort_by, $sort_dir);
    }
    while ($forum_data = $result->fetch_assoc()) {
        $forum_fid = $forum_data['FID'];
        if (!isset($forum_data['FORUM_NAME']) || strlen(trim($forum_data['FORUM_NAME'])) < 1) {
            $forum_data['FORUM_NAME'] = gettext("A Beehive Forum");
        }
        if (!isset($forum_data['FORUM_DESC']) || strlen(trim($forum_data['FORUM_DESC'])) < 1) {
            $forum_data['FORUM_DESC'] = "";
        }
        if (!isset($forum_data['LAST_VISIT']) || is_null($forum_data['LAST_VISIT'])) {
            $forum_data['LAST_VISIT'] = 0;
        }
        $unread_cutoff_datetime = forum_get_unread_cutoff_datetime();
        $folders = folder_get_available_by_forum($forum_fid);
        if ($unread_cutoff_datetime !== false) {
            $sql = "SELECT SUM(THREAD.LENGTH) - SUM(COALESCE(USER_THREAD.LAST_READ, 0)) FROM `{$forum_data['PREFIX']}THREAD` THREAD ";
            $sql .= "LEFT JOIN `{$forum_data['PREFIX']}USER_THREAD` USER_THREAD ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '{$uid}') ";
            $sql .= "LEFT JOIN `{$forum_data['PREFIX']}USER_FOLDER` USER_FOLDER ON (USER_FOLDER.FID = THREAD.FID AND USER_FOLDER.UID = '{$uid}') ";
            $sql .= "WHERE THREAD.FID IN ({$folders}) AND (USER_FOLDER.INTEREST > -1 OR USER_FOLDER.INTEREST IS NULL) ";
            $sql .= "AND (USER_THREAD.INTEREST > -1 OR USER_THREAD.INTEREST IS NULL) ";
            $sql .= "AND (THREAD.MODIFIED > CAST('{$unread_cutoff_datetime}' AS DATETIME)) ";
            if (!($result_unread_count = $db->query($sql))) {
                return false;
            }
            list($unread_messages) = $result_unread_count->fetch_row();
            $forum_data['UNREAD_MESSAGES'] = $unread_messages;
        } else {
            $forum_data['UNREAD_MESSAGES'] = 0;
        }
        $sql = "SELECT COALESCE(SUM(THREAD.LENGTH), 0) FROM `{$forum_data['PREFIX']}THREAD` THREAD ";
        $sql .= "LEFT JOIN `{$forum_data['PREFIX']}USER_THREAD` USER_THREAD ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '{$uid}') ";
        $sql .= "LEFT JOIN `{$forum_data['PREFIX']}USER_FOLDER` USER_FOLDER ON (USER_FOLDER.FID = THREAD.FID AND USER_FOLDER.UID = '{$uid}') ";
        $sql .= "WHERE THREAD.FID IN ({$folders}) AND (USER_FOLDER.INTEREST > -1 OR USER_FOLDER.INTEREST IS NULL) ";
        $sql .= "AND (USER_THREAD.INTEREST > -1 OR USER_THREAD.INTEREST IS NULL) ";
        if (!($result_messages_count = $db->query($sql))) {
            return false;
        }
        list($num_messages) = $result_messages_count->fetch_row();
        $forum_data['NUM_MESSAGES'] = $num_messages;
        $sql = "SELECT COUNT(POST.PID) AS UNREAD_TO_ME ";
        $sql .= "FROM `{$forum_data['PREFIX']}THREAD` THREAD ";
        $sql .= "LEFT JOIN `{$forum_data['PREFIX']}POST` POST ";
        $sql .= "ON (POST.TID = THREAD.TID) WHERE THREAD.FID IN ({$folders}) ";
        $sql .= "AND POST.TO_UID = '{$uid}' AND POST.VIEWED IS NULL ";
        if (!($result_unread_to_me = $db->query($sql))) {
            return false;
        }
        list($unread_to_me) = $result_unread_to_me->fetch_row();
        $forum_data['UNREAD_TO_ME'] = $unread_to_me;
        if ($forum_data['NUM_MESSAGES'] < 0) {
            $forum_data['NUM_MESSAGES'] = 0;
        }
        if ($forum_data['UNREAD_MESSAGES'] < 0) {
            $forum_data['UNREAD_MESSAGES'] = 0;
        }
        if ($forum_data['UNREAD_TO_ME'] < 0) {
            $forum_data['UNREAD_TO_ME'] = 0;
        }
        $forums_array[] = $forum_data;
    }
    return array('forums_array' => $forums_array, 'forums_count' => $forums_count);
}