function sp_delete_member_data($userid, $blog_id = '')
{
    if (!$userid) {
        return '';
    }
    global $wpdb;
    # if removing user from network site, make sure sp installed on that network site
    if (!empty($blog_id)) {
        $optionstable = $wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "sfoptions'");
        if (empty($optionstable)) {
            return;
        }
    }
    # 1: get users email address
    $user_email = sp_filter_email_save($wpdb->get_var('SELECT user_email from ' . $wpdb->prefix . "users WHERE ID={$userid}"));
    # 2: get the users display name from members table
    $display_name = $wpdb->get_var('SELECT display_name FROM ' . $wpdb->prefix . "sfmembers WHERE user_id = {$userid}");
    $display_name = sp_filter_name_save(maybe_unserialize($display_name));
    # 3: Set user name and email to guest name and meail in all of their posts
    $wpdb->query('UPDATE ' . $wpdb->prefix . "sfposts SET user_id=NULL, guest_name='{$display_name}', guest_email='{$user_email}' WHERE user_id={$userid}");
    # 7: Remove from recent members list if present
    sp_remove_newuser($userid);
    # 8: Remove from Members table
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfmembers WHERE user_id={$userid}");
    # 9: Remove user group memberships
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfmemberships WHERE user_id={$userid}");
    #10 check if forum moderator list needs updating
    sp_update_forum_moderators();
    do_action('sph_member_deleted', $userid);
}
Esempio n. 2
0
function sp_delete_member_data($userid, $blog_id = '', $delete_option = 'spguest', $reassign = 0)
{
    if (!$userid) {
        return '';
    }
    global $wpdb;
    # if removing user from network site, make sure sp installed on that network site
    if (!empty($blog_id)) {
        $optionstable = $wpdb->get_var("SHOW TABLES LIKE '" . $wpdb->prefix . "sfoptions'");
        if (empty($optionstable)) {
            return;
        }
    }
    # let plugins clean up from member removal first
    do_action('sph_member_deleted', $userid);
    # remove member from core
    $option = isset($_POST['sp_delete_option']) ? sp_esc_str($_POST['sp_delete_option']) : $delete_option;
    switch ($option) {
        case 'spreassign':
            $newuser = isset($_POST['sp_reassign_user']) ? sp_esc_int($_POST['sp_reassign_user']) : $reassign;
            # Set poster ID to the new user id
            $wpdb->query('UPDATE ' . $wpdb->prefix . "sfposts SET user_id={$newuser} WHERE user_id={$userid}");
            $wpdb->query('UPDATE ' . $wpdb->prefix . "sftopics SET user_id={$newuser} WHERE user_id={$userid}");
            break;
        case 'spdelete':
            # need to get topics for user posts to see if topic will be empty after deleting posts
            $topics = spdb_select('set', 'SELECT DISTINCT topic_id, forum_id FROM ' . SFPOSTS . " WHERE user_id={$userid}");
            # delete all the user posts
            spdb_query('DELETE FROM ' . SFPOSTS . " WHERE user_id={$userid}");
            # if any topics are now empty of posts, lets remove the topic and update the forum
            if (!empty($topics)) {
                foreach ($topics as $topic) {
                    $posts = spdb_table(SFPOSTS, "topic_id={$topic->topic_id}");
                    if (empty($posts)) {
                        spdb_query('DELETE FROM ' . SFTOPICS . " WHERE topic_id={$topic->topic_id}");
                    } else {
                        sp_build_post_index($topic->topic_id);
                    }
                    sp_build_forum_index($topic->forum_id);
                }
            }
            break;
        case 'spguest':
        default:
            # get users email address
            $user_email = sp_filter_email_save($wpdb->get_var('SELECT user_email from ' . $wpdb->prefix . "users WHERE ID={$userid}"));
            # get the users display name from members table
            $display_name = $wpdb->get_var('SELECT display_name FROM ' . $wpdb->prefix . "sfmembers WHERE user_id = {$userid}");
            $display_name = sp_filter_name_save(maybe_unserialize($display_name));
            # Set user name and email to guest name and meail in all of their posts
            $wpdb->query('UPDATE ' . $wpdb->prefix . "sfposts SET user_id=0, guest_name='{$display_name}', guest_email='{$user_email}' WHERE user_id={$userid}");
            $wpdb->query('UPDATE ' . $wpdb->prefix . "sftopics SET user_id=0 WHERE user_id={$userid}");
    }
    # flush and rebuild topic cache
    sp_rebuild_topic_cache();
    # remove from various core tables
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfmembers WHERE user_id={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfmemberships WHERE user_id={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfspecialranks WHERE user_id={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sftrack WHERE trackuserid={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfnotices WHERE user_id={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfuseractivity WHERE user_id={$userid}");
    $wpdb->query('DELETE FROM ' . $wpdb->prefix . "sfwaiting WHERE user_id={$userid}");
    # eemove from recent members list if present
    sp_remove_newuser($userid);
    # check if forum moderator list needs updating
    sp_update_forum_moderators();
}