diff --git a/wp-admin/includes/ms.php b/wp-admin/includes/ms.php index 6e8fb07ea3..a8c8808815 100644 --- a/wp-admin/includes/ms.php +++ b/wp-admin/includes/ms.php @@ -851,102 +851,6 @@ function choose_primary_blog() { user_login, $super_admins ) ) { - $super_admins[] = $user->user_login; - update_site_option( 'site_admins' , $super_admins ); - - /** - * Fires after the user is granted Super Admin privileges. - * - * @since 3.0.0 - * - * @param int $user_id ID of the user that was granted Super Admin privileges. - */ - do_action( 'granted_super_admin', $user_id ); - return true; - } - return false; -} - -/** - * Revokes Super Admin privileges. - * - * @since 3.0.0 - * - * @global array $super_admins - * - * @param int $user_id ID of the user Super Admin privileges to be revoked from. - * @return bool True on success, false on failure. This can fail when the user's email - * is the network admin email or when the `$super_admins` global is defined. - */ -function revoke_super_admin( $user_id ) { - // If global super_admins override is defined, there is nothing to do here. - if ( isset( $GLOBALS['super_admins'] ) ) { - return false; - } - - /** - * Fires before the user's Super Admin privileges are revoked. - * - * @since 3.0.0 - * - * @param int $user_id ID of the user Super Admin privileges are being revoked from. - */ - do_action( 'revoke_super_admin', $user_id ); - - // Directly fetch site_admins instead of using get_super_admins() - $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); - - $user = get_userdata( $user_id ); - if ( $user && 0 !== strcasecmp( $user->user_email, get_site_option( 'admin_email' ) ) ) { - if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) { - unset( $super_admins[$key] ); - update_site_option( 'site_admins', $super_admins ); - - /** - * Fires after the user's Super Admin privileges are revoked. - * - * @since 3.0.0 - * - * @param int $user_id ID of the user Super Admin privileges were revoked from. - */ - do_action( 'revoked_super_admin', $user_id ); - return true; - } - } - return false; -} - /** * Whether or not we can edit this network from this page. * diff --git a/wp-includes/capabilities.php b/wp-includes/capabilities.php index 9ed3447e6c..897681c34c 100644 --- a/wp-includes/capabilities.php +++ b/wp-includes/capabilities.php @@ -619,3 +619,99 @@ function is_super_admin( $user_id = false ) { return false; } + +/** + * Grants Super Admin privileges. + * + * @since 3.0.0 + * + * @global array $super_admins + * + * @param int $user_id ID of the user to be granted Super Admin privileges. + * @return bool True on success, false on failure. This can fail when the user is + * already a super admin or when the `$super_admins` global is defined. + */ +function grant_super_admin( $user_id ) { + // If global super_admins override is defined, there is nothing to do here. + if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) { + return false; + } + + /** + * Fires before the user is granted Super Admin privileges. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user that is about to be granted Super Admin privileges. + */ + do_action( 'grant_super_admin', $user_id ); + + // Directly fetch site_admins instead of using get_super_admins() + $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); + + $user = get_userdata( $user_id ); + if ( $user && ! in_array( $user->user_login, $super_admins ) ) { + $super_admins[] = $user->user_login; + update_site_option( 'site_admins' , $super_admins ); + + /** + * Fires after the user is granted Super Admin privileges. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user that was granted Super Admin privileges. + */ + do_action( 'granted_super_admin', $user_id ); + return true; + } + return false; +} + +/** + * Revokes Super Admin privileges. + * + * @since 3.0.0 + * + * @global array $super_admins + * + * @param int $user_id ID of the user Super Admin privileges to be revoked from. + * @return bool True on success, false on failure. This can fail when the user's email + * is the network admin email or when the `$super_admins` global is defined. + */ +function revoke_super_admin( $user_id ) { + // If global super_admins override is defined, there is nothing to do here. + if ( isset( $GLOBALS['super_admins'] ) || ! is_multisite() ) { + return false; + } + + /** + * Fires before the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges are being revoked from. + */ + do_action( 'revoke_super_admin', $user_id ); + + // Directly fetch site_admins instead of using get_super_admins() + $super_admins = get_site_option( 'site_admins', array( 'admin' ) ); + + $user = get_userdata( $user_id ); + if ( $user && 0 !== strcasecmp( $user->user_email, get_site_option( 'admin_email' ) ) ) { + if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) { + unset( $super_admins[$key] ); + update_site_option( 'site_admins', $super_admins ); + + /** + * Fires after the user's Super Admin privileges are revoked. + * + * @since 3.0.0 + * + * @param int $user_id ID of the user Super Admin privileges were revoked from. + */ + do_action( 'revoked_super_admin', $user_id ); + return true; + } + } + return false; +} diff --git a/wp-includes/version.php b/wp-includes/version.php index eedec75e85..32c6f6a88e 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.6-alpha-37199'; +$wp_version = '4.6-alpha-37200'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.