From 85a6518c57ef57a61b116fddb142d7134ada6a99 Mon Sep 17 00:00:00 2001 From: Jeremy Felt Date: Thu, 14 Apr 2016 03:34:07 +0000 Subject: [PATCH] Multisite: Relocate `revoke_super_admin()` and `grant_super_admin()` Moving these functions to `wp-includes/capabilities.php` allows plugins to access more than just `is_super_admin()` and `get_super_admin()` from the front end without including a file via `wp-admin/`. Add an `is_multisite()` check to prevent use of these on single site environments now that they have left `ms.php`.. Props johnjamesjacoby. Fixes #21788. git-svn-id: https://develop.svn.wordpress.org/trunk@37200 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/ms.php | 96 -------------------------------- src/wp-includes/capabilities.php | 96 ++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 96 deletions(-) diff --git a/src/wp-admin/includes/ms.php b/src/wp-admin/includes/ms.php index 6e8fb07ea3..a8c8808815 100644 --- a/src/wp-admin/includes/ms.php +++ b/src/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/src/wp-includes/capabilities.php b/src/wp-includes/capabilities.php index 9ed3447e6c..897681c34c 100644 --- a/src/wp-includes/capabilities.php +++ b/src/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; +}