/** * Remove User */ function user_delete($mode, $user_id, $post_username = false) { global $cache, $config, $db, $user, $auth; global $phpbb_root_path, $phpEx; $sql = 'SELECT * FROM ' . USERS_TABLE . ' WHERE user_id = ' . $user_id; $result = $db->sql_query($sql); $user_row = $db->sql_fetchrow($result); $db->sql_freeresult($result); if (!$user_row) { return false; } // Before we begin, we will remove the reports the user issued. $sql = 'SELECT r.post_id, p.topic_id FROM ' . REPORTS_TABLE . ' r, ' . POSTS_TABLE . ' p WHERE r.user_id = ' . $user_id . ' AND p.post_id = r.post_id'; $result = $db->sql_query($sql); $report_posts = $report_topics = array(); while ($row = $db->sql_fetchrow($result)) { $report_posts[] = $row['post_id']; $report_topics[] = $row['topic_id']; } $db->sql_freeresult($result); if (sizeof($report_posts)) { $report_posts = array_unique($report_posts); $report_topics = array_unique($report_topics); // Get a list of topics that still contain reported posts $sql = 'SELECT DISTINCT topic_id FROM ' . POSTS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', $report_topics) . ' AND post_reported = 1 AND ' . $db->sql_in_set('post_id', $report_posts, true); $result = $db->sql_query($sql); $keep_report_topics = array(); while ($row = $db->sql_fetchrow($result)) { $keep_report_topics[] = $row['topic_id']; } $db->sql_freeresult($result); if (sizeof($keep_report_topics)) { $report_topics = array_diff($report_topics, $keep_report_topics); } unset($keep_report_topics); // Now set the flags back $sql = 'UPDATE ' . POSTS_TABLE . ' SET post_reported = 0 WHERE ' . $db->sql_in_set('post_id', $report_posts); $db->sql_query($sql); if (sizeof($report_topics)) { $sql = 'UPDATE ' . TOPICS_TABLE . ' SET topic_reported = 0 WHERE ' . $db->sql_in_set('topic_id', $report_topics); $db->sql_query($sql); } } // Remove reports $db->sql_query('DELETE FROM ' . REPORTS_TABLE . ' WHERE user_id = ' . $user_id); if ($user_row['user_avatar'] && $user_row['user_avatar_type'] == AVATAR_UPLOAD) { avatar_delete('user', $user_row); } switch ($mode) { case 'retain': $db->sql_transaction('begin'); if ($post_username === false) { $post_username = $user->lang['GUEST']; } // If the user is inactive and newly registered we assume no posts from this user being there... if ($user_row['user_type'] == USER_INACTIVE && $user_row['user_inactive_reason'] == INACTIVE_REGISTER && !$user_row['user_posts']) { } else { $sql = 'UPDATE ' . FORUMS_TABLE . ' SET forum_last_poster_id = ' . ANONYMOUS . ", forum_last_poster_name = '" . $db->sql_escape($post_username) . "', forum_last_poster_colour = ''\n\t\t\t\t\tWHERE forum_last_poster_id = {$user_id}"; $db->sql_query($sql); $sql = 'UPDATE ' . POSTS_TABLE . ' SET poster_id = ' . ANONYMOUS . ", post_username = '******'\n\t\t\t\t\tWHERE poster_id = {$user_id}"; $db->sql_query($sql); $sql = 'UPDATE ' . POSTS_TABLE . ' SET post_edit_user = '******'UPDATE ' . TOPICS_TABLE . ' SET topic_poster = ' . ANONYMOUS . ", topic_first_poster_name = '" . $db->sql_escape($post_username) . "', topic_first_poster_colour = ''\n\t\t\t\t\tWHERE topic_poster = {$user_id}"; $db->sql_query($sql); $sql = 'UPDATE ' . TOPICS_TABLE . ' SET topic_last_poster_id = ' . ANONYMOUS . ", topic_last_poster_name = '" . $db->sql_escape($post_username) . "', topic_last_poster_colour = ''\n\t\t\t\t\tWHERE topic_last_poster_id = {$user_id}"; $db->sql_query($sql); // Since we change every post by this author, we need to count this amount towards the anonymous user // Update the post count for the anonymous user if ($user_row['user_posts']) { $sql = 'UPDATE ' . USERS_TABLE . ' SET user_posts = user_posts + ' . $user_row['user_posts'] . ' WHERE user_id = ' . ANONYMOUS; $db->sql_query($sql); } } $db->sql_transaction('commit'); break; case 'remove': if (!function_exists('delete_posts')) { include $phpbb_root_path . 'includes/functions_admin.' . $phpEx; } $sql = 'SELECT topic_id, COUNT(post_id) AS total_posts FROM ' . POSTS_TABLE . "\n\t\t\t\tWHERE poster_id = {$user_id}\n\t\t\t\tGROUP BY topic_id"; $result = $db->sql_query($sql); $topic_id_ary = array(); while ($row = $db->sql_fetchrow($result)) { $topic_id_ary[$row['topic_id']] = $row['total_posts']; } $db->sql_freeresult($result); if (sizeof($topic_id_ary)) { $sql = 'SELECT topic_id, topic_replies, topic_replies_real FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', array_keys($topic_id_ary)); $result = $db->sql_query($sql); $del_topic_ary = array(); while ($row = $db->sql_fetchrow($result)) { if (max($row['topic_replies'], $row['topic_replies_real']) + 1 == $topic_id_ary[$row['topic_id']]) { $del_topic_ary[] = $row['topic_id']; } } $db->sql_freeresult($result); if (sizeof($del_topic_ary)) { $sql = 'DELETE FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', $del_topic_ary); $db->sql_query($sql); } } // Delete posts, attachments, etc. delete_posts('poster_id', $user_id); break; } $db->sql_transaction('begin'); $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, TOPICS_POSTED_TABLE, FORUMS_TRACK_TABLE, PROFILE_FIELDS_DATA_TABLE, MODERATOR_CACHE_TABLE, DRAFTS_TABLE, BOOKMARKS_TABLE); foreach ($table_ary as $table) { $sql = "DELETE FROM {$table}\n\t\t\tWHERE user_id = {$user_id}"; $db->sql_query($sql); } $cache->destroy('sql', MODERATOR_CACHE_TABLE); // Remove any undelivered mails... $sql = 'SELECT msg_id, user_id FROM ' . PRIVMSGS_TO_TABLE . ' WHERE author_id = ' . $user_id . ' AND folder_id = ' . PRIVMSGS_NO_BOX; $result = $db->sql_query($sql); $undelivered_msg = $undelivered_user = array(); while ($row = $db->sql_fetchrow($result)) { $undelivered_msg[] = $row['msg_id']; $undelivered_user[$row['user_id']][] = true; } $db->sql_freeresult($result); if (sizeof($undelivered_msg)) { $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); $db->sql_query($sql); } $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' WHERE author_id = ' . $user_id . ' AND folder_id = ' . PRIVMSGS_NO_BOX; $db->sql_query($sql); // Delete all to-information $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' WHERE user_id = ' . $user_id; $db->sql_query($sql); // Set the remaining author id to anonymous - this way users are still able to read messages from users being removed $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . ' SET author_id = ' . ANONYMOUS . ' WHERE author_id = ' . $user_id; $db->sql_query($sql); $sql = 'UPDATE ' . PRIVMSGS_TABLE . ' SET author_id = ' . ANONYMOUS . ' WHERE author_id = ' . $user_id; $db->sql_query($sql); foreach ($undelivered_user as $_user_id => $ary) { if ($_user_id == $user_id) { continue; } $sql = 'UPDATE ' . USERS_TABLE . ' SET user_new_privmsg = user_new_privmsg - ' . sizeof($ary) . ', user_unread_privmsg = user_unread_privmsg - ' . sizeof($ary) . ' WHERE user_id = ' . $_user_id; $db->sql_query($sql); } $db->sql_transaction('commit'); // Reset newest user info if appropriate if ($config['newest_user_id'] == $user_id) { update_last_username(); } // Decrement number of users if this user is active if ($user_row['user_type'] != USER_INACTIVE && $user_row['user_type'] != USER_IGNORE) { set_config('num_users', $config['num_users'] - 1, true); } //-- mod start : Garage ---------------------------------------------------------------------------------------------------- //-- add if (!class_exists('garage_vehicle')) { include $phpbb_root_path . 'includes/mods/class_garage_vehicle.' . $phpEx; } $garage_vehicle = new garage_vehicle(); $garage_vehicle->delete_user_vehicles($user_id); //-- mod finish : Garage --------------------------------------------------------------------------------------------------- return false; }
$member['user_sig'] = censor_text($member['user_sig']); if ($member['user_sig_bbcode_bitfield']) { include_once $phpbb_root_path . 'includes/bbcode.' . $phpEx; $bbcode = new bbcode(); $bbcode->bbcode_second_pass($member['user_sig'], $member['user_sig_bbcode_uid'], $member['user_sig_bbcode_bitfield']); } $member['user_sig'] = bbcode_nl2br($member['user_sig']); $member['user_sig'] = smiley_text($member['user_sig']); } $poster_avatar = get_user_avatar($member['user_avatar'], $member['user_avatar_type'], $member['user_avatar_width'], $member['user_avatar_height']); $template->assign_vars(show_profile($member)); //-- mod start : Garage ---------------------------------------------------------------------------------------------------- //-- add if ($garage_config['integrate_profile']) { include_once $phpbb_root_path . 'includes/mods/class_garage_vehicle.' . $phpEx; $garage_vehicle = new garage_vehicle(); $garage_vehicle->profile_integration($member['user_id']); } //-- mod finish : Garage --------------------------------------------------------------------------------------------------- // Custom Profile Fields $profile_fields = array(); if ($config['load_cpf_viewprofile']) { include_once $phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx; $cp = new custom_profile(); $profile_fields = $cp->generate_profile_fields_template('grab', $user_id); $profile_fields = isset($profile_fields[$user_id]) ? $cp->generate_profile_fields_template('show', false, $profile_fields[$user_id]) : array(); } // We need to check if the module 'zebra' is accessible $zebra_enabled = false; if ($user->data['user_id'] != $user_id && $user->data['is_registered']) { include_once $phpbb_root_path . 'includes/functions_module.' . $phpEx;