Skip to:
Content

BuddyPress.org

Changeset 8119


Ignore:
Timestamp:
03/13/2014 12:58:28 AM (6 years ago)
Author:
imath
Message:

Introduce Sign Ups Management

In Users Administration Screen, a new view is now available to manage the pending accounts of a site or of the network of sites. The following actions are supported:

  • Resend the activation email
  • Delete the pending account
  • Activate the pending account

The corresponding bulk actions are also supported. A search box is available in order to let the administrator easily find some specific pending accounts.

The registration process have also been modified so that multisite and regular configs handles it in a similar way. A mechnanism is in place to ensure plugin backward compatibility concerning the regular configs.

See #5374

props boonebgorges, imath

Fixes #4651

Location:
trunk
Files:
3 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/admin/bp-core-functions.php

    r8117 r8119  
    277277            'name' => __( 'Register', 'buddypress' )
    278278        );
     279
     280        bp_core_maybe_install_signups();
    279281    }
    280282
     
    791793<?php
    792794}
     795
     796/**
     797 * Check if the signups table needs to be created.
     798 *
     799 * @since BuddyPress (2.0.0)
     800 *
     801 * @global $wpdb
     802 */
     803function bp_core_maybe_install_signups() {
     804    global $wpdb;
     805
     806    // Multisite installations already have the signups table.
     807    if ( ! empty( $wpdb->signups ) ) {
     808        return;
     809    }
     810
     811    $bp_signups = bp_core_get_table_prefix() . 'signups';
     812
     813    // Check for the table
     814    $suppress = $wpdb->suppress_errors();
     815    $table_exists = $wpdb->get_results( "DESCRIBE {$bp_signups};" );
     816    $wpdb->suppress_errors( $suppress );
     817
     818    // Bail if the table exists
     819    if ( ! empty( $table_exists ) ) {
     820        return;
     821    }
     822
     823    // Signups is not there and we need it so let's create it
     824    require_once( buddypress()->plugin_dir . '/bp-core/admin/bp-core-schema.php' );
     825
     826    bp_core_install_signups();
     827}
  • trunk/bp-core/admin/bp-core-schema.php

    r7860 r8119  
    5151    if ( !empty( $active_components['blogs'] ) )
    5252        bp_core_install_blog_tracking();
     53
     54    // Install the signups table
     55    if ( bp_get_signup_allowed() )
     56        bp_core_install_signups();
     57
    5358}
    5459
     
    344349    dbDelta( $sql );
    345350}
     351
     352/**
     353 * Install the signups table.
     354 *
     355 * @since BuddyPress (2.0.0)
     356 *
     357 * @global $wpdb
     358 * @uses wp_get_db_schema() to get WordPress ms_global schema
     359 */
     360function bp_core_install_signups() {
     361    global $wpdb;
     362
     363    // Multisite installations already have the signups table
     364    if ( ! empty( $wpdb->signups ) ) {
     365        return;
     366    }
     367
     368    $wpdb->signups = bp_core_get_table_prefix() . 'signups';
     369
     370    // Setting the charset to be sure WordPress upgrade.php is loaded
     371    $charset_collate = bp_core_set_charset();
     372
     373    // Use WP's core CREATE TABLE query
     374    $create_queries = wp_get_db_schema( 'ms_global' );
     375
     376    if ( ! is_array( $create_queries ) ) {
     377        $create_queries = explode( ';', $create_queries );
     378        $create_queries = array_filter( $create_queries );
     379    }
     380
     381    // Filter out all the queries except wp_signups
     382    foreach ( $create_queries as $key => $query ) {
     383        if ( preg_match( "|CREATE TABLE ([^ ]*)|", $query, $matches ) ) {
     384            if ( $wpdb->signups != trim( $matches[1], '`' ) ) {
     385                unset( $create_queries[ $key ] );
     386            }
     387        }
     388    }
     389
     390    if ( ! empty( $create_queries ) ) {
     391        dbDelta( $create_queries );
     392    }
     393}
  • trunk/bp-core/bp-core-update.php

    r7989 r8119  
    366366    $wpdb->query( $sql );
    367367
     368    /** Migrate signups data *********************************************/
     369
     370    if ( bp_get_signup_allowed() && ! is_multisite() ) {
     371
     372        if ( empty( $wpdb->signups ) ) {
     373            bp_core_install_signups();
     374        }
     375
     376        $signups = get_users( array(
     377            'fields'       => 'all_with_meta',
     378            'meta_key'     => 'activation_key',
     379            'meta_compare' => 'EXISTS',
     380        ) );
     381
     382        if ( empty( $signups ) ) {
     383            return;
     384        }
     385
     386        foreach ( $signups as $signup ) {
     387            $meta = array();
     388
     389            if ( bp_is_active( 'xprofile' ) ) {
     390                $meta['field_1'] = $signup->display_name;
     391            }
     392
     393            $meta['password'] = $signup->user_pass;
     394
     395            $user_login = preg_replace( '/\s+/', '', sanitize_user( $signup->user_login, true ) );
     396            $user_email = sanitize_email( $signup->user_email );
     397
     398            $args = array(
     399                'user_login'     => $user_login,
     400                'user_email'     => $user_email,
     401                'registered'     => $signup->user_registered,
     402                'activation_key' => $signup->activation_key,
     403                'meta'           => $meta
     404            );
     405
     406            BP_Signup::add( $args );
     407
     408            // Deleting these options will remove signups from users count
     409            delete_user_option( $signup->ID, 'capabilities' );
     410            delete_user_option( $signup->ID, 'user_level' );
     411        }
     412    }
     413
    368414    /** Add BP options to the options table ******************************/
    369415    bp_add_options();
  • trunk/bp-members/bp-members-admin.php

    r8030 r8119  
    117117        // BuddyPress edit user's profile url
    118118        $this->edit_profile_url = add_query_arg( 'page', 'bp-profile-edit', bp_get_admin_url( 'users.php' ) );
     119
     120        // Data specific to signups
     121        $this->users_page   = '';
     122        $this->signups_page = '';
     123        $this->users_url    = bp_get_admin_url( 'users.php' );
     124        $this->users_screen = bp_core_do_network_admin() ? 'users-network' : 'users';
    119125    }
    120126
     
    127133    private function setup_actions() {
    128134
    129         /** Actions ***************************************************/
     135        /** Community Profile ***************************************************/
    130136
    131137        // Add some page specific output to the <head>
     
    141147        add_action( 'edit_user_profile',        array( $this, 'profile_nav'     ),  99, 1 );
    142148
    143 
    144         /** Filters ***************************************************/
    145 
    146149        // Add a row action to users listing
    147150        add_filter( bp_core_do_network_admin() ? 'ms_user_row_actions' : 'user_row_actions', array( $this, 'row_actions' ), 10, 2 );
    148151
    149     }
    150 
    151     /**
    152      * Create the All Users > Edit Profile submenu.
     152        /** Signups **************************************************************/
     153
     154        if ( bp_get_signup_allowed() ) {
     155            if ( ! is_multisite() && is_admin() ) {
     156                add_action( 'pre_user_query', array( $this, 'remove_signups_from_user_query'),  10, 1 );
     157            }
     158
     159            // Reorganise the views navigation in users.php and signups page
     160            add_filter( "views_{$this->users_screen}", array( $this, 'signup_filter_view' ),    10, 1 );
     161            add_filter( 'set-screen-option',           array( $this, 'signup_screen_options' ), 10, 3 );
     162        }
     163    }
     164
     165    /**
     166     * Create the All Users > Edit Profile and Signups submenus.
    153167     *
    154168     * @access public
     
    160174
    161175        // Manage user's profile
    162         $hook = $this->user_page = add_users_page(
     176        $hooks['user'] = $this->user_page = add_users_page(
    163177            __( 'Edit Profile',  'buddypress' ),
    164178            __( 'Edit Profile',  'buddypress' ),
     
    168182        );
    169183
     184        $hooks['signups'] = $this->users_page = add_users_page(
     185            __( 'Manage Signups',  'buddypress' ),
     186            __( 'Manage Signups',  'buddypress' ),
     187            'bp_moderate',
     188            'bp-signups',
     189            array( &$this, 'signups_admin' )
     190        );
     191
    170192        $edit_page = 'user-edit';
     193        $this->users_page = 'users';
    171194
    172195        if ( bp_core_do_network_admin() ) {
    173             $edit_page       .= '-network';
    174             $this->user_page .= '-network';
     196            $edit_page          .= '-network';
     197            $this->users_page   .= '-network';
     198            $this->user_page    .= '-network';
     199            $this->signups_page .= '-network';
    175200        }
    176201
    177202        $this->screen_id = array( $edit_page, $this->user_page );
    178203
    179         add_action( "admin_head-$hook", array( $this, 'modify_admin_menu_highlight' ) );
    180         add_action( "load-$hook",       array( $this, 'user_admin_load' ) );
    181 
    182     }
     204        foreach ( $hooks as $key => $hook ) {
     205            add_action( "admin_head-$hook", array( $this, 'modify_admin_menu_highlight' ) );
     206            add_action( "load-$hook",       array( $this, $key . '_admin_load' ) );
     207        }
     208
     209    }
     210
     211    /**
     212     * Highlight the Users menu if on Edit Profile or Signups pages.
     213     *
     214     * @access public
     215     * @since BuddyPress (2.0.0)
     216     */
     217    public function modify_admin_menu_highlight() {
     218        global $plugin_page, $submenu_file;
     219
     220        // Only Show the All users menu
     221        if ( in_array( $plugin_page, array( 'bp-profile-edit', 'bp-signups' ) ) ) {
     222            $submenu_file = 'users.php';
     223        }
     224    }
     225
     226    /**
     227     * Remove the Edit Profile & Signups submenu page.
     228     *
     229     * We add these pages in order to integrate with WP's Users panel, but
     230     * we want them to show up as Views of the WP panel, not as separate
     231     * subnav items under the Users menu.
     232     *
     233     * @access public
     234     * @since BuddyPress (2.0.0)
     235     */
     236    public function admin_head() {
     237        // Remove submenu to force using Profile Navigation
     238        remove_submenu_page( 'users.php', 'bp-profile-edit' );
     239
     240        // Remove submenu to force using users views
     241        remove_submenu_page( 'users.php', 'bp-signups' );
     242    }
     243
     244    /** Community Profile ************************************************/
    183245
    184246    /**
     
    246308
    247309        <?php
    248     }
    249 
    250     /**
    251      * Highlight the Users menu if on Edit Profile pages.
    252      *
    253      * @access public
    254      * @since BuddyPress (2.0.0)
    255      */
    256     public function modify_admin_menu_highlight() {
    257         global $plugin_page, $submenu_file;
    258 
    259         // Only Show the All users menu
    260         if ( 'bp-profile-edit' ==  $plugin_page ) {
    261             $submenu_file = 'users.php';
    262         }
    263     }
    264 
    265     /**
    266      * Remove the Edit Profile submenu page.
    267      *
    268      * @access public
    269      * @since BuddyPress (2.0.0)
    270      */
    271     public function admin_head() {
    272         // Remove submenu to force using Profile Navigation
    273         remove_submenu_page( 'users.php', 'bp-profile-edit' );
    274310    }
    275311
     
    691727        return array_merge( $new_edit_actions, $actions );
    692728    }
     729
     730    /** Signups Management ***********************************************/
     731
     732    /**
     733     * Display the admin preferences about signups pagination.
     734     *
     735     * @access public
     736     * @since BuddyPress (2.0.0)
     737     *
     738     * @param  int $value
     739     * @param  string $option
     740     * @param  int $new_value
     741     * @return int the pagination preferences
     742     */
     743    public function signup_screen_options( $value = 0, $option = '', $new_value = 0 ) {
     744        if ( 'users_page_bp_signups_network_per_page' != $option && 'users_page_bp_signups_per_page' != $option ) {
     745            return $value;
     746        }
     747
     748        // Per page
     749        $new_value = (int) $new_value;
     750        if ( $new_value < 1 || $new_value > 999 ) {
     751            return $value;
     752        }
     753
     754        return $new_value;
     755    }
     756
     757    /**
     758     * Make sure no signups will show in users list.
     759     *
     760     * This is needed to handle signups that may have not been activated
     761     * before the 2.0.0 upgrade.
     762     *
     763     * @since BuddyPress (2.0.0)
     764     *
     765     * @param  WP_User_Query $query The users query.
     766     * @return WP_User_Query The users query without the signups.
     767     */
     768    public function remove_signups_from_user_query( $query = null ) {
     769        global $wpdb;
     770
     771        // Bail if this is an ajax request
     772        if ( defined( 'DOING_AJAX' ) )
     773            return;
     774
     775        if ( bp_is_update() ) {
     776            return;
     777        }
     778
     779        if ( $this->users_page != get_current_screen()->id ) {
     780            return;
     781        }
     782
     783        if ( ! empty( $query->query_vars['role'] ) ) {
     784            return;
     785        }
     786
     787        $query->query_where .= " AND {$wpdb->users}.user_status != 2";
     788    }
     789
     790    /**
     791     * Filter the WP Users List Table views to include 'bp-signups'.
     792     *
     793     * @since BuddyPress (2.0.0)
     794     *
     795     * @param  array $views WP List Table views.
     796     * @return array The views with the signup view added.
     797     */
     798    public function signup_filter_view( $views = array() ) {
     799        $class = '';
     800
     801        $signups = BP_Signup::count_signups();
     802
     803        // Remove the 'current' class from All if we're on the signups
     804        // view
     805        if ( $this->signups_page == get_current_screen()->id ) {
     806            $views['all'] = str_replace( 'class="current"', '', $views['all'] );
     807            $class = ' class="current"';
     808        }
     809
     810        $views['registered'] = '<a href="' . add_query_arg( 'page', 'bp-signups', bp_get_admin_url( 'users.php' ) ) . '"' . $class . '>' . sprintf( _nx( 'Pending account <span class="count">(%s)</span>', 'Pending accounts <span class="count">(%s)</span>', $signups, 'signup users', 'buddypress' ), number_format_i18n( $signups ) ) . '</a>';
     811
     812        return $views;
     813    }
     814
     815    /**
     816     * Load the Signup WP Users List table.
     817     *
     818     * @since BuddyPress (2.0.0)
     819     *
     820     * @param  string $class    The name of the class to use.
     821     * @param  string $required The parent class.
     822     * @return WP_List_Table    The List table.
     823     */
     824    public static function get_list_table_class( $class = '', $required = '' ) {
     825        if ( empty( $class ) ) {
     826            return;
     827        }
     828
     829        if ( ! empty( $required ) ) {
     830            require_once( ABSPATH . 'wp-admin/includes/class-wp-' . $required . '-list-table.php' );
     831            require_once( buddypress()->members->admin->admin_dir . 'bp-members-classes.php'    );
     832        }
     833
     834        return new $class();
     835    }
     836
     837    /**
     838     * Set up the signups admin page.
     839     *
     840     * Loaded before the page is rendered, this function does all initial
     841     * setup, including: processing form requests, registering contextual
     842     * help, and setting up screen options.
     843     *
     844     * @since BuddyPress (2.0.0)
     845     *
     846     * @global $bp_members_signup_list_table
     847     */
     848    public function signups_admin_load() {
     849        global $bp_members_signup_list_table;
     850
     851        // Build redirection URL
     852        $redirect_to = remove_query_arg( array( 'action', 'error', 'updated', 'activated', 'notactivated', 'deleted', 'notdeleted', 'resent', 'notresent', 'do_delete', 'do_resend', 'do_activate', '_wpnonce', 'signup_ids' ), $_SERVER['REQUEST_URI'] );
     853        $doaction = bp_admin_list_table_current_bulk_action();
     854
     855        // Call an action for plugins to hook in early
     856        do_action( 'bp_signups_admin_load', $doaction, $_REQUEST );
     857
     858        // Allowed actions
     859        $allowed_actions = apply_filters( 'bp_signups_admin_allowed_actions', array( 'do_delete', 'do_activate', 'do_resend' ) );
     860
     861        // Prepare the display of the Community Profile screen
     862        if ( ! in_array( $doaction, $allowed_actions ) || -1 == $doaction ) {
     863
     864            if ( bp_core_do_network_admin() ) {
     865                $bp_members_signup_list_table = self::get_list_table_class( 'BP_Members_MS_List_Table', 'ms-users' );
     866            } else {
     867                $bp_members_signup_list_table = self::get_list_table_class( 'BP_Members_List_Table', 'users' );
     868            }
     869
     870            // per_page screen option
     871            add_screen_option( 'per_page', array( 'label' => _x( 'Pending Accounts', 'Pending Accounts per page (screen options)', 'buddypress' ) ) );
     872
     873            get_current_screen()->add_help_tab( array(
     874                'id'      => 'bp-signups-overview',
     875                'title'   => __( 'Overview', 'buddypress' ),
     876                'content' =>
     877                '<p>' . __( 'This is the admininistration screen for pending accounts on your site.', 'buddypress' ) . '</p>' .
     878                '<p>' . __( 'From the screen options, you can customize the displayed columns and the pagination of this screen.', 'buddypress' ) . '</p>' .
     879                '<p>' . __( 'You can reorder the list of your pending accounts by clicking on the Username, E-mail or Registered column headers.', 'buddypress' ) . '</p>' .
     880                '<p>' . __( 'Using the search form, you can find pending accounts more easily. The Username and E-mail fields will be included in the search.', 'buddypress' ) . '</p>'
     881            ) );
     882
     883            get_current_screen()->add_help_tab( array(
     884                'id'      => 'bp-signups-actions',
     885                'title'   => __( 'Actions', 'buddypress' ),
     886                'content' =>
     887                '<p>' . __( 'Hovering over a row in the pending accounts list will display action links that allow you to manage pending accounts. You can perform the following actions:', 'buddypress' ) . '</p>' .
     888                '<ul><li>' . __( '"Email" takes you to the confirmation screen before being able to send the activation link to the desired pending account. You can only send the activation email once per day.', 'buddypress' ) . '</li>' .
     889                '<li>' . __( '"Delete" allows you to delete a pending account from your site. You will be asked to confirm this deletion.', 'buddypress' ) . '</li></ul>' .
     890                '<p>' . __( 'By clicking on a Username you will be able to activate a pending account from the confirmation screen.', 'buddypress' ) . '</p>' .
     891                '<p>' . __( 'Bulk actions allow you to perform these 3 actions for the selected rows.', 'buddypress' ) . '</p>'
     892            ) );
     893
     894            // Help panel - sidebar links
     895            get_current_screen()->set_help_sidebar(
     896                '<p><strong>' . __( 'For more information:', 'buddypress' ) . '</strong></p>' .
     897                '<p>' . __( '<a href="http://buddypress.org/support/">Support Forums</a>', 'buddypress' ) . '</p>'
     898            );
     899        } else {
     900            if ( ! empty( $_REQUEST['signup_ids' ] ) ) {
     901                $signups = wp_parse_id_list( $_REQUEST['signup_ids' ] );
     902            }
     903
     904            // Handle resent activation links
     905            if ( 'do_resend' == $doaction ) {
     906                // nonce check
     907                check_admin_referer( 'signups_resend' );
     908
     909                $resent = BP_Signup::resend( $signups );
     910
     911                if ( empty( $resent ) ) {
     912                    $redirect_to = add_query_arg( 'error', $doaction, $redirect_to );
     913                } else {
     914                    $query_arg = array( 'updated' => 'resent' );
     915
     916                    if ( ! empty( $resent['resent'] ) ) {
     917                        $query_arg['resent'] = count( $resent['resent'] );
     918                    }
     919
     920                    if ( ! empty( $resent['errors'] ) ) {
     921                        $query_arg['notsent'] = count( $resent['errors'] );
     922                        set_transient( '_bp_admin_signups_errors', $resent['errors'], 30 );
     923                    }
     924
     925                    $redirect_to = add_query_arg( $query_arg, $redirect_to );
     926                }
     927
     928                bp_core_redirect( $redirect_to );
     929
     930            // Handle activated accounts
     931            } else if ( 'do_activate' == $doaction ) {
     932                // nonce check
     933                check_admin_referer( 'signups_activate' );
     934
     935                $activated = BP_Signup::activate( $signups );
     936
     937                if ( empty( $activated ) ) {
     938                    $redirect_to = add_query_arg( 'error', $doaction, $redirect_to );
     939                } else {
     940                    $query_arg = array( 'updated' => 'activated' );
     941
     942                    if ( ! empty( $activated['activated'] ) ) {
     943                        $query_arg['activated'] = count( $activated['activated'] );
     944                    }
     945
     946                    if ( ! empty( $activated['errors'] ) ) {
     947                        $query_arg['notactivated'] = count( $activated['errors'] );
     948                        set_transient( '_bp_admin_signups_errors', $activated['errors'], 30 );
     949                    }
     950
     951                    $redirect_to = add_query_arg( $query_arg, $redirect_to );
     952                }
     953
     954                bp_core_redirect( $redirect_to );
     955
     956            // Handle sign-ups delete
     957            } else if ( 'do_delete' == $doaction ) {
     958                // nonce check
     959                check_admin_referer( 'signups_delete' );
     960
     961                $deleted = BP_Signup::delete( $signups );
     962
     963                if ( empty( $deleted ) ) {
     964                    $redirect_to = add_query_arg( 'error', $doaction, $redirect_to );
     965                } else {
     966                    $query_arg = array( 'updated' => 'deleted' );
     967
     968                    if ( ! empty( $deleted['deleted'] ) ) {
     969                        $query_arg['deleted'] = count( $deleted['deleted'] );
     970                    }
     971
     972                    if ( ! empty( $deleted['errors'] ) ) {
     973                        $query_arg['notdeleted'] = count( $deleted['errors'] );
     974                        set_transient( '_bp_admin_signups_errors', $deleted['errors'], 30 );
     975                    }
     976
     977                    $redirect_to = add_query_arg( $query_arg, $redirect_to );
     978                }
     979
     980                bp_core_redirect( $redirect_to );
     981
     982            // Plugins can update other stuff from here
     983            } else {
     984                $this->redirect = $redirect_to;
     985
     986                do_action( 'bp_members_admin_update_signups', $doaction, $_REQUEST, $this->redirect );
     987
     988                bp_core_redirect( $this->redirect );
     989            }
     990        }
     991    }
     992
     993    /**
     994     * Display any activation errors.
     995     *
     996     * @since BuddyPress (2.0.0)
     997     */
     998    public function signups_display_errors() {
     999        // Bail if no activation errors
     1000        if ( ! $errors = get_transient( '_bp_admin_signups_errors' ) ) {
     1001            return;
     1002        }
     1003
     1004        foreach ( $errors as $error ) {
     1005            ?>
     1006            <li><?php echo esc_html( $error[0] );?>: <?php echo esc_html( $error[1] );?></li>
     1007            <?php
     1008        }
     1009
     1010        // Delete the redirect transient
     1011        delete_transient( '_bp_admin_signups_errors' );
     1012    }
     1013
     1014    /**
     1015     * Signups admin page router.
     1016     *
     1017     * Depending on the context, display
     1018     * - the list of signups
     1019     * - or the delete confirmation screen
     1020     * - or the activate confirmation screen
     1021     * - or the "resend" email confirmation screen
     1022     *
     1023     * Also prepare the admin notices.
     1024     *
     1025     * @since BuddyPress (2.0.0)
     1026     */
     1027    public function signups_admin() {
     1028        $doaction = bp_admin_list_table_current_bulk_action();
     1029
     1030        // Prepare notices for admin
     1031        $notice = array();
     1032
     1033        if ( ! empty( $_REQUEST['updated'] ) ) {
     1034            switch ( $_REQUEST['updated'] ) {
     1035                case 'resent':
     1036                    $notice = array(
     1037                        'class'   => 'updated',
     1038                        'message' => ''
     1039                    );
     1040
     1041                    if ( ! empty( $_REQUEST['resent'] ) ) {
     1042                        $notice['message'] .= sprintf(
     1043                            _nx( '%s activation email successfully sent! ', '%s activation emails successfully sent! ',
     1044                             absint( $_REQUEST['resent'] ),
     1045                             'signup resent',
     1046                             'buddypress'
     1047                            ),
     1048                            number_format_i18n( absint( $_REQUEST['resent'] ) )
     1049                        );
     1050                    }
     1051
     1052                    if ( ! empty( $_REQUEST['notsent'] ) ) {
     1053                        $notice['message'] .= sprintf(
     1054                            _nx( '%s activation email was not sent.', '%s activation emails were not sent.',
     1055                             absint( $_REQUEST['notsent'] ),
     1056                             'signup notsent',
     1057                             'buddypress'
     1058                            ),
     1059                            number_format_i18n( absint( $_REQUEST['notsent'] ) )
     1060                        );
     1061
     1062                        if ( empty( $_REQUEST['resent'] ) ) {
     1063                            $notice['class'] = 'error';
     1064                        }
     1065                    }
     1066
     1067                    break;
     1068
     1069                case 'activated':
     1070                    $notice = array(
     1071                        'class'   => 'updated',
     1072                        'message' => ''
     1073                    );
     1074
     1075                    if ( ! empty( $_REQUEST['activated'] ) ) {
     1076                        $notice['message'] .= sprintf(
     1077                            _nx( '%s account successfully activated! ', '%s accounts successfully activated! ',
     1078                             absint( $_REQUEST['activated'] ),
     1079                             'signup resent',
     1080                             'buddypress'
     1081                            ),
     1082                            number_format_i18n( absint( $_REQUEST['activated'] ) )
     1083                        );
     1084                    }
     1085
     1086                    if ( ! empty( $_REQUEST['notactivated'] ) ) {
     1087                        $notice['message'] .= sprintf(
     1088                            _nx( '%s account was not activated.', '%s accounts were not activated.',
     1089                             absint( $_REQUEST['notactivated'] ),
     1090                             'signup notsent',
     1091                             'buddypress'
     1092                            ),
     1093                            number_format_i18n( absint( $_REQUEST['notactivated'] ) )
     1094                        );
     1095
     1096                        if ( empty( $_REQUEST['activated'] ) ) {
     1097                            $notice['class'] = 'error';
     1098                        }
     1099                    }
     1100
     1101                    break;
     1102
     1103                case 'deleted':
     1104                    $notice = array(
     1105                        'class'   => 'updated',
     1106                        'message' => ''
     1107                    );
     1108
     1109                    if ( ! empty( $_REQUEST['deleted'] ) ) {
     1110                        $notice['message'] .= sprintf(
     1111                            _nx( '%s sign-up successfully deleted!', '%s sign-ups successfully deleted!',
     1112                             absint( $_REQUEST['deleted'] ),
     1113                             'signup deleted',
     1114                             'buddypress'
     1115                            ),
     1116                            number_format_i18n( absint( $_REQUEST['deleted'] ) )
     1117                        );
     1118                    }
     1119
     1120                    if ( ! empty( $_REQUEST['notdeleted'] ) ) {
     1121                        $notice['message'] .= sprintf(
     1122                            _nx( '%s sign-up was not deleted.', '%s sign-ups were not deleted.',
     1123                             absint( $_REQUEST['notdeleted'] ),
     1124                             'signup notdeleted',
     1125                             'buddypress'
     1126                            ),
     1127                            number_format_i18n( absint( $_REQUEST['notdeleted'] ) )
     1128                        );
     1129
     1130                        if ( empty( $_REQUEST['deleted'] ) ) {
     1131                            $notice['class'] = 'error';
     1132                        }
     1133                    }
     1134
     1135                    break;
     1136            }
     1137        }
     1138
     1139        // Process error messages
     1140        if ( ! empty( $_REQUEST['error'] ) ) {
     1141            switch ( $_REQUEST['error'] ) {
     1142                case 'do_resend':
     1143                    $notice = array(
     1144                        'class'   => 'error',
     1145                        'message' => esc_html__( 'There was a problem sending the activation emails, please try again.', 'buddypress' ),
     1146                    );
     1147                    break;
     1148
     1149                case 'do_activate':
     1150                    $notice = array(
     1151                        'class'   => 'error',
     1152                        'message' => esc_html__( 'There was a problem activating accounts, please try again.', 'buddypress' ),
     1153                    );
     1154                    break;
     1155
     1156                case 'do_delete':
     1157                    $notice = array(
     1158                        'class'   => 'error',
     1159                        'message' => esc_html__( 'There was a problem deleting sign-ups, please try again.', 'buddypress' ),
     1160                    );
     1161                    break;
     1162            }
     1163        }
     1164
     1165        // Display notices
     1166        if ( ! empty( $notice ) ) :
     1167            if ( 'updated' === $notice['class'] ) : ?>
     1168                <div id="message" class="<?php echo esc_attr( $notice['class'] ); ?>">
     1169            <?php else: ?>
     1170                <div class="<?php echo esc_attr( $notice['class'] ); ?>">
     1171            <?php endif; ?>
     1172                <p><?php echo $notice['message']; ?></p>
     1173                <?php if ( ! empty( $_REQUEST['notactivated'] ) || ! empty( $_REQUEST['notdeleted'] ) || ! empty( $_REQUEST['notsent'] ) ) :?>
     1174                    <ul><?php $this->signups_display_errors();?></ul>
     1175                <?php endif ;?>
     1176            </div>
     1177        <?php endif;
     1178
     1179        // Show the proper screen
     1180        switch ( $doaction ) {
     1181            case 'activate' :
     1182            case 'delete' :
     1183            case 'resend' :
     1184                $this->signups_admin_manage( $doaction );
     1185                break;
     1186
     1187            default:
     1188                $this->signups_admin_index();
     1189                break;
     1190
     1191        }
     1192    }
     1193
     1194    /**
     1195     * This is the list of the Pending accounts (signups).
     1196     *
     1197     * @since BuddyPress (2.0.0)
     1198     *
     1199     * @global $plugin_page
     1200     * @global $bp_members_signup_list_table
     1201     */
     1202    public function signups_admin_index() {
     1203        global $plugin_page, $bp_members_signup_list_table;
     1204
     1205        $usersearch = ! empty( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
     1206
     1207        // Prepare the group items for display
     1208        $bp_members_signup_list_table->prepare_items();
     1209
     1210        $form_url = add_query_arg(
     1211            array(
     1212                'page' => 'bp-signups',
     1213            ),
     1214            bp_get_admin_url( 'users.php' )
     1215        );
     1216
     1217        $search_form_url = remove_query_arg(
     1218            array(
     1219                'action',
     1220                'deleted',
     1221                'notdeleted',
     1222                'error',
     1223                'updated',
     1224                'delete',
     1225                'activate',
     1226                'activated',
     1227                'notactivated',
     1228                'resend',
     1229                'resent',
     1230                'notresent',
     1231                'do_delete',
     1232                'do_activate',
     1233                'do_resend',
     1234                'action2',
     1235                '_wpnonce',
     1236                'signup_ids'
     1237            ), $_SERVER['REQUEST_URI']
     1238        );
     1239
     1240        ?>
     1241
     1242        <div class="wrap">
     1243            <?php screen_icon( 'users' ); ?>
     1244            <h2>
     1245                <?php
     1246                _e( 'Users', 'buddypress' );
     1247                if ( current_user_can( 'create_users' ) ) { ?>
     1248                    <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
     1249                <?php } elseif ( is_multisite() && current_user_can( 'promote_users' ) ) { ?>
     1250                    <a href="user-new.php" class="add-new-h2"><?php echo esc_html_x( 'Add Existing', 'user' ); ?></a>
     1251                <?php }
     1252
     1253                if ( $usersearch ) {
     1254                    printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', esc_html( $usersearch ) );
     1255                }
     1256
     1257                ?>
     1258            </h2>
     1259
     1260            <?php // Display each signups on its own row ?>
     1261            <?php $bp_members_signup_list_table->views(); ?>
     1262
     1263            <form id="bp-signups-search-form" action="<?php echo esc_url( $search_form_url ) ;?>">
     1264                <input type="hidden" name="page" value="<?php echo esc_attr( $plugin_page ); ?>" />
     1265                <?php $bp_members_signup_list_table->search_box( __( 'Search Pending accounts', 'buddypress' ), 'bp-signups' ); ?>
     1266            </form>
     1267
     1268            <form id="bp-signups-form" action="<?php echo esc_url( $form_url );?>" method="post">
     1269                <?php $bp_members_signup_list_table->display(); ?>
     1270            </form>
     1271        </div>
     1272    <?php
     1273    }
     1274
     1275    /**
     1276     * This is the confirmation screen for actions.
     1277     *
     1278     * @since BuddyPress (2.0.0)
     1279     *
     1280     * @param string $action Delete, activate, or resend activation link.
     1281     */
     1282    public function signups_admin_manage( $action = '' ) {
     1283        if ( ! is_super_admin() || empty( $action ) ) {
     1284            die( '-1' );
     1285        }
     1286
     1287        // Get the user IDs from the URL
     1288        $ids = false;
     1289        if ( ! empty( $_POST['allsignups'] ) ) {
     1290            $ids = wp_parse_id_list( $_POST['allsignups'] );
     1291        } else if ( ! empty( $_GET['signup_id'] ) ) {
     1292            $ids = absint( $_GET['signup_id'] );
     1293        }
     1294
     1295        if ( empty( $ids ) ) {
     1296            return false;
     1297        }
     1298
     1299        // Query for signups, and filter out those IDs that don't
     1300        // correspond to an actual signup
     1301        $signups_query = BP_Signup::get( array(
     1302            'include' => $ids,
     1303        ) );
     1304
     1305        $signups    = $signups_query['signups'];
     1306        $signup_ids = wp_list_pluck( $signups, 'signup_id' );
     1307
     1308        // Set up strings
     1309        switch ( $action ) {
     1310            case 'delete' :
     1311                $header_text = __( 'Delete Pending Accounts', 'buddypress' );
     1312                $helper_text = _n( 'You are about to delete the following account:', 'You are about to delete the following accounts:', count( $signup_ids ), 'buddypress' );
     1313                break;
     1314
     1315            case 'activate' :
     1316                $header_text = __( 'Activate Pending Accounts', 'buddypress' );
     1317                $helper_text = _n( 'You are about to activate the following account:', 'You are about to activate the following accounts:', count( $signup_ids ), 'buddypress' );
     1318                break;
     1319
     1320            case 'resend' :
     1321                $header_text = __( 'Resend Activation Emails', 'buddypress' );
     1322                $helper_text = _n( 'You are about to resend an activation email to the following account:', 'You are about to resend activation emails to the following accounts:', count( $signup_ids ), 'buddypress' );
     1323                break;
     1324        }
     1325
     1326        // These arguments are added to all URLs
     1327        $url_args = array( 'page' => 'bp-signups' );
     1328
     1329        // These arguments are only added when performing an action
     1330        $action_args = array(
     1331            'action'     => 'do_' . $action,
     1332            'signup_ids' => implode( ',', $signup_ids )
     1333        );
     1334
     1335        $cancel_url = add_query_arg( $url_args, bp_get_admin_url( 'users.php' ) );
     1336        $action_url = wp_nonce_url(
     1337            add_query_arg(
     1338                array_merge( $url_args, $action_args ),
     1339                bp_get_admin_url( 'users.php' )
     1340            ),
     1341            'signups_' . $action
     1342        );
     1343
     1344        ?>
     1345
     1346        <div class="wrap">
     1347            <?php screen_icon( 'users' ); ?>
     1348            <h2><?php echo esc_html( $header_text ); ?></h2>
     1349            <p><?php echo esc_html( $helper_text ); ?></p>
     1350
     1351            <ol class="bp-signups-list">
     1352            <?php foreach ( $signups as $signup ) :
     1353                $last_notified = mysql2date( 'Y/m/d g:i:s a', $signup->date_sent )
     1354            ?>
     1355
     1356                <li>
     1357                    <?php echo esc_html( $signup->user_name ) ?> - <?php echo sanitize_email( $signup->user_email );?>
     1358
     1359                    <?php if ( 'resend' == $action ) : ?>
     1360                        <p class="description">
     1361                            <?php printf( esc_html__( 'Last notified: %s', 'buddypress'), $last_notified ) ;?>
     1362
     1363                            <?php if ( ! empty( $signup->recently_sent ) ) : ?>
     1364                                <span class="attention wp-ui-text-notification"> <?php esc_html_e( '(less than 24 hours ago)', 'buddypress' ); ?></span>
     1365                            <?php endif; ?>
     1366                        </p>
     1367
     1368                    <?php endif; ?>
     1369                </li>
     1370
     1371            <?php endforeach; ?>
     1372            </ol>
     1373
     1374            <?php if ( 'resend' != $action ) : ?>
     1375                <p><strong><?php esc_html_e( 'This action cannot be undone.', 'buddypress' ) ?></strong></p>
     1376            <?php endif ; ?>
     1377
     1378            <a class="button-primary" href="<?php echo esc_url( $action_url ); ?>"><?php esc_html_e( 'Confirm', 'buddypress' ); ?></a>
     1379            <a class="button" href="<?php echo esc_url( $cancel_url ); ?>"><?php esc_html_e( 'Cancel', 'buddypress' ) ?></a>
     1380        </div>
     1381
     1382        <?php
     1383    }
    6931384}
    6941385endif; // class_exists check
    6951386
    6961387// Load the BP Members admin
    697 add_action( 'bp_init', array( 'BP_Members_Admin','register_members_admin' ) );
     1388add_action( 'bp_init', array( 'BP_Members_Admin', 'register_members_admin' ) );
  • trunk/bp-members/bp-members-functions.php

    r8027 r8119  
    13621362        }
    13631363
     1364        // Check into signups
     1365        $signups = BP_Signup::get( array(
     1366            'user_login' => $user_name,
     1367        ) );
     1368
     1369        $signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false;
     1370
    13641371        // Check if the username has been used already.
    1365         if ( username_exists( $user_name ) ) {
     1372        if ( username_exists( $user_name ) || ! empty( $signup ) ) {
    13661373            $errors->add( 'user_name', __( 'Sorry, that username already exists!', 'buddypress' ) );
    13671374        }
     
    13941401
    13951402function bp_core_signup_user( $user_login, $user_password, $user_email, $usermeta ) {
    1396     global $bp, $wpdb;
     1403    global $bp;
     1404
     1405    // We need to cast $user_id to pass to the filters
     1406    $user_id = false;
    13971407
    13981408    // Multisite installs have their own install procedure
     
    14001410        wpmu_signup_user( $user_login, $user_email, $usermeta );
    14011411
    1402         // On multisite, the user id is not created until the user activates the account
    1403         // but we need to cast $user_id to pass to the filters
    1404         $user_id = false;
    1405 
    14061412    } else {
    1407         $errors = new WP_Error();
    1408 
    1409         $user_id = wp_insert_user( array(
    1410             'user_login' => $user_login,
    1411             'user_pass' => $user_password,
    1412             'display_name' => sanitize_title( $user_login ),
    1413             'user_email' => $user_email
    1414         ) );
    1415 
    1416         if ( is_wp_error( $user_id ) || empty( $user_id ) ) {
    1417             $errors->add( 'registerfail', sprintf( __('<strong>ERROR</strong>: Couldn&#8217;t register you... please contact the <a href="mailto:%s">webmaster</a> !', 'buddypress' ), bp_get_option( 'admin_email' ) ) );
    1418             return $errors;
    1419         }
    1420 
    1421         // Update the user status to '2' which we will use as 'not activated' (0 = active, 1 = spam, 2 = not active)
    1422         $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 2 WHERE ID = %d", $user_id ) );
    1423 
    1424         // Set any profile data
    1425         if ( bp_is_active( 'xprofile' ) ) {
    1426             if ( !empty( $usermeta['profile_field_ids'] ) ) {
    1427                 $profile_field_ids = explode( ',', $usermeta['profile_field_ids'] );
    1428 
    1429                 foreach( (array) $profile_field_ids as $field_id ) {
    1430                     if ( empty( $usermeta["field_{$field_id}"] ) )
    1431                         continue;
    1432 
    1433                     $current_field = $usermeta["field_{$field_id}"];
    1434                     xprofile_set_field_data( $field_id, $user_id, $current_field );
    1435 
    1436                     // Save the visibility level
    1437                     $visibility_level = !empty( $usermeta['field_' . $field_id . '_visibility'] ) ? $usermeta['field_' . $field_id . '_visibility'] : 'public';
    1438                     xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
    1439                 }
     1413        // Format data
     1414        $user_login     = preg_replace( '/\s+/', '', sanitize_user( $user_login, true ) );
     1415        $user_email     = sanitize_email( $user_email );
     1416        $activation_key = substr( md5( time() . rand() . $user_email ), 0, 16 );
     1417
     1418        /**
     1419         * WordPress's default behavior is to create user accounts
     1420         * immediately at registration time. BuddyPress uses a system
     1421         * borrowed from WordPress Multisite, where signups are stored
     1422         * separately and accounts are only created at the time of
     1423         * activation. For backward compatibility with plugins that may
     1424         * be anticipating WP's default behavior, BP silently creates
     1425         * accounts for registrations (though it does not use them). If
     1426         * you know that you are not running any plugins dependent on
     1427         * these pending accounts, you may want to save a little DB
     1428         * clutter by defining setting the BP_SIGNUPS_SKIP_USER_CREATION
     1429         * to true in your wp-config.php file.
     1430         */
     1431        if ( ! defined( 'BP_SIGNUPS_SKIP_USER_CREATION' ) || ! BP_SIGNUPS_SKIP_USER_CREATION ) {
     1432            $user_id = BP_Signup::add_backcompat( $user_login, $user_password, $user_email, $usermeta );
     1433
     1434            if ( is_wp_error( $user_id ) ) {
     1435                return $user_id;
    14401436            }
    1441         }
    1442     }
    1443     $bp->signup->username = $user_login;
    1444 
    1445     /***
    1446      * Now generate an activation key and send an email to the user so they can activate their
    1447      * account and validate their email address. Multisite installs send their own email, so
    1448      * this is only for single blog installs.
    1449      *
    1450      * To disable sending activation emails you can user the filter
    1451      * 'bp_core_signup_send_activation_key' and return false. Note that this will only disable
    1452      * the email - a key will still be generated, and the account must still be activated
    1453      * before use.
    1454      */
    1455     if ( !is_multisite() ) {
    1456         $activation_key = wp_hash( $user_id );
    1457         update_user_meta( $user_id, 'activation_key', $activation_key );
     1437
     1438            $activation_key = wp_hash( $user_id );
     1439            update_user_meta( $user_id, 'activation_key', $activation_key );
     1440        }
     1441
     1442        $args = array(
     1443            'user_login'     => $user_login,
     1444            'user_email'     => $user_email,
     1445            'activation_key' => $activation_key,
     1446            'meta'           => $usermeta,
     1447        );
     1448
     1449        BP_Signup::add( $args );
    14581450
    14591451        if ( apply_filters( 'bp_core_signup_send_activation_key', true ) ) {
     
    14611453        }
    14621454    }
     1455
     1456    $bp->signup->username = $user_login;
    14631457
    14641458    do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta );
     
    14841478
    14851479        // If there were errors, add a message and redirect
    1486         if ( !empty( $user->errors ) ) {
     1480        if ( ! empty( $user->errors ) ) {
    14871481            return $user;
    14881482        }
     
    14901484        $user_id = $user['user_id'];
    14911485
    1492         // Set any profile data
    1493         if ( bp_is_active( 'xprofile' ) ) {
    1494             if ( !empty( $user['meta']['profile_field_ids'] ) ) {
    1495                 $profile_field_ids = explode( ',', $user['meta']['profile_field_ids'] );
    1496 
    1497                 foreach( (array) $profile_field_ids as $field_id ) {
    1498                     $current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false;
    1499 
    1500                     if ( !empty( $current_field ) )
    1501                         xprofile_set_field_data( $field_id, $user_id, $current_field );
    1502 
    1503                     // Save the visibility level
    1504                     $visibility_level = !empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public';
    1505                     xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
    1506                 }
     1486    } else {
     1487        $signups = BP_Signup::get( array(
     1488            'activation_key' => $key,
     1489        ) );
     1490
     1491        if ( empty( $signups['signups'] ) ) {
     1492            return new WP_Error( 'invalid_key', __( 'Invalid activation key.', 'buddypress' ) );
     1493        }
     1494
     1495        $signup = $signups['signups'][0];
     1496
     1497        if ( $signup->active ) {
     1498            if ( empty( $signup->domain ) ) {
     1499                return new WP_Error( 'already_active', __( 'The user is already active.', 'buddypress' ), $signup );
     1500            } else {
     1501                return new WP_Error( 'already_active', __( 'The site is already active.', 'buddypress' ), $signup );
    15071502            }
    15081503        }
    1509     } else {
    1510 
    1511         // Get the user_id based on the $key
    1512         $user_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'activation_key' AND meta_value = %s", $key ) );
    1513 
    1514         if ( empty( $user_id ) )
    1515             return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) );
    1516 
    1517         // Change the user's status so they become active
    1518         if ( !$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 0 WHERE ID = %d", $user_id ) ) )
    1519             return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) );
     1504
     1505        // password is hashed again in wp_insert_user
     1506        $password = wp_generate_password( 12, false );
     1507
     1508        $user_id = username_exists( $signup->user_login );
     1509
     1510        // Create the user
     1511        if ( ! $user_id ) {
     1512            $user_id = wp_create_user( $signup->user_login, $password, $signup->user_email );
     1513
     1514        // If a user ID is found, this may be a legacy signup, or one
     1515        // created locally for backward compatibility. Process it.
     1516        } else if ( $key == wp_hash( $user_id ) ) {
     1517            // Change the user's status so they become active
     1518            if ( ! $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 0 WHERE ID = %d", $user_id ) ) ) {
     1519                return new WP_Error( 'invalid_key', __( 'Invalid activation key', 'buddypress' ) );
     1520            }
     1521
     1522            bp_delete_user_meta( $user_id, 'activation_key' );
     1523
     1524            $member = get_userdata( $user_id );
     1525            $member->set_role( get_option('default_role') );
     1526
     1527            $user_already_created = true;
     1528
     1529        } else {
     1530            $user_already_exists = true;
     1531        }
     1532
     1533        if ( ! $user_id ) {
     1534            return new WP_Error( 'create_user', __( 'Could not create user', 'buddypress' ), $signup );
     1535        }
     1536
     1537        // Fetch the signup so we have the data later on
     1538        $signups = BP_Signup::get( array(
     1539            'activation_key' => $key,
     1540        ) );
     1541
     1542        $signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false;
     1543
     1544        // Activate the signup
     1545        BP_Signup::validate( $key );
     1546
     1547        if ( isset( $user_already_exists ) ) {
     1548            return new WP_Error( 'user_already_exists', __( 'That username is already activated.' ), $signup );
     1549        }
     1550
     1551        // Set up data to pass to the legacy filter
     1552        $user = array(
     1553            'user_id'  => $user_id,
     1554            'password' => $signup->meta['password'],
     1555            'meta'     => $signup->meta,
     1556        );
    15201557
    15211558        // Notify the site admin of a new user registration
    15221559        wp_new_user_notification( $user_id );
    15231560
    1524         // Remove the activation key meta
    1525         delete_user_meta( $user_id, 'activation_key' );
     1561        if ( isset( $user_already_created ) ) {
     1562            do_action( 'bp_core_activated_user', $user_id, $key, $user );
     1563            return $user_id;
     1564        }
     1565    }
     1566
     1567    // Set any profile data
     1568    if ( bp_is_active( 'xprofile' ) ) {
     1569        if ( ! empty( $user['meta']['profile_field_ids'] ) ) {
     1570            $profile_field_ids = explode( ',', $user['meta']['profile_field_ids'] );
     1571
     1572            foreach( (array) $profile_field_ids as $field_id ) {
     1573                $current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false;
     1574
     1575                if ( !empty( $current_field ) )
     1576                    xprofile_set_field_data( $field_id, $user_id, $current_field );
     1577
     1578                // Save the visibility level
     1579                $visibility_level = ! empty( $user['meta']['field_' . $field_id . '_visibility'] ) ? $user['meta']['field_' . $field_id . '_visibility'] : 'public';
     1580                xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
     1581            }
     1582        }
    15261583    }
    15271584
    15281585    // Update the display_name
    1529     wp_update_user( array( 'ID' => $user_id, 'display_name' => bp_core_get_user_displayname( $user_id ) ) );
     1586    wp_update_user( array(
     1587        'ID'           => $user_id,
     1588        'display_name' => bp_core_get_user_displayname( $user_id ),
     1589    ) );
    15301590
    15311591    // Set the password on multisite installs
    1532     if ( is_multisite() && !empty( $user['meta']['password'] ) )
     1592    if ( ! empty( $user['meta']['password'] ) ) {
    15331593        $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_pass = %s WHERE ID = %d", $user['meta']['password'], $user_id ) );
     1594    }
    15341595
    15351596    do_action( 'bp_core_activated_user', $user_id, $key, $user );
  • trunk/bp-members/bp-members-loader.php

    r8090 r8119  
    3838        $includes = array(
    3939            'actions',
     40            'classes',
    4041            'filters',
    4142            'screens',
     
    6970            define( 'BP_MEMBERS_SLUG', $this->id );
    7071
    71         parent::setup_globals( array(
     72        $members_globals = array(
    7273            'slug'          => BP_MEMBERS_SLUG,
    7374            'root_slug'     => isset( $bp->pages->members->slug ) ? $bp->pages->members->slug : BP_MEMBERS_SLUG,
     
    7879            ),
    7980            'search_string' => __( 'Search Members...', 'buddypress' ),
    80         ) );
     81        );
     82
     83        if ( bp_get_signup_allowed() ) {
     84            $members_globals['global_tables']['table_name_signups'] = bp_core_get_table_prefix() . 'signups';
     85        }
     86
     87        parent::setup_globals( $members_globals );
    8188
    8289        /** Logged in user ****************************************************/
  • trunk/bp-members/bp-members-screens.php

    r8090 r8119  
    252252        }
    253253
    254         // Check for an uploaded avatar and move that to the correct user folder
    255         if ( is_multisite() )
    256             $hashed_key = wp_hash( $_GET['key'] );
    257         else
    258             $hashed_key = wp_hash( $user );
     254        $hashed_key = wp_hash( $_GET['key'] );
    259255
    260256        // Check if the avatar folder exists. If it does, move rename it, move
  • trunk/tests/includes/factory.php

    r7873 r8119  
    1111        $this->xprofile_field = new BP_UnitTest_Factory_For_XProfileField( $this );
    1212        $this->notification = new BP_UnitTest_Factory_For_Notification( $this );
     13        $this->signup = new BP_UnitTest_Factory_For_Signup( $this );
    1314    }
    1415}
     
    164165    }
    165166}
     167
     168class BP_UnitTest_Factory_For_Signup extends WP_UnitTest_Factory_For_Thing {
     169    public function __construct( $factory = null ) {
     170        parent::__construct( $factory );
     171    }
     172
     173    public function create_object( $args ) {
     174        return BP_Signup::add( $args );
     175    }
     176
     177    public function update_object( $id, $fields ) {}
     178
     179    public function get_object_by_id( $id ) {
     180        return new BP_Signup( $id );
     181    }
     182}
  • trunk/tests/includes/install.php

    r7849 r8119  
    3131tests_add_filter( 'bp_new_install_default_components', 'wp_test_bp_install' );
    3232
     33tests_add_filter( 'bp_get_signup_allowed', '__return_true' );
     34
    3335$_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
    3436$_SERVER['HTTP_HOST'] = WP_TESTS_DOMAIN;
Note: See TracChangeset for help on using the changeset viewer.