WordPress.org

Make WordPress Core

Ticket #15855: 15855.5.patch

File 15855.5.patch, 14.8 KB (added by SergeyBiryukov, 3 years ago)
  • wp-admin/css/colors-classic.dev.css

     
    691691} 
    692692 
    693693table.widefat span.delete a, 
     694table.widefat span.remove a, 
    694695table.widefat span.trash a, 
    695696table.widefat span.spam a, 
    696697#dashboard_recent_comments .delete a, 
  • wp-admin/css/colors-fresh.dev.css

     
    684684} 
    685685 
    686686table.widefat span.delete a, 
     687table.widefat span.remove a, 
    687688table.widefat span.trash a, 
    688689table.widefat span.spam a, 
    689690#dashboard_recent_comments .delete a, 
  • wp-admin/includes/user.php

     
    371371        echo '</p></div>'; 
    372372} 
    373373 
     374/** 
     375 * Display a dropdown when deleting or removing a user from current site, 
     376 * allowing to reassign their posts and links to another user. 
     377 * 
     378 * @since 3.3.0 
     379 * 
     380 * @param array $user User object. 
     381 * @param array $selected_users IDs of users to delete or remove. 
     382 * @return null 
     383 */ 
     384function _reassign_dropdown( $user, $selected_users ) { 
     385        static $counter = 0; 
     386        ?> 
     387        <li><input type="hidden" name="users[]" value="<?php echo esc_attr( $user->ID ); ?>" /><?php printf( __('ID #%1s: %2s'), $user->ID, $user->user_login ); ?></li> 
     388        <fieldset><p><legend><?php printf( __( "What should be done with posts and links owned by <em>%s</em>?" ), $user->user_login ); ?></legend></p> 
     389        <ul style="list-style:none;"> 
     390                <li><label><input type="radio" id="delete_option0" name="delete_option[<?php echo $user->ID; ?>]" value="delete" checked="checked" /> 
     391                <?php if ( ! is_multisite() ) _e( 'Delete all posts and links.' ); else _e( 'Leave as is.' ); ?></label></li> 
     392                <li><label><input type="radio" id="delete_option1" name="delete_option[<?php echo $user->ID; ?>]" value="reassign" /> 
     393                <?php echo __( 'Attribute all posts and links to:' ) . '</label>'; ?> 
     394                <?php wp_dropdown_users( array( 
     395                        'exclude' => array_diff( $selected_users, array( $user->ID ) ), 
     396                        'id' => "reassign{$counter}", 
     397                        'name' => "reassign[{$user->ID}]" ) ); ?></li> 
     398        </ul></fieldset><?php 
     399        $counter++; 
     400} 
     401 
    374402?> 
  • wp-admin/network/site-users.php

     
    5353} 
    5454$default_role = get_blog_option( $id, 'default_role' ); 
    5555 
     56$referer = remove_query_arg( array( 'action', 'remove_count' ), wp_get_referer() ); 
     57 
    5658$action = $wp_list_table->current_action(); 
    5759 
    5860if ( $action ) { 
     
    98100                        } 
    99101                        break; 
    100102                 
    101                 case 'remove': 
     103                case 'doremove': 
    102104                        if ( !current_user_can('remove_users')  ) 
    103                                 die(__('You can&#8217;t remove users.')); 
    104                         check_admin_referer( 'bulk-users' ); 
    105                          
     105                                wp_die( __('You can&#8217;t remove users.') ); 
     106                        check_admin_referer( 'remove-users' ); 
     107 
    106108                        $update = 'remove'; 
    107109                        if ( isset( $_REQUEST['users'] ) ) { 
    108110                                $userids = $_REQUEST['users']; 
    109111 
    110                                 foreach ( $userids as $user_id ) { 
     112                                $remove_count = 0; 
     113                                foreach ( (array) $userids as $user_id ) { 
    111114                                        $user_id = (int) $user_id; 
    112                                         remove_user_from_blog( $user_id, $id ); 
     115                                        switch ( $_REQUEST['delete_option'][$user_id] ) { 
     116                                        case 'delete': 
     117                                                remove_user_from_blog( $user_id, $id ); 
     118                                                break; 
     119                                        case 'reassign': 
     120                                                remove_user_from_blog( $user_id, $id, $_REQUEST['reassign'][$user_id] ); 
     121                                                break; 
     122                                        } 
     123                                        ++$remove_count; 
    113124                                } 
    114                         } elseif ( isset( $_GET['user'] ) ) { 
    115                                 remove_user_from_blog( $_GET['user'] ); 
    116125                        } else { 
    117126                                $update = 'err_remove'; 
    118127                        } 
     128                        $referer = add_query_arg( array( 'remove_count' => $remove_count, 'id' => $id ), $referer ); 
    119129                        break; 
    120130 
     131                case 'remove': 
     132                        if ( !current_user_can('remove_users')  ) 
     133                                wp_die( __('You can&#8217;t remove users.') ); 
     134                        check_admin_referer( 'bulk-users' ); 
     135 
     136                        if ( empty($_REQUEST['users']) ) 
     137                                $userids = array( intval($_REQUEST['user']) ); 
     138                        else 
     139                                $userids = $_REQUEST['users']; 
     140 
     141                        require_once( '../admin-header.php' ); 
     142                        ?> 
     143                        <form action="" method="post" name="updateusers" id="updateusers"> 
     144                        <input type="hidden" name="id" value="<?php echo esc_attr( $_REQUEST['id'] ); ?>" /> 
     145                        <?php wp_nonce_field('remove-users') ?> 
     146 
     147                        <div class="wrap"> 
     148                        <?php screen_icon('users'); ?> 
     149                        <h2><?php _e('Remove Users from Site'); ?></h2> 
     150                        <p><?php _e('You have specified these users for removal:'); ?></p> 
     151                        <ul> 
     152                        <?php 
     153                                $go_remove = false; 
     154                                foreach ( $userids as $id ) { 
     155                                        $id = (int) $id; 
     156                                        $user = new WP_User($id); 
     157                                        if ( $id == $current_user->ID && ! is_super_admin() ) { 
     158                                                echo "<li>" . sprintf( __('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $id, $user->user_login ) . "</li>\n"; 
     159                                        } elseif ( ! current_user_can('remove_user', $id) ) { 
     160                                                echo "<li>" . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login ) . "</li>\n"; 
     161                                        } else { 
     162                                                _reassign_dropdown( $user, $userids ); 
     163                                                $go_remove = true; 
     164                                        } 
     165                                } 
     166                        ?> 
     167                        </ul> 
     168                        <?php if ( $go_remove ) : ?> 
     169                                        <input type="hidden" name="action" value="doremove" /> 
     170                                        <?php submit_button( __('Confirm Removal'), 'secondary' ); ?> 
     171                        <?php else : ?> 
     172                                <p><?php _e('There are no valid users selected for removal.'); ?></p> 
     173                        <?php endif; ?> 
     174                        </div> 
     175                        </form><?php 
     176                        require_once( '../admin-footer.php' ); 
     177                        exit(); 
     178                        break; 
     179 
    121180                case 'promote': 
    122181                        check_admin_referer( 'bulk-users' ); 
    123182                        $editable_roles = get_editable_roles(); 
     
    144203        } 
    145204         
    146205        restore_current_blog(); 
    147         wp_redirect( add_query_arg( 'update', $update, wp_get_referer() ) ); 
     206        wp_redirect( add_query_arg( 'update', $update, $referer ) ); 
    148207        exit(); 
    149208} 
    150209 
     
    200259                echo '<div id="message" class="error"><p>' . __( 'Select a user to change role.' ) . '</p></div>'; 
    201260                break; 
    202261        case 'remove': 
    203                 echo '<div id="message" class="updated"><p>' . __( 'User removed from this site.' ) . '</p></div>'; 
     262                $remove_count = isset($_GET['remove_count']) ? (int) $_GET['remove_count'] : 0; 
     263                echo '<div id="message" class="updated"><p>' . sprintf( _n( 'User removed from this site.', '%s users removed from this site.', $remove_count ), $remove_count ) . '</p></div>'; 
    204264                break; 
    205265        case 'err_remove': 
    206266                echo '<div id="message" class="error"><p>' . __( 'Select a user to remove.' ) . '</p></div>'; 
  • wp-admin/users.php

     
    3333if ( empty($_REQUEST) ) { 
    3434        $referer = '<input type="hidden" name="wp_http_referer" value="'. esc_attr(stripslashes($_SERVER['REQUEST_URI'])) . '" />'; 
    3535} elseif ( isset($_REQUEST['wp_http_referer']) ) { 
    36         $redirect = remove_query_arg(array('wp_http_referer', 'updated', 'delete_count'), stripslashes($_REQUEST['wp_http_referer'])); 
     36        $redirect = remove_query_arg( array('wp_http_referer', 'updated', 'delete_count', 'remove_count'), stripslashes($_REQUEST['wp_http_referer']) ); 
    3737        $referer = '<input type="hidden" name="wp_http_referer" value="' . esc_attr($redirect) . '" />'; 
    3838} else { 
    3939        $redirect = 'users.php'; 
     
    9898        } 
    9999 
    100100        if ( ! current_user_can( 'delete_users' ) ) 
    101                 wp_die(__('You can&#8217;t delete users.')); 
     101                wp_die( __('You can&#8217;t delete users.') ); 
    102102 
    103103        $userids = $_REQUEST['users']; 
    104104        $update = 'del'; 
    105105        $delete_count = 0; 
    106106 
    107         foreach ( (array) $userids as $id) { 
     107        foreach ( (array) $userids as $id ) { 
    108108                $id = (int) $id; 
    109109 
    110110                if ( ! current_user_can( 'delete_user', $id ) ) 
     
    114114                        $update = 'err_admin_del'; 
    115115                        continue; 
    116116                } 
    117                 switch ( $_REQUEST['delete_option'] ) { 
     117 
     118                switch ( $_REQUEST['delete_option'][$id] ) { 
    118119                case 'delete': 
    119                         if ( current_user_can('delete_user', $id) ) 
    120                                 wp_delete_user($id); 
     120                        wp_delete_user( $id ); 
    121121                        break; 
    122122                case 'reassign': 
    123                         if ( current_user_can('delete_user', $id) ) 
    124                                 wp_delete_user($id, $_REQUEST['reassign_user']); 
     123                        wp_delete_user( $id, $_REQUEST['reassign'][$id] ); 
    125124                        break; 
    126125                } 
    127126                ++$delete_count; 
    128127        } 
    129128 
    130         $redirect = add_query_arg( array('delete_count' => $delete_count, 'update' => $update), $redirect); 
     129        $redirect = add_query_arg( array( 'delete_count' => $delete_count, 'update' => $update ), $redirect ); 
    131130        wp_redirect($redirect); 
    132131        exit(); 
    133132 
     
    148147                $errors = new WP_Error( 'edit_users', __( 'You can&#8217;t delete users.' ) ); 
    149148 
    150149        if ( empty($_REQUEST['users']) ) 
    151                 $userids = array(intval($_REQUEST['user'])); 
     150                $userids = array( intval($_REQUEST['user']) ); 
    152151        else 
    153152                $userids = (array) $_REQUEST['users']; 
    154153 
     
    169168                $id = (int) $id; 
    170169                $user = new WP_User($id); 
    171170                if ( $id == $current_user->ID ) { 
    172                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n"; 
     171                        echo "<li>" . sprintf( __('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login ) . "</li>\n"; 
     172                } elseif ( ! current_user_can('delete_user', $id) ) { 
     173                        echo "<li>" . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login ) . "</li>\n"; 
    173174                } else { 
    174                         echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n"; 
     175                        _reassign_dropdown( $user, $userids ); 
    175176                        $go_delete++; 
    176177                } 
    177178        } 
    178179        ?> 
    179180        </ul> 
    180181<?php if ( $go_delete ) : ?> 
    181         <fieldset><p><legend><?php echo _n( 'What should be done with posts and links owned by this user?', 'What should be done with posts and links owned by these users?', $go_delete ); ?></legend></p> 
    182         <ul style="list-style:none;"> 
    183                 <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" /> 
    184                 <?php _e('Delete all posts and links.'); ?></label></li> 
    185                 <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" /> 
    186                 <?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:').'</label>'; 
    187                 wp_dropdown_users( array( 'name' => 'reassign_user', 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?></li> 
    188         </ul></fieldset> 
    189182        <input type="hidden" name="action" value="dodelete" /> 
    190183        <?php submit_button( __('Confirm Deletion'), 'secondary' ); ?> 
    191184<?php else : ?> 
     
    212205                wp_die( __( 'You can&#8217;t remove users.' ) ); 
    213206 
    214207        $userids = $_REQUEST['users']; 
     208        $update = 'remove'; 
     209        $remove_count = 0; 
    215210 
    216         $update = 'remove'; 
    217         foreach ( $userids as $id ) { 
     211        foreach ( (array) $userids as $id ) { 
    218212                $id = (int) $id; 
    219                 if ( $id == $current_user->ID && !is_super_admin() ) { 
    220                         $update = 'err_admin_remove'; 
     213 
     214                if ( ! current_user_can( 'remove_user', $id ) ) { 
     215                        wp_die( __( 'You can&#8217;t remove that user.' ) ); 
    221216                        continue; 
    222217                } 
    223                 if ( !current_user_can('remove_user', $id) ) { 
     218 
     219                if ( $id == $current_user->id && !is_super_admin() ) { 
    224220                        $update = 'err_admin_remove'; 
    225221                        continue; 
    226222                } 
    227                 remove_user_from_blog($id, $blog_id); 
     223 
     224                switch ( $_REQUEST['delete_option'][$id] ) { 
     225                case 'delete': 
     226                        remove_user_from_blog( $id, $blog_id ); 
     227                        break; 
     228                case 'reassign': 
     229                        remove_user_from_blog( $id, $blog_id, $_REQUEST['reassign'][$id] ); 
     230                        break; 
     231                } 
     232                ++$remove_count; 
    228233        } 
    229234 
    230         $redirect = add_query_arg( array('update' => $update), $redirect); 
     235        $redirect = add_query_arg( array( 'remove_count' => $remove_count, 'update' => $update ), $redirect ); 
    231236        wp_redirect($redirect); 
    232237        exit; 
    233238 
     
    245250                exit(); 
    246251        } 
    247252 
    248         if ( !current_user_can('remove_users') ) 
    249                 $error = new WP_Error('edit_users', __('You can&#8217;t remove users.')); 
     253        if ( !current_user_can( 'remove_users' ) ) 
     254                $error = new WP_Error( 'edit_users', __('You can&#8217;t remove users.') ); 
    250255 
    251256        if ( empty($_REQUEST['users']) ) 
    252                 $userids = array(intval($_REQUEST['user'])); 
     257                $userids = array( intval($_REQUEST['user']) ); 
    253258        else 
    254259                $userids = $_REQUEST['users']; 
    255260 
     
    269274        foreach ( $userids as $id ) { 
    270275                $id = (int) $id; 
    271276                $user = new WP_User($id); 
    272                 if ( $id == $current_user->ID && !is_super_admin() ) { 
    273                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $id, $user->user_login) . "</li>\n"; 
    274                 } elseif ( !current_user_can('remove_user', $id) ) { 
    275                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login) . "</li>\n"; 
     277                if ( $id == $current_user->ID && ! is_super_admin() ) { 
     278                        echo "<li>" . sprintf( __('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $id, $user->user_login ) . "</li>\n"; 
     279                } elseif ( ! current_user_can('remove_user', $id) ) { 
     280                        echo "<li>" . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login ) . "</li>\n"; 
    276281                } else { 
    277                         echo "<li><input type=\"hidden\" name=\"users[]\" value=\"{$id}\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n"; 
     282                        _reassign_dropdown( $user, $userids ); 
    278283                        $go_remove = true; 
    279284                } 
    280285        } 
     
    294299default: 
    295300 
    296301        if ( !empty($_GET['_wp_http_referer']) ) { 
    297                 wp_redirect(remove_query_arg(array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI']))); 
     302                wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), stripslashes( $_SERVER['REQUEST_URI'] ) ) ); 
    298303                exit; 
    299304        } 
    300305 
     
    312317                case 'del': 
    313318                case 'del_many': 
    314319                        $delete_count = isset($_GET['delete_count']) ? (int) $_GET['delete_count'] : 0; 
    315                         $messages[] = '<div id="message" class="updated"><p>' . sprintf(_n('%s user deleted', '%s users deleted', $delete_count), $delete_count) . '</p></div>'; 
     320                        $messages[] = '<div id="message" class="updated"><p>' . sprintf( _n('%s user deleted', '%s users deleted', $delete_count), $delete_count ) . '</p></div>'; 
    316321                        break; 
    317322                case 'add': 
    318323                        $messages[] = '<div id="message" class="updated"><p>' . __('New user created.') . '</p></div>'; 
     
    329334                        $messages[] = '<div id="message" class="updated"><p>' . __('Other users have been deleted.') . '</p></div>'; 
    330335                        break; 
    331336                case 'remove': 
    332                         $messages[] = '<div id="message" class="updated fade"><p>' . __('User removed from this site.') . '</p></div>'; 
     337                        $remove_count = isset($_GET['remove_count']) ? (int) $_GET['remove_count'] : 0; 
     338                        $messages[] = '<div id="message" class="updated fade"><p>' . sprintf( _n('User removed from this site.', '%s users removed from this site.', $remove_count), $remove_count ) . '</p></div>'; 
    333339                        break; 
    334340                case 'err_admin_remove': 
    335341                        $messages[] = '<div id="message" class="error"><p>' . __("You can't remove the current user.") . '</p></div>';