WordPress.org

Make WordPress Core

Ticket #15855: 15855.2.patch

File 15855.2.patch, 9.4 KB (added by SergeyBiryukov, 10 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: