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); }
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; }
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; }
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']}"; } } }
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; }
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; }
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; }
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); }