Esempio n. 1
0
/**
* 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;
}
Esempio n. 2
0
     $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;