WordPress.org

Make WordPress Core

Ticket #15855: 15855.2.patch

File 15855.2.patch, 9.4 KB (added by SergeyBiryukov, 3 years ago)
  • wp-admin/users.php

     
    4242 
    4343$update = ''; 
    4444 
     45function confirm_remove_users( $users, $action = 'remove' ) { 
     46        global $referer; 
     47 
     48        $current_user = wp_get_current_user(); 
     49        if ( !is_array( $users ) ) 
     50                return false; 
     51?> 
     52<div class="wrap"> 
     53<form action="" method="post" name="updateusers" id="updateusers"> 
     54<?php 
     55        wp_nonce_field("$action-users"); 
     56        echo $referer; 
     57        screen_icon(); 
     58 
     59        switch ( $action ) { 
     60        case 'delete': 
     61                echo '<h2>' . __( 'Delete Users' ) . '</h2>'; 
     62                echo '<p>' . __( 'Transfer or delete posts and links before deleting users.' ) . '</p>'; 
     63                break; 
     64        case 'remove': 
     65                echo '<h2>' . __( 'Remove Users from Site' ) . '</h2>'; 
     66                echo '<p>' . __( 'Transfer or delete posts and links before removing users.' ) . '</p>'; 
     67                break; 
     68        } 
     69 
     70        echo '<ul>'; 
     71        foreach ( (array) $users as $user_id ) { 
     72                $user = new WP_User($user_id); 
     73                $proceed = false; 
     74 
     75                switch ( $action ) { 
     76                case 'delete': 
     77                        if ( $user_id == $current_user->ID ) 
     78                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $user_id, $user->user_login ) . '</li>'; 
     79                        elseif ( !current_user_can('delete_user', $user_id) ) 
     80                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to delete this user.</strong>'), $user_id, $user->user_login ) . '</li>'; 
     81                        else 
     82                                $proceed = true; 
     83                        break; 
     84                case 'remove': 
     85                        if ( $user_id == $current_user->id && ! is_super_admin() ) 
     86                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $user_id, $user->user_login ) . '</li>'; 
     87                        elseif ( !current_user_can('remove_user', $user_id) ) 
     88                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $user_id, $user->user_login ) . '</li>'; 
     89                        else 
     90                                $proceed = true; 
     91                        break; 
     92                } 
     93 
     94                if ( $proceed ) { 
     95                        echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr( $user_id ) . "\" />" . sprintf( __('ID #%1s: %2s'), $user_id, $user->user_login ) . "</li>\n"; 
     96                        ?> 
     97                        <fieldset><p><legend><?php printf( __( "What should be done with posts and links owned by <em>%s</em>?" ), $user->user_login ); ?></legend></p> 
     98                        <ul style="list-style:none;"> 
     99                                <li><label><input type="radio" id="delete_option0" name="delete_option[<?php echo $user->ID; ?>]" value="delete" checked="checked" /> 
     100                                <?php _e( 'Delete all posts and links.' ); ?></label></li> 
     101                                <li><label><input type="radio" id="delete_option1" name="delete_option[<?php echo $user->ID; ?>]" value="reassign" /> 
     102                                <?php echo __( 'Attribute all posts and links to:' ) . '</label>'; ?> 
     103                                <?php wp_dropdown_users( array( 'exclude' => array_diff( $users, array( $user->ID ) ) ) ); ?></li> 
     104                        </ul></fieldset> 
     105                        <?php 
     106                } 
     107        } 
     108        echo '</ul>'; 
     109 
     110        switch ( $action ) { 
     111        case 'delete': 
     112                echo '<input type="hidden" name="action" value="dodelete" />'; 
     113                submit_button( __('Confirm Deletion'), 'secondary' ); 
     114                break; 
     115        case 'remove': 
     116                echo '<input type="hidden" name="action" value="doremove" />'; 
     117                submit_button( __('Confirm Removal'), 'secondary' ); 
     118                break; 
     119        } 
     120?> 
     121</form> 
     122</div> 
     123<?php  
     124} 
     125 
    45126switch ( $wp_list_table->current_action() ) { 
    46127 
    47128/* Bulk Dropdown menu Role changes */ 
     
    95176        } 
    96177 
    97178        if ( ! current_user_can( 'delete_users' ) ) 
    98                 wp_die(__('You can&#8217;t delete users.')); 
     179                wp_die( __('You can&#8217;t delete users.') ); 
    99180 
    100181        $userids = $_REQUEST['users']; 
    101182        $update = 'del'; 
     
    105186                $id = (int) $id; 
    106187 
    107188                if ( ! current_user_can( 'delete_user', $id ) ) 
    108                         wp_die(__( 'You can&#8217;t delete that user.' ) ); 
     189                        wp_die( __('You can&#8217;t delete that user.') ); 
    109190 
    110191                if ( $id == $current_user->ID ) { 
    111192                        $update = 'err_admin_del'; 
    112193                        continue; 
    113194                } 
    114                 switch ( $_REQUEST['delete_option'] ) { 
     195 
     196                switch ( $_REQUEST['delete_option'][$id] ) { 
    115197                case 'delete': 
    116                         if ( current_user_can('delete_user', $id) ) 
    117                                 wp_delete_user($id); 
     198                        wp_delete_user( $id ); 
    118199                        break; 
    119200                case 'reassign': 
    120                         if ( current_user_can('delete_user', $id) ) 
    121                                 wp_delete_user($id, $_REQUEST['reassign_user']); 
     201                        wp_delete_user( $id, $_REQUEST['user'] ); 
    122202                        break; 
    123203                } 
    124204                ++$delete_count; 
     
    142222        } 
    143223 
    144224        if ( ! current_user_can( 'delete_users' ) ) 
    145                 $errors = new WP_Error( 'edit_users', __( 'You can&#8217;t delete users.' ) ); 
     225                $errors = new WP_Error( 'edit_users', __('You can&#8217;t delete users.') ); 
    146226 
    147227        if ( empty($_REQUEST['users']) ) 
    148                 $userids = array(intval($_REQUEST['user'])); 
     228                $userids = array( intval($_REQUEST['user']) ); 
    149229        else 
    150230                $userids = $_REQUEST['users']; 
    151231 
    152         include ('admin-header.php'); 
    153 ?> 
    154 <form action="" method="post" name="updateusers" id="updateusers"> 
    155 <?php wp_nonce_field('delete-users') ?> 
    156 <?php echo $referer; ?> 
     232        include( 'admin-header.php' ); 
     233        confirm_remove_users( $userids, 'delete' ); 
    157234 
    158 <div class="wrap"> 
    159 <?php screen_icon(); ?> 
    160 <h2><?php _e('Delete Users'); ?></h2> 
    161 <p><?php _e('You have specified these users for deletion:'); ?></p> 
    162 <ul> 
    163 <?php 
    164         $go_delete = false; 
    165         foreach ( (array) $userids as $id ) { 
    166                 $id = (int) $id; 
    167                 $user = new WP_User($id); 
    168                 if ( $id == $current_user->ID ) { 
    169                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $id, $user->user_login) . "</li>\n"; 
    170                 } else { 
    171                         echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr($id) . "\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n"; 
    172                         $go_delete = true; 
    173                 } 
    174         } 
    175         ?> 
    176         </ul> 
    177 <?php if ( $go_delete ) : ?> 
    178         <fieldset><p><legend><?php _e('What should be done with posts and links owned by this user?'); ?></legend></p> 
    179         <ul style="list-style:none;"> 
    180                 <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" checked="checked" /> 
    181                 <?php _e('Delete all posts and links.'); ?></label></li> 
    182                 <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" /> 
    183                 <?php echo '<label for="delete_option1">'.__('Attribute all posts and links to:').'</label>'; 
    184                 wp_dropdown_users( array( 'exclude' => array_diff( $userids, array($current_user->ID) ) ) ); ?></li> 
    185         </ul></fieldset> 
    186         <input type="hidden" name="action" value="dodelete" /> 
    187         <?php submit_button( __('Confirm Deletion'), 'secondary' ); ?> 
    188 <?php else : ?> 
    189         <p><?php _e('There are no valid users selected for deletion.'); ?></p> 
    190 <?php endif; ?> 
    191 </div> 
    192 </form> 
    193 <?php 
    194  
    195235break; 
    196236 
    197237case 'doremove': 
     
    202242                exit; 
    203243        } 
    204244 
    205         if ( !current_user_can('remove_users')  ) 
    206                 die(__('You can&#8217;t remove users.')); 
     245        if ( ! current_user_can('remove_users')  ) 
     246                die( __('You can&#8217;t remove users.') ); 
    207247 
    208248        $userids = $_REQUEST['users']; 
    209249 
    210250        $update = 'remove'; 
    211         foreach ( $userids as $id ) { 
     251        foreach ( (array) $userids as $id ) { 
    212252                $id = (int) $id; 
    213                 if ( $id == $current_user->id && !is_super_admin() ) { 
    214                         $update = 'err_admin_remove'; 
     253 
     254                if ( ! current_user_can('remove_user', $id) ) { 
     255                        wp_die( __('You can&#8217;t remove that user.') ); 
    215256                        continue; 
    216257                } 
    217                 if ( !current_user_can('remove_user', $id) ) { 
     258 
     259                if ( $id == $current_user->id && !is_super_admin() ) { 
    218260                        $update = 'err_admin_remove'; 
    219261                        continue; 
    220262                } 
    221                 remove_user_from_blog($id, $blog_id); 
     263 
     264                switch ( $_REQUEST['delete_option'][$id] ) { 
     265                case 'delete': 
     266                        remove_user_from_blog( $id, $blog_id ); 
     267                        break; 
     268                case 'reassign': 
     269                        remove_user_from_blog( $id, $blog_id, $_REQUEST['user'] ); 
     270                        break; 
     271                } 
    222272        } 
    223273 
    224274        $redirect = add_query_arg( array('update' => $update), $redirect); 
     
    236286                exit(); 
    237287        } 
    238288 
    239         if ( !current_user_can('remove_users') ) 
    240                 $error = new WP_Error('edit_users', __('You can&#8217;t remove users.')); 
     289        if ( !current_user_can( 'remove_users' ) ) 
     290                $error = new WP_Error( 'edit_users', __('You can&#8217;t remove users.') ); 
    241291 
    242292        if ( empty($_REQUEST['users']) ) 
    243                 $userids = array(intval($_REQUEST['user'])); 
     293                $userids = array( intval($_REQUEST['user']) ); 
    244294        else 
    245295                $userids = $_REQUEST['users']; 
    246296 
    247         include ('admin-header.php'); 
    248 ?> 
    249 <form action="" method="post" name="updateusers" id="updateusers"> 
    250 <?php wp_nonce_field('remove-users') ?> 
    251 <?php echo $referer; ?> 
     297        include( 'admin-header.php' ); 
     298        confirm_remove_users( $userids, 'remove' ); 
    252299 
    253 <div class="wrap"> 
    254 <?php screen_icon(); ?> 
    255 <h2><?php _e('Remove Users from Site'); ?></h2> 
    256 <p><?php _e('You have specified these users for removal:'); ?></p> 
    257 <ul> 
    258 <?php 
    259         $go_remove = false; 
    260         foreach ( $userids as $id ) { 
    261                 $id = (int) $id; 
    262                 $user = new WP_User($id); 
    263                 if ( $id == $current_user->id && !is_super_admin() ) { 
    264                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $id, $user->user_login) . "</li>\n"; 
    265                 } elseif ( !current_user_can('remove_user', $id) ) { 
    266                         echo "<li>" . sprintf(__('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $id, $user->user_login) . "</li>\n"; 
    267                 } else { 
    268                         echo "<li><input type=\"hidden\" name=\"users[]\" value=\"{$id}\" />" . sprintf(__('ID #%1s: %2s'), $id, $user->user_login) . "</li>\n"; 
    269                         $go_remove = true; 
    270                 } 
    271         } 
    272         ?> 
    273 <?php if ( $go_remove ) : ?> 
    274                 <input type="hidden" name="action" value="doremove" /> 
    275                 <?php submit_button( __('Confirm Removal'), 'secondary' ); ?> 
    276 <?php else : ?> 
    277         <p><?php _e('There are no valid users selected for removal.'); ?></p> 
    278 <?php endif; ?> 
    279 </div> 
    280 </form> 
    281 <?php 
    282  
    283300break; 
    284301 
    285302default: