WordPress.org

Make WordPress Core

Ticket #11644: 11644.4.diff

File 11644.4.diff, 11.5 KB (added by GIGALinux, 10 years ago)

Frist try for a better super admin user management

  • ms-edit.php

     
    44if ( !is_multisite() )
    55        wp_die( __('Multisite support is not enabled.') );
    66
    7 if( is_site_admin() == false ) {
     7if ( !is_super_admin() )
    88        wp_die( __('You do not have permission to access this page.') );
    9 }
    109
    1110do_action('wpmuadminedit', '');
    1211
     
    2120}
    2221
    2322switch( $_GET['action'] ) {
     23        case "remove_super_admin":
     24                $user_login = esc_attr( $_GET['user_login'] );
     25                $super_admins = get_site_option('site_admins', array('admin'));
     26                if ( 1 == count($super_admins) )
     27                        wp_die( __("You can't delete the last super admin.") );
     28                foreach ( $super_admins as $key => $super_admin ) {
     29                        if ( $user_login == $super_admin ) unset( $super_admins[$key] );
     30                }
     31                update_site_option('site_admins', $super_admins);
     32                wp_redirect( add_query_arg( array('updated' => 'true', 'action' => 'removed_superadmin'), $_SERVER['HTTP_REFERER'] ) );
     33                break;
    2434        case "siteoptions":
    2535                check_admin_referer('siteoptions');
    2636                if( empty( $_POST ) )
     
    110120                        update_site_option( $option_name, $value );
    111121                }
    112122
    113                 $site_admins = explode( ' ', str_replace( ",", " ", $_POST['site_admins'] ) );
    114                 if ( is_array( $site_admins ) ) {
    115                         $mainblog_id = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE domain='{$current_site->domain}' AND path='{$current_site->path}'" );
    116                         if( $mainblog_id ) {
    117                                 reset( $site_admins );
    118                                 foreach( (array) $site_admins as $site_admin ) {
    119                                         $uid = $wpdb->get_var( "SELECT ID FROM {$wpdb->users} WHERE user_login='{$site_admin}'" );
    120                                         if( $uid )
    121                                                 add_user_to_blog( $mainblog_id, $uid, 'administrator' );
    122                                 }
    123                         }
    124                         update_site_option( 'site_admins' , $site_admins );
    125                 }
    126 
    127123                // Update more options here
    128124                do_action( 'update_wpmu_options' );
    129125
     
    474470                                        continue;
    475471                                }
    476472                                $user = new WP_User( $val );
    477                                 if ( in_array( $user->user_login, get_site_option( 'site_admins', array( 'admin' ) ) ) ) {
    478                                         wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a site admnistrator.' ), $user->user_login ) );
    479                                 }
    480                                 if ( isset($_POST['alluser_spam']) ) {
     473                                if ( isset($_POST['promote_as_super_admin']) ) {
     474                                        $userfunction = 'superadmin';
     475                                        $super_admins = get_site_option('site_admins', array('admin'));
     476                                        if ( !in_array( $user->user_login, $super_admins ) )
     477                                                $super_admins = array_merge( $super_admins, array($user->user_login) );
     478                                        $mainblog_id = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE domain='{$current_site->domain}' AND path='{$current_site->path}'" );
     479                                        if ( $mainblog_id ) {
     480                                                reset( $super_admins );
     481                                                foreach( (array) $super_admins as $super_admin ) {
     482                                                        $uid = $wpdb->get_var( "SELECT ID FROM {$wpdb->users} WHERE user_login='{$super_admin}'" );
     483                                                        if( $uid )
     484                                                                add_user_to_blog( $mainblog_id, $uid, 'administrator' );
     485                                                }
     486                                        }
     487                                        update_site_option('site_admins', $super_admins);
     488                                } elseif ( isset($_POST['alluser_spam']) ) {
    481489                                        $userfunction = 'all_spam';
     490                                        if ( in_array( $user->user_login, get_site_option( 'site_admins', array( 'admin' ) ) ) ) {
     491                                                wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a site adminstrator.' ), $user->user_login ) );
     492                                        }
    482493                                        $blogs = get_blogs_of_user( $val, true );
    483494                                        foreach ( (array) $blogs as $key => $details ) {
    484495                                                if ( $details->userblog_id == $current_site->blog_id ) { continue; } // main blog not a spam !
     
    487498                                        update_user_status( $val, "spam", '1', 1 );
    488499                                } elseif ( isset($_POST['alluser_notspam']) ) {
    489500                                        $userfunction = 'all_notspam';
     501                                        if ( in_array( $user->user_login, get_site_option( 'site_admins', array( 'admin' ) ) ) ) {
     502                                                wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a site adminstrator.' ), $user->user_login ) );
     503                                        }
    490504                                        $blogs = get_blogs_of_user( $val, true );
    491505                                        foreach ( (array) $blogs as $key => $details ) {
    492506                                                update_blog_status( $details->userblog_id, "spam", '0' );
  • ms-options.php

     
    236236                        </tr>
    237237                </table>
    238238
    239                 <h3><?php _e('Administration Settings') ?></h3>
    240                 <table class="form-table">
    241                         <tr valign="top">
    242                                 <th scope="row"><?php _e('Site Admins') ?></th>
    243                                 <td>
    244                                         <input name="site_admins" type="text" id="site_admins" style="width: 95%" value="<?php echo esc_attr( implode(' ', get_site_option( 'site_admins', array( 'admin' ) ) ) ) ?>" size="45" />
    245                                         <br />
    246                                         <?php _e('These users may login to the main blog and administer the site. Space separated list of usernames.') ?>
    247                                 </td>
    248                         </tr>
    249                 </table>
    250 
    251239                <h3><?php _e('Site Wide Settings <em>(These settings may be overridden by blog owners)</em>') ?></h3>
    252240                <table class="form-table">
    253241                        <?php
  • ms-users.php

     
    1111
    1212require_once('admin-header.php');
    1313
    14 if( is_site_admin() == false ) {
     14if ( !is_super_admin() )
    1515        wp_die( __('You do not have permission to access this page.') );
    16 }
    1716
    1817if ( $_GET['updated'] == 'true' ) {
    1918        ?>
     
    2322                        case 'delete':
    2423                                _e('User deleted !');
    2524                        break;
     25                        case 'superadmin':
     26                                _e('Users are now a super admins!');
     27                        break;
     28                        case 'removed_superadmin':
     29                                _e('User has been removed as super admin!');
     30                        break;
    2631                        case 'all_spam':
    2732                                _e('Users marked as spam !');
    2833                        break;
     
    4449
    4550<div class="wrap" style="position:relative;">
    4651        <?php
     52        $super_admins = "'" . implode("', '", get_site_option('site_admins', array('admin'))) . "'";
     53        $query = "SELECT * FROM {$wpdb->users} WHERE user_login IN (" . $super_admins . ")";
     54        $super_admins_list = $wpdb->get_results( $query, ARRAY_A );
     55        ?>
     56        <div class="wrap">
     57        <h2><?php _e("Users"); ?></h2>
     58        <h3>Super admins</h3>
     59        <?php
     60        // define the columns to display, the syntax is 'internal name' => 'display name'
     61        $posts_columns = array(
     62                'login'      => __('Username'),
     63                'name'       => __('Name'),
     64                'email'      => __('E-mail'),
     65        );
     66        $posts_columns = apply_filters('wpmu_super_admins_columns', $posts_columns);
     67        ?>
     68        <table class="widefat" cellspacing="0">
     69                <thead>
     70                <tr>
     71                <?php foreach( (array) $posts_columns as $column_id => $column_display_name) { ?>
     72                        <th scope="col"><?php echo $column_display_name; ?></th>
     73                <?php } ?>
     74                </tr>
     75                </thead>
     76                <tbody id="super_admins" class="list:superadmins super-admins-list">
     77                <?php if ($super_admins_list) {
     78                        foreach ( (array) $super_admins_list as $user) {
     79                                $class = ('alternate' == $class) ? '' : 'alternate'; ?>
     80                                <tr class="<?php echo $class; ?>">
     81                                <?php
     82                                        foreach( (array) $posts_columns as $column_name=>$column_display_name) :
     83                                                switch($column_name) {
     84                                                        case 'login':
     85                                                                $avatar = get_avatar( $user['user_email'], 32 );
     86                                                                $edit = clean_url( add_query_arg( 'wp_http_referer', urlencode( clean_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=".$user['ID'] ) );
     87                                                                $remove_super_admin = clean_url( add_query_arg( 'wp_http_referer', urlencode( clean_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "ms-edit.php?action=remove_super_admin&amp;user_login=".$user['user_login'] ) );
     88                                                                ?>
     89                                                                <td class="username column-username">
     90                                                                        <?php echo $avatar; ?><strong><a href="<?php echo $edit; ?>" class="edit"><?php echo stripslashes($user['user_login']); ?></a></strong>
     91                                                                        <br/>
     92                                                                        <div class="row-actions">
     93                                                                                <span class="edit"><a href="<?php echo $edit; ?>">Edit</a></span> |
     94                                                                                <span class="remove_super_admin"><a href="<?php echo $remove_super_admin; ?>">Remove as super admin</a></span>
     95                                                                        </div>
     96                                                                </td>
     97                                                        <?php
     98                                                        break;
     99
     100                                                        case 'name': ?>
     101                                                                <td class="name column-name"><?php echo $user['display_name'] ?></td>
     102                                                        <?php
     103                                                        break;
     104
     105                                                        case 'email': ?>
     106                                                                <td class="email column-email"><a href="mailto:<?php echo $user['user_email'] ?>"><?php echo $user['user_email'] ?></a></td>
     107                                                        <?php
     108                                                        break;
     109
     110                                                        default: ?>
     111                                                                <td><?php do_action('manage_super_admins_custom_column', $column_name, $user['ID']); ?></td>
     112                                                        <?php
     113                                                        break;
     114                                                }
     115                                        endforeach
     116                                        ?>
     117                                        </tr>
     118                                        <?php
     119                                }
     120                        } else {
     121                ?>
     122                        <tr>
     123                                <td colspan="<?php echo (int) count($posts_columns); ?>"><?php _e('No super admins found.') ?></td>
     124                        </tr>
     125                        <?php
     126                } // end if ($users)
     127                ?>
     128                </tbody>
     129        </table>
     130        <br />
     131        </div>
     132
     133        <?php
    47134        $apage = isset( $_GET['apage'] ) ? intval( $_GET['apage'] ) : 1;
    48135        $num = isset( $_GET['num'] ) ? intval( $_GET['num'] ) : 15;
    49136        $s = wp_specialchars( trim( $_GET[ 's' ] ) );
     
    102189
    103190        ?>
    104191        <div class="wrap">
    105         <h2><?php _e( $current_site->site_name ); ?> <?php _e("Users"); ?></h2>
    106192        <form action="ms-users.php" method="get" class="search-form">
    107193                <p class="search-box">
    108194                <input type="text" name="s" value="<?php if (isset($_GET['s'])) esc_attr( stripslashes( $s ) ); ?>" class="search-input" id="user-search-input" />
    109195                <input type="submit" id="post-query-submit" value="<?php esc_attr_e('Search Users') ?>" class="button" />
    110196                </p>
    111197        </form>
     198        <h3>All users</h3>
    112199        </div>
    113200
    114201        <form id="form-user-list" action='ms-edit.php?action=allusers' method='post'>
     
    116203                        <?php if ( $user_navigation ) echo "<div class='tablenav-pages'>$user_navigation</div>"; ?>
    117204
    118205                        <div class="alignleft actions">
     206                                <input type="submit" value="<?php esc_attr_e('Promote as super admin') ?>" name="promote_as_super_admin" class="button-secondary" />
    119207                                <input type="submit" value="<?php esc_attr_e('Delete') ?>" name="alluser_delete" class="button-secondary delete" />
    120208                                <input type="submit" value="<?php esc_attr_e('Mark as Spammers') ?>" name="alluser_spam" class="button-secondary" />
    121209                                <input type="submit" value="<?php esc_attr_e('Not Spam') ?>" name="alluser_notspam" class="button-secondary" />
     
    160248                                foreach ( (array) $user_list as $user) {
    161249                                        $class = ('alternate' == $class) ? '' : 'alternate';
    162250
    163                                         $status_list = array( "spam" => "#faa", "deleted" => "#f55" );
     251                                        $status_list = array( "spam" => "#faa", "deleted" => "#f55", "super_admin" => "#FFFBDB" );
    164252
    165253                                        $bgcolour = "";
    166254                                        foreach ( $status_list as $status => $col ) {
    167                                                 if( $user[$status] ) {
     255                                                if ( $user[$status] ) {
    168256                                                        $bgcolour = "style='background: $col'";
     257                                                } elseif( 'super_admin' == $status & is_super_admin( $user['ID'] ) ) {
     258                                                        $bgcolour = "style='background: $col'";
    169259                                                }
    170260                                        }
    171261
     
    265355                        <?php if ( $user_navigation ) echo "<div class='tablenav-pages'>$user_navigation</div>"; ?>
    266356
    267357                        <div class="alignleft">
     358                                <input type="submit" value="<?php esc_attr_e('Promote as super admin') ?>" name="promote_as_super_admin" class="button-secondary" />
    268359                                <input type="submit" value="<?php esc_attr_e('Delete') ?>" name="alluser_delete" class="button-secondary delete" />
    269360                                <input type="submit" value="<?php esc_attr_e('Mark as Spammers') ?>" name="alluser_spam" class="button-secondary" />
    270361                                <input type="submit" value="<?php esc_attr_e('Not Spam') ?>" name="alluser_notspam" class="button-secondary" />
     
    279370if( apply_filters('show_adduser_fields', true) ) :
    280371?>
    281372<div class="wrap">
     373        <br />
    282374        <h2><?php _e('Add user') ?></h2>
    283375        <form action="ms-edit.php?action=adduser" method="post">
    284376        <table class="form-table">