From bc0947b075df97216df3a60b00667b0904a0a9cb Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 23 Apr 2010 20:34:03 +0000 Subject: [PATCH] Introduce get_super_admins(). Allow hard-coding a global super_admins array and bypassing site options. fixes #12815 git-svn-id: http://svn.automattic.com/wordpress/trunk@14206 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/ms.php | 17 ++++++++++++++++- wp-admin/ms-edit.php | 2 +- wp-admin/ms-users.php | 2 +- wp-admin/user-edit.php | 4 ++-- wp-includes/capabilities.php | 22 ++++++++++++++++++++-- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/wp-admin/includes/ms.php b/wp-admin/includes/ms.php index 556a3833e..46d2064a9 100644 --- a/wp-admin/includes/ms.php +++ b/wp-admin/includes/ms.php @@ -187,7 +187,7 @@ function confirm_delete_users( $users ) { ID'>$current_user->user_login"; foreach ( ( $allusers = (array) $_POST['allusers'] ) as $key => $val ) { @@ -811,8 +811,15 @@ function _admin_notice_multisite_activate_plugins_page() { * @param $user_id */ function grant_super_admin( $user_id ) { + global $super_admins; + + // If global super_admins override is defined, there is nothing to do here. + if ( isset($super_admins) ) + return false; + 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 = new WP_User( $user_id ); @@ -832,9 +839,17 @@ function grant_super_admin( $user_id ) { * @param $user_id */ function revoke_super_admin( $user_id ) { + global $super_admins; + + // If global super_admins override is defined, there is nothing to do here. + if ( isset($super_admins) ) + return false; + 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 = new WP_User( $user_id ); if ( $user->user_email != get_site_option( 'admin_email' ) ) { if ( false !== ( $key = array_search( $user->user_login, $super_admins ) ) ) { diff --git a/wp-admin/ms-edit.php b/wp-admin/ms-edit.php index 8a79b0ffe..fff7f7289 100644 --- a/wp-admin/ms-edit.php +++ b/wp-admin/ms-edit.php @@ -531,7 +531,7 @@ switch ( $_GET['action'] ) { case 'spam': $user = new WP_User( $val ); - if ( in_array( $user->user_login, get_site_option( 'site_admins', array( 'admin' ) ) ) ) + if ( in_array( $user->user_login, get_super_admins() ) ) wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network admnistrator.' ), esc_html( $user->user_login ) ) ); $userfunction = 'all_spam'; diff --git a/wp-admin/ms-users.php b/wp-admin/ms-users.php index 852a85373..fd6c59a43 100644 --- a/wp-admin/ms-users.php +++ b/wp-admin/ms-users.php @@ -199,7 +199,7 @@ if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET[' ' . __('— No role for this blog —') . ''; ?> - +

diff --git a/wp-includes/capabilities.php b/wp-includes/capabilities.php index db28b974c..a88156445 100644 --- a/wp-includes/capabilities.php +++ b/wp-includes/capabilities.php @@ -1170,6 +1170,24 @@ function remove_role( $role ) { return $wp_roles->remove_role( $role ); } +/** + * Retrieve a list of super admins. + * + * @since 3.0.0 + * + * @uses $super_admins Super admins global variable, if set. + * + * @return array List of super admin logins + */ +function get_super_admins() { + global $super_admins; + + if ( isset($super_admins) ) + return $super_admins; + else + return get_site_option( 'site_admins', array('admin') ); +} + /** * Determine if user is a site admin. * @@ -1190,8 +1208,8 @@ function is_super_admin( $user_id = false ) { $user = new WP_User($user_id); if ( is_multisite() ) { - $site_admins = get_site_option( 'site_admins', array('admin') ); - if ( is_array( $site_admins ) && in_array( $user->user_login, $site_admins ) ) + $super_admins = get_super_admins(); + if ( is_array( $super_admins ) && in_array( $user->user_login, $super_admins ) ) return true; } else { if ( $user->has_cap('delete_users') )