コード例 #1
0
function thread_search($thread_search, $selected_array = array())
{
    if (!($db = db::get())) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    $results_array = array();
    $fidlist = folder_get_available();
    $thread_search = $db->escape(str_replace("%", "", $thread_search));
    $selected_array = array_filter($selected_array, 'is_numeric');
    $sql = "SELECT DISTINCT THREAD.TID, TRIM(CONCAT_WS(' ', COALESCE(FOLDER.PREFIX, ''), THREAD.TITLE)) AS TITLE ";
    $sql .= "FROM `{$table_prefix}THREAD` THREAD LEFT JOIN `{$table_prefix}FOLDER` FOLDER ";
    $sql .= "ON (FOLDER.FID = THREAD.FID) WHERE THREAD.TITLE LIKE '{$thread_search}%' ";
    $sql .= "AND THREAD.FID IN ({$fidlist}) ";
    if (sizeof($selected_array) > 0) {
        $selected = implode(', ', $selected_array);
        $sql .= "AND THREAD.TID NOT IN ({$selected}) ";
    }
    $sql .= "LIMIT 10";
    if (!($result = $db->query($sql))) {
        return false;
    }
    $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";
    if (!($result_count = $db->query($sql))) {
        return false;
    }
    list($results_count) = $result_count->fetch_row();
    if ($result->num_rows == 0) {
        return false;
    }
    while ($thread_data = $result->fetch_assoc()) {
        $results_array[$thread_data['TID']] = $thread_data;
    }
    return array('results_count' => $results_count, 'results_array' => $results_array);
}
コード例 #2
0
ファイル: stats.inc.php プロジェクト: richstokoe/BeehiveForum
function stats_get_longest_thread()
{
    if (!($db = db::get())) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    // Get the folders the user can see.
    $folders = folder_get_available();
    // Find the longest thread.
    $sql = "SELECT MAX(LENGTH) FROM `{$table_prefix}THREAD` ";
    $sql .= "WHERE FID IN ({$folders})";
    if (!($result = $db->query($sql))) {
        return false;
    }
    list($highest_thread_count) = $result->fetch_row();
    $sql = "SELECT THREAD.TID, THREAD.LENGTH, ";
    $sql .= "TRIM(CONCAT_WS(' ', COALESCE(FOLDER.PREFIX, ''), THREAD.TITLE)) AS TITLE ";
    $sql .= "FROM `{$table_prefix}THREAD` THREAD LEFT JOIN `{$table_prefix}FOLDER` FOLDER ";
    $sql .= "ON (FOLDER.FID = THREAD.FID) WHERE THREAD.LENGTH = '{$highest_thread_count}' ";
    $sql .= "AND THREAD.DELETED = 'N' LIMIT 0, 1";
    if (!($result = $db->query($sql))) {
        return false;
    }
    if ($result->num_rows == 0) {
        return false;
    }
    return $result->fetch_assoc();
}
コード例 #3
0
ファイル: folder.inc.php プロジェクト: DeannaG65/BeehiveForum
function folders_search_user_subscriptions($folder_search, $interest_type = FOLDER_NOINTEREST, $page = 1)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!isset($_SESSION['UID']) || !is_numeric($_SESSION['UID'])) {
        return false;
    }
    if (!is_numeric($page)) {
        $page = 1;
    }
    if (!is_numeric($interest_type)) {
        $interest_type = FOLDER_NOINTEREST;
    }
    $offset = calculate_page_offset($page, 20);
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    $folder_search = $db->escape($folder_search);
    $folder_subscriptions_array = array();
    $folders = folder_get_available();
    if ($interest_type != FOLDER_NOINTEREST) {
        $sql = "SELECT SQL_CALC_FOUND_ROWS FOLDER.FID, FOLDER.TITLE, ";
        $sql .= "USER_FOLDER.INTEREST FROM `{$table_prefix}FOLDER` FOLDER ";
        $sql .= "LEFT JOIN `{$table_prefix}USER_FOLDER` USER_FOLDER ";
        $sql .= "ON (USER_FOLDER.FID = FOLDER.FID AND USER_FOLDER.UID = '{$_SESSION['UID']}') ";
        $sql .= "WHERE USER_FOLDER.INTEREST = '{$interest_type}' ";
        $sql .= "AND FOLDER.TITLE LIKE '{$folder_search}%' ";
        $sql .= "AND FOLDER.FID IN ({$folders}) ";
        $sql .= "ORDER BY FOLDER.POSITION DESC ";
        $sql .= "LIMIT {$offset}, 20";
    } else {
        $sql = "SELECT SQL_CALC_FOUND_ROWS FOLDER.FID, FOLDER.TITLE, ";
        $sql .= "USER_FOLDER.INTEREST FROM `{$table_prefix}FOLDER` FOLDER ";
        $sql .= "LEFT JOIN `{$table_prefix}USER_FOLDER` USER_FOLDER ";
        $sql .= "ON (USER_FOLDER.FID = FOLDER.FID AND USER_FOLDER.UID = '{$_SESSION['UID']}') ";
        $sql .= "WHERE FOLDER.FID IN ({$folders}) ";
        $sql .= "AND FOLDER.TITLE LIKE '{$folder_search}%' ";
        $sql .= "ORDER BY FOLDER.POSITION DESC ";
        $sql .= "LIMIT {$offset}, 20";
    }
    if (!($result = $db->query($sql))) {
        return false;
    }
    $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";
    if (!($result_count = $db->query($sql))) {
        return false;
    }
    list($folder_subscriptions_count) = $result_count->fetch_row();
    if ($result->num_rows == 0 && $folder_subscriptions_count > 0 && $page > 1) {
        return folders_search_user_subscriptions($folder_search, $interest_type, $page - 1);
    }
    while (($folder_data_array = $result->fetch_assoc()) !== null) {
        $folder_subscriptions_array[] = $folder_data_array;
    }
    return array('folder_count' => $folder_subscriptions_count, 'folder_array' => $folder_subscriptions_array);
}
コード例 #4
0
function threads_any_unread()
{
    if (!($db = db::get())) {
        return false;
    }
    if (!isset($_SESSION['UID']) || !is_numeric($_SESSION['UID'])) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    $fidlist = folder_get_available();
    $user_ignored = USER_IGNORED;
    $user_ignored_completely = USER_IGNORED_COMPLETELY;
    if (($unread_cutoff_datetime = forum_get_unread_cutoff_datetime()) === false) {
        return false;
    }
    $sql = "SELECT COUNT(THREAD.TID) AS UNREAD_THREAD_COUNT ";
    $sql .= "FROM `{$table_prefix}THREAD` THREAD ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_THREAD` USER_THREAD ";
    $sql .= "ON (THREAD.TID = USER_THREAD.TID AND USER_THREAD.UID = '{$_SESSION['UID']}') ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_PEER` USER_PEER ON ";
    $sql .= "(USER_PEER.UID = '{$_SESSION['UID']}' AND USER_PEER.PEER_UID = THREAD.BY_UID) ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_FOLDER` USER_FOLDER ON ";
    $sql .= "(USER_FOLDER.FID = THREAD.FID AND USER_FOLDER.UID = '{$_SESSION['UID']}') ";
    $sql .= "WHERE THREAD.FID in ({$fidlist}) AND THREAD.DELETED = 'N' ";
    $sql .= "AND ((USER_PEER.RELATIONSHIP & {$user_ignored_completely}) = 0 ";
    $sql .= "OR USER_PEER.RELATIONSHIP IS NULL) ";
    $sql .= "AND ((USER_PEER.RELATIONSHIP & {$user_ignored}) = 0 ";
    $sql .= "OR USER_PEER.RELATIONSHIP IS NULL OR THREAD.LENGTH > 1) ";
    $sql .= "AND (USER_THREAD.LAST_READ < THREAD.LENGTH OR USER_THREAD.LAST_READ IS NULL) ";
    $sql .= "AND THREAD.MODIFIED >= CAST('{$unread_cutoff_datetime}' AS DATETIME) ";
    $sql .= "AND (USER_THREAD.INTEREST IS NULL OR USER_THREAD.INTEREST > -1) ";
    $sql .= "AND (USER_FOLDER.INTEREST IS NULL OR USER_FOLDER.INTEREST > -1)";
    if (!($result = $db->query($sql))) {
        return false;
    }
    list($unread_thread_count) = $result->fetch_row();
    return $unread_thread_count > 0;
}
コード例 #5
0
function messages_get_most_recent_unread($uid, $fid = false)
{
    if (!($db = db::get())) {
        return false;
    }
    if (is_numeric($fid)) {
        $fidlist = $fid;
    } else {
        $fidlist = folder_get_available();
    }
    if (!is_numeric($uid)) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    if (($unread_cutoff_datetime = forum_get_unread_cutoff_datetime()) === false) {
        return false;
    }
    $unread_cutoff_timestamp = threads_get_unread_cutoff();
    $user_ignored_completely = USER_IGNORED_COMPLETELY;
    $user_ignored = USER_IGNORED;
    $sql = "SELECT THREAD.TID, UNIX_TIMESTAMP(THREAD.MODIFIED) AS MODIFIED, ";
    $sql .= "THREAD.LENGTH, USER_THREAD.LAST_READ, USER_PEER.RELATIONSHIP, ";
    $sql .= "THREAD.UNREAD_PID FROM `{$table_prefix}THREAD` THREAD ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_PEER` USER_PEER ON ";
    $sql .= "(USER_PEER.UID = '{$uid}' AND USER_PEER.PEER_UID = THREAD.BY_UID) ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_THREAD` USER_THREAD ";
    $sql .= "ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '{$uid}') ";
    $sql .= "LEFT JOIN `{$table_prefix}USER_FOLDER` USER_FOLDER ";
    $sql .= "ON (USER_FOLDER.FID = THREAD.FID AND USER_FOLDER.UID = '{$uid}') ";
    $sql .= "WHERE THREAD.FID in ({$fidlist}) AND THREAD.DELETED = 'N' ";
    $sql .= "AND THREAD.LENGTH > 0 AND (USER_PEER.RELATIONSHIP IS NULL ";
    $sql .= "OR (USER_PEER.RELATIONSHIP & {$user_ignored_completely}) = 0) ";
    $sql .= "AND ((USER_PEER.RELATIONSHIP & {$user_ignored}) = 0 ";
    $sql .= "OR USER_PEER.RELATIONSHIP IS NULL OR THREAD.LENGTH > 1) ";
    $sql .= "AND (USER_THREAD.LAST_READ < THREAD.LENGTH OR USER_THREAD.LAST_READ IS NULL) ";
    $sql .= "AND THREAD.MODIFIED > CAST('{$unread_cutoff_datetime}' AS DATETIME) ";
    $sql .= "AND (USER_THREAD.INTEREST IS NULL OR USER_THREAD.INTEREST > -1) ";
    $sql .= "AND (USER_FOLDER.INTEREST IS NULL OR USER_FOLDER.INTEREST > -1) ";
    $sql .= "ORDER BY THREAD.MODIFIED DESC LIMIT 0, 1";
    if (!($result = $db->query($sql))) {
        return false;
    }
    if ($result->num_rows == 0) {
        return false;
    }
    $message_data = $result->fetch_assoc();
    if (!session::logged_in()) {
        return "{$message_data['TID']}.1";
    } else {
        if (!isset($message_data['LAST_READ']) || !is_numeric($message_data['LAST_READ'])) {
            $message_data['LAST_READ'] = 1;
            if (isset($message_data['MODIFIED']) && $unread_cutoff_timestamp !== false && $message_data['MODIFIED'] < $unread_cutoff_timestamp) {
                $message_data['LAST_READ'] = $message_data['LENGTH'];
            } else {
                if (isset($message_data['UNREAD_PID']) && is_numeric($message_data['UNREAD_PID'])) {
                    $message_data['LAST_READ'] = $message_data['UNREAD_PID'];
                }
            }
            return "{$message_data['TID']}.{$message_data['LAST_READ']}";
        } else {
            if ($message_data['LAST_READ'] < $message_data['LENGTH']) {
                $message_data['LAST_READ']++;
            }
            return "{$message_data['TID']}.{$message_data['LAST_READ']}";
        }
    }
}