コード例 #1
0
ファイル: forum.inc.php プロジェクト: richstokoe/BeehiveForum
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);
}
コード例 #2
0
function thread_auto_prune_unread_data()
{
    if (!($db = db::get())) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    if (($unread_cutoff_datetime = forum_get_unread_cutoff_datetime()) !== false) {
        $sql = "DELETE QUICK FROM `{$table_prefix}USER_THREAD` ";
        $sql .= "USING `{$table_prefix}USER_THREAD` LEFT JOIN `{$table_prefix}THREAD` ";
        $sql .= "ON (`{$table_prefix}USER_THREAD`.`TID` = `{$table_prefix}THREAD`.`TID`) ";
        $sql .= "WHERE `{$table_prefix}THREAD`.`MODIFIED` IS NOT NULL ";
        $sql .= "AND `{$table_prefix}THREAD`.`MODIFIED` < CAST('{$unread_cutoff_datetime}' AS DATETIME) ";
        $sql .= "AND (`{$table_prefix}USER_THREAD`.`INTEREST` IS NULL ";
        $sql .= "OR `{$table_prefix}USER_THREAD`.`INTEREST` = 0)";
        if (!$db->query($sql)) {
            return false;
        }
    }
    return true;
}
コード例 #3
0
ファイル: post.inc.php プロジェクト: richstokoe/BeehiveForum
function post_update_thread_length($tid, $length)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    if (!is_numeric($tid)) {
        return false;
    }
    if (!is_numeric($length)) {
        return false;
    }
    $current_datetime = date(MYSQL_DATETIME, time());
    $sql = "UPDATE LOW_PRIORITY `{$table_prefix}THREAD` SET LENGTH = '{$length}', ";
    $sql .= "MODIFIED = CAST('{$current_datetime}' AS DATETIME) WHERE TID = '{$tid}'";
    if (!$db->query($sql)) {
        return false;
    }
    if (($unread_cutoff_datetime = forum_get_unread_cutoff_datetime()) !== false) {
        $sql = "INSERT INTO `{$table_prefix}THREAD` (TID, UNREAD_PID) ";
        $sql .= "SELECT THREAD.TID, MAX(POST.PID) AS UNREAD_PID FROM `{$table_prefix}THREAD` THREAD ";
        $sql .= "LEFT JOIN `{$table_prefix}POST` POST ON (POST.TID = THREAD.TID) ";
        $sql .= "WHERE POST.CREATED < CAST('{$unread_cutoff_datetime}' AS DATETIME) ";
        $sql .= "AND THREAD.TID = '{$tid}' GROUP BY THREAD.TID ";
        $sql .= "ON DUPLICATE KEY UPDATE UNREAD_PID = VALUES(UNREAD_PID)";
        if (!$db->query($sql)) {
            return false;
        }
    }
    return true;
}
コード例 #4
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']}";
        }
    }
}
コード例 #5
0
ファイル: thread.inc.php プロジェクト: DeannaG65/BeehiveForum
function thread_undelete($tid)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    if (!is_numeric($tid)) {
        return false;
    }
    if (!thread_can_be_undeleted($tid)) {
        return false;
    }
    $current_datetime = date(MYSQL_DATETIME, time());
    $modified_cutoff_datetime = forum_get_unread_cutoff_datetime();
    $sql = "UPDATE LOW_PRIORITY `{$table_prefix}THREAD` SET DELETED = 'N', ";
    $sql .= "MODIFIED = IF(MODIFIED < CAST('{$modified_cutoff_datetime}' AS DATETIME), ";
    $sql .= "MODIFIED, CAST('{$current_datetime}' AS DATETIME)) ";
    $sql .= "WHERE TID = '{$tid}'";
    if (!$db->query($sql)) {
        return false;
    }
    return true;
}
コード例 #6
0
ファイル: post.inc.php プロジェクト: DeannaG65/BeehiveForum
function post_delete($tid, $pid)
{
    if (!is_numeric($tid)) {
        return false;
    }
    if (!is_numeric($pid)) {
        return false;
    }
    if (!($table_prefix = get_table_prefix())) {
        return false;
    }
    if (!($db = db::get())) {
        return false;
    }
    if (!isset($_SESSION['UID']) || !is_numeric($_SESSION['UID'])) {
        return false;
    }
    $current_datetime = date(MYSQL_DATETIME, time());
    $modified_cutoff_datetime = forum_get_unread_cutoff_datetime();
    if (thread_is_poll($tid) && $pid == 1) {
        $sql = "UPDATE LOW_PRIORITY `{$table_prefix}THREAD` SET POLL_FLAG = 'N', ";
        $sql .= "MODIFIED = IF(MODIFIED < CAST('{$modified_cutoff_datetime}' AS DATETIME), ";
        $sql .= "MODIFIED, CAST('{$current_datetime}' AS DATETIME)) WHERE TID = '{$tid}'";
        if (!$db->query($sql)) {
            return false;
        }
    }
    $sql = "UPDATE LOW_PRIORITY `{$table_prefix}THREAD` SET DELETED = 'Y', ";
    $sql .= "MODIFIED = IF(MODIFIED < CAST('{$modified_cutoff_datetime}' AS DATETIME), ";
    $sql .= "MODIFIED, CAST('{$current_datetime}' AS DATETIME)) WHERE TID = '{$tid}' ";
    $sql .= "AND LENGTH = 1";
    if (!$db->query($sql)) {
        return false;
    }
    $sql = "UPDATE LOW_PRIORITY `{$table_prefix}POST_CONTENT` SET CONTENT = NULL ";
    $sql .= "WHERE TID = '{$tid}' AND PID = '{$pid}'";
    if (!$db->query($sql)) {
        return false;
    }
    $sql = "UPDATE LOW_PRIORITY `{$table_prefix}POST` ";
    $sql .= "SET APPROVED = CAST('{$current_datetime}' AS DATETIME), ";
    $sql .= "APPROVED_BY = '{$_SESSION['UID']}' WHERE TID = '{$tid}' ";
    $sql .= "AND PID = '{$pid}'";
    if (!$db->query($sql)) {
        return false;
    }
    post_delete_tags($tid, $pid);
    return true;
}
コード例 #7
0
ファイル: admin.inc.php プロジェクト: DeannaG65/BeehiveForum
function admin_delete_user($uid, $delete_content = false)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!is_numeric($uid)) {
        return false;
    }
    if (!is_bool($delete_content)) {
        $delete_content = false;
    }
    $current_datetime = date(MYSQL_DATETIME, time());
    // Mark as read cut off
    $modified_cutoff_datetime = forum_get_unread_cutoff_datetime();
    // UID of current user
    if (!isset($_SESSION['UID']) || !is_numeric($_SESSION['UID'])) {
        return false;
    }
    // Before we delete we verify the user account exists and that
    // the user is not the current user account.
    if (($user_logon = user_get_logon($uid)) && $_SESSION['UID'] != $uid) {
        // Check to see if we're also deleting the user's content.
        if ($delete_content === true) {
            // Get a list of available forums
            if (($forum_table_prefix_array = forum_get_all_prefixes()) !== false) {
                // Loop through all forums and delete all the user data from every forum.
                foreach ($forum_table_prefix_array as $forum_table_prefix) {
                    // Delete log entries created by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}ADMIN_LOG` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Links created by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}LINKS` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Link Votes made by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}LINKS_VOTE` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Link Comments made by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}LINKS_COMMENT` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Poll Votes made by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_POLL_VOTES` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Relationship data for the user and relationships
                    // with this user made by other users.
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_PEER` WHERE UID = '{$uid}' OR PEER_UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete folder preferences set by the user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_FOLDER` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete User's Preferences
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_PREFS` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete User's Profile.
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_PROFILE` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete User's Signature
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_SIG` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete User's Thread Read Data
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_THREAD` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete User's Tracking data (Post Count, etc.)
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}USER_TRACK` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Word Filter Entries made by user
                    $sql = "DELETE QUICK FROM `{$forum_table_prefix}WORD_FILTER` WHERE UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete Polls created by user
                    $sql = "UPDATE LOW_PRIORITY `{$forum_table_prefix}THREAD` SET POLL_FLAG = 'N', ";
                    $sql .= "MODIFIED = IF(MODIFIED < CAST('{$modified_cutoff_datetime}' AS DATETIME), ";
                    $sql .= "MODIFIED, CAST('{$current_datetime}' AS DATETIME)) WHERE BY_UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete threads started by the user where
                    // the thread only contains a single post.
                    $sql = "UPDATE LOW_PRIORITY `{$forum_table_prefix}THREAD` SET DELETED = 'Y', ";
                    $sql .= "MODIFIED = IF(MODIFIED < CAST('{$modified_cutoff_datetime}' AS DATETIME), ";
                    $sql .= "MODIFIED, CAST('{$current_datetime}' AS DATETIME)) WHERE BY_UID = '{$uid}' ";
                    $sql .= "AND LENGTH = 1";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Delete content of posts made by this user
                    $sql = "UPDATE LOW_PRIORITY `{$forum_table_prefix}POST_CONTENT` POST_CONTENT ";
                    $sql .= "LEFT JOIN `{$forum_table_prefix}POST` POST ON (POST.TID = POST_CONTENT.TID ";
                    $sql .= "AND POST.PID = POST_CONTENT.PID) SET POST_CONTENT.CONTENT = NULL ";
                    $sql .= "WHERE POST.FROM_UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                    // Mark posts made by this user as approved so they don't appear in the
                    // approval queue.
                    $sql = "UPDATE LOW_PRIORITY `{$forum_table_prefix}POST` ";
                    $sql .= "SET APPROVED = CAST('{$current_datetime}' AS DATETIME), ";
                    $sql .= "APPROVED_BY = '{$_SESSION['UID']}' WHERE FROM_UID = '{$uid}'";
                    if (!$db->query($sql)) {
                        return false;
                    }
                }
            }
            // Delete User Group Entries related to this user.
            $sql = "DELETE QUICK FROM GROUP_USERS WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Remove all PM_TYPE records
            $sql = "DELETE QUICK FROM PM_TYPE WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Remove all PM_RECIPIENT records
            $sql = "DELETE QUICK FROM PM_RECIPIENT WHERE TO_UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete any PMs from this user.
            $sql = "DELETE QUICK FROM PM WHERE FROM_UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Remove any PMs that have no recipients.
            $sql = "DELETE QUICK FROM PM, PM_CONTENT USING PM ";
            $sql .= "LEFT JOIN PM_CONTENT ON (PM_CONTENT.MID = PM.MID) ";
            $sql .= "LEFT JOIN PM_RECIPIENT ON (PM_RECIPIENT.MID = PM.MID) ";
            $sql .= "LEFT JOIN PM_TYPE ON (PM_TYPE.MID = PM.MID) ";
            $sql .= "WHERE PM_TYPE.MID IS NULL OR PM_RECIPIENT.MID IS NULL";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete all the attachments uploaded by the user.
            $sql = "SELECT HASH FROM POST_ATTACHMENT_FILES WHERE UID = '{$uid}'";
            if (!($result = $db->query($sql))) {
                return false;
            }
            while (($attachment_data = $result->fetch_assoc()) !== null) {
                attachments_delete($attachment_data['HASH']);
            }
            // Delete User's PM Search Results
            $sql = "DELETE QUICK FROM PM_SEARCH_RESULTS WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Attachments (doesn't remove the physical files).
            $sql = "DELETE QUICK FROM POST_ATTACHMENT_FILES WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Search Results.
            $sql = "DELETE QUICK FROM SEARCH_RESULTS WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Sessions
            $sql = "DELETE QUICK FROM SESSIONS WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Forum Preferences and Permissions
            $sql = "DELETE QUICK FROM USER_FORUM WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's History Data (Logon, Nickname, Email address changes)
            $sql = "DELETE QUICK FROM USER_HISTORY WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Global Preferences
            $sql = "DELETE QUICK FROM USER_PERM WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Global Preferences
            $sql = "DELETE QUICK FROM USER_PREFS WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Delete User's Visitor Log Data
            $sql = "DELETE QUICK FROM VISITOR_LOG WHERE UID = '{$uid}'";
            if (!$db->query($sql)) {
                return false;
            }
            // Add a log entry to show what we've done.
            admin_add_log_entry(DELETE_USER_DATA, array($uid, $user_logon));
        }
        // Delete the User account.
        $sql = "DELETE QUICK FROM USER WHERE UID = '{$uid}'";
        if (!$db->query($sql)) {
            return false;
        }
        // Add a log entry to show what we've done.
        admin_add_log_entry(DELETE_USER, array($user_logon));
        return true;
    }
    return false;
}
コード例 #8
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);
}