WordPress.org

Make WordPress Core

Ticket #15855: 15855.3.patch

File 15855.3.patch, 12.6 KB (added by SergeyBiryukov, 7 years ago)
  • wp-admin/includes/user.php

     
    380380        echo '</p></div>';
    381381}
    382382
     383/**
     384 * Confirm users deletion or removal from current site.
     385 *
     386 * @since 3.1.0
     387 *
     388 * @param array $users User IDs.
     389 * @param string action Optional. 'remove' or 'delete'.
     390 * @return null
     391 */
     392function _confirm_remove_users( $users, $action = 'remove' ) {
     393        global $referer;
     394
     395        $current_user = wp_get_current_user();
     396        if ( !is_array( $users ) )
     397                return false;
    383398?>
     399<div class="wrap">
     400<form action="" method="post" name="updateusers" id="updateusers">
     401<?php
     402        wp_nonce_field('bulk-users');
     403        if ( !empty($_REQUEST['id']) )
     404                echo ' <input type="hidden" name="id" value="' . esc_attr( $_REQUEST['id'] ) . '" />';
     405        echo $referer;
     406        screen_icon('users');
     407
     408        switch ( $action ) {
     409        case 'delete':
     410                echo '<h2>' . __( 'Delete Users' ) . '</h2>';
     411                echo '<p>' . __( 'Transfer or delete posts and links before deleting users.' ) . '</p>';
     412                break;
     413        case 'remove':
     414                echo '<h2>' . __( 'Remove Users from Site' ) . '</h2>';
     415                echo '<p>' . __( 'Transfer or delete posts and links before removing users.' ) . '</p>';
     416                break;
     417        }
     418
     419        echo '<ul>';
     420        $counter = 0;
     421        foreach ( (array) $users as $user_id ) {
     422                $user = new WP_User($user_id);
     423                $proceed = false;
     424
     425                switch ( $action ) {
     426                case 'delete':
     427                        if ( $user_id == $current_user->ID )
     428                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>The current user will not be deleted.</strong>'), $user_id, $user->user_login ) . '</li>';
     429                        elseif ( !current_user_can('delete_user', $user_id) )
     430                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to delete this user.</strong>'), $user_id, $user->user_login ) . '</li>';
     431                        else
     432                                $proceed = true;
     433                        break;
     434                case 'remove':
     435                        if ( $user_id == $current_user->id && ! is_super_admin() )
     436                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>The current user will not be removed.</strong>'), $user_id, $user->user_login ) . '</li>';
     437                        elseif ( !current_user_can('remove_user', $user_id) )
     438                                echo '<li>' . sprintf( __('ID #%1s: %2s <strong>You don\'t have permission to remove this user.</strong>'), $user_id, $user->user_login ) . '</li>';
     439                        else
     440                                $proceed = true;
     441                        break;
     442                }
     443
     444                if ( $proceed ) {
     445                        echo "<li><input type=\"hidden\" name=\"users[]\" value=\"" . esc_attr( $user_id ) . "\" />" . sprintf( __('ID #%1s: %2s'), $user_id, $user->user_login ) . "</li>\n";
     446                        ?>
     447                        <fieldset><p><legend><?php printf( __( "What should be done with posts and links owned by <em>%s</em>?" ), $user->user_login ); ?></legend></p>
     448                        <ul style="list-style:none;">
     449                                <li><label><input type="radio" id="delete_option0" name="delete_option[<?php echo $user->ID; ?>]" value="delete" checked="checked" />
     450                                <?php _e( 'Delete all posts and links.' ); ?></label></li>
     451                                <li><label><input type="radio" id="delete_option1" name="delete_option[<?php echo $user->ID; ?>]" value="reassign" />
     452                                <?php echo __( 'Attribute all posts and links to:' ) . '</label>'; ?>
     453                                <?php wp_dropdown_users( array(
     454                                        'exclude' => array_diff( $users, array( $user->ID ) ),
     455                                        'id' => "reassign{$counter}",
     456                                        'name' => "reassign[{$user->ID}]" ) ); ?></li>
     457                        </ul></fieldset>
     458                        <?php
     459                        $counter++;
     460                }
     461        }
     462        echo '</ul>';
     463
     464        switch ( $action ) {
     465        case 'delete':
     466                echo '<input type="hidden" name="action" value="dodelete" />';
     467                submit_button( __('Confirm Deletion'), 'secondary' );
     468                break;
     469        case 'remove':
     470                echo '<input type="hidden" name="action" value="doremove" />';
     471                submit_button( __('Confirm Removal'), 'secondary' );
     472                break;
     473        }
     474?>
     475</form>
     476</div>
     477<?php
     478}
     479
     480?>
  • wp-admin/network/site-users.php

     
    5555}
    5656$default_role = get_blog_option( $id, 'default_role' );
    5757
     58$referer = remove_query_arg( 'action', wp_get_referer() );
     59
    5860$action = $wp_list_table->current_action();
    5961
    6062if ( $action ) {
     
    100102                        }
    101103                        break;
    102104               
    103                 case 'remove':
     105                case 'doremove':
    104106                        if ( !current_user_can('remove_users')  )
    105                                 die(__('You can&#8217;t remove users.'));
     107                                die( __('You can&#8217;t remove users.') );
    106108                        check_admin_referer( 'bulk-users' );
    107                        
     109
    108110                        $update = 'remove';
    109111                        if ( isset( $_REQUEST['users'] ) ) {
    110112                                $userids = $_REQUEST['users'];
    111113
    112114                                foreach ( $userids as $user_id ) {
    113115                                        $user_id = (int) $user_id;
     116                                        switch ( $_REQUEST['delete_option'][$user_id] ) {
     117                                        case 'delete':
     118                                                remove_user_from_blog( $user_id, $id );
     119                                                break;
     120                                        case 'reassign':
     121                                                remove_user_from_blog( $user_id, $id, $_REQUEST['reassign'][$user_id] );
     122                                                break;
     123                                        }
     124                                }
     125                        } elseif ( isset( $_GET['user'] ) ) {
     126                                $user_id = $_GET['user'];
     127
     128                                switch ( $_REQUEST['delete_option'][$user_id] ) {
     129                                case 'delete':
    114130                                        remove_user_from_blog( $user_id, $id );
     131                                        break;
     132                                case 'reassign':
     133                                        remove_user_from_blog( $user_id, $id, $_REQUEST['reassign'][$user_id] );
     134                                        break;
    115135                                }
    116                         } elseif ( isset( $_GET['user'] ) ) {
    117                                 remove_user_from_blog( $_GET['user'] );
    118136                        } else {
    119137                                $update = 'err_remove';
    120138                        }
     139                        $referer = add_query_arg( 'id', $id, $referer );
    121140                        break;
    122141
     142                case 'remove':
     143                        if ( !current_user_can('remove_users')  )
     144                                die( __('You can&#8217;t remove users.') );
     145
     146                        if ( empty($_REQUEST['users']) )
     147                                $userids = array( intval($_REQUEST['user']) );
     148                        else
     149                                $userids = $_REQUEST['users'];
     150
     151                        require_once( '../admin-header.php' );
     152                        _confirm_remove_users( $userids );
     153                        require_once( '../admin-footer.php' );
     154                        exit();
     155                        break;
     156
    123157                case 'promote':
    124158                        check_admin_referer( 'bulk-users' );
    125159                        $editable_roles = get_editable_roles();
     
    146180        }
    147181       
    148182        restore_current_blog();
    149         wp_redirect( add_query_arg( 'update', $update, wp_get_referer() ) );
     183        wp_redirect( add_query_arg( 'update', $update, $referer ) );
    150184        exit();
    151185}
    152186
  • wp-admin/users.php

     
    8787        if ( is_multisite() )
    8888                wp_die( __('User deletion is not allowed from this screen.') );
    8989
    90         check_admin_referer('delete-users');
     90        check_admin_referer('bulk-users');
    9191
    9292        if ( empty($_REQUEST['users']) ) {
    9393                wp_redirect($redirect);
     
    9595        }
    9696
    9797        if ( ! current_user_can( 'delete_users' ) )
    98                 wp_die(__('You can&#8217;t delete users.'));
     98                wp_die( __('You can&#8217;t delete users.') );
    9999
    100100        $userids = $_REQUEST['users'];
    101101        $update = 'del';
     
    105105                $id = (int) $id;
    106106
    107107                if ( ! current_user_can( 'delete_user', $id ) )
    108                         wp_die(__( 'You can&#8217;t delete that user.' ) );
     108                        wp_die( __('You can&#8217;t delete that user.') );
    109109
    110110                if ( $id == $current_user->ID ) {
    111111                        $update = 'err_admin_del';
    112112                        continue;
    113113                }
    114                 switch ( $_REQUEST['delete_option'] ) {
     114
     115                switch ( $_REQUEST['delete_option'][$id] ) {
    115116                case 'delete':
    116                         if ( current_user_can('delete_user', $id) )
    117                                 wp_delete_user($id);
     117                        wp_delete_user( $id );
    118118                        break;
    119119                case 'reassign':
    120                         if ( current_user_can('delete_user', $id) )
    121                                 wp_delete_user($id, $_REQUEST['reassign_user']);
     120                        wp_delete_user( $id, $_REQUEST['reassign'][$id] );
    122121                        break;
    123122                }
    124123                ++$delete_count;
     
    142141        }
    143142
    144143        if ( ! current_user_can( 'delete_users' ) )
    145                 $errors = new WP_Error( 'edit_users', __( 'You can&#8217;t delete users.' ) );
     144                $errors = new WP_Error( 'edit_users', __('You can&#8217;t delete users.') );
    146145
    147146        if ( empty($_REQUEST['users']) )
    148                 $userids = array(intval($_REQUEST['user']));
     147                $userids = array( intval($_REQUEST['user']) );
    149148        else
    150149                $userids = $_REQUEST['users'];
    151150
    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; ?>
     151        include( 'admin-header.php' );
     152        _confirm_remove_users( $userids, 'delete' );
    157153
    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 
    195154break;
    196155
    197156case 'doremove':
    198         check_admin_referer('remove-users');
     157        check_admin_referer('bulk-users');
    199158
    200159        if ( empty($_REQUEST['users']) ) {
    201160                wp_redirect($redirect);
    202161                exit;
    203162        }
    204163
    205         if ( !current_user_can('remove_users')  )
    206                 die(__('You can&#8217;t remove users.'));
     164        if ( ! current_user_can('remove_users')  )
     165                die( __('You can&#8217;t remove users.') );
    207166
    208167        $userids = $_REQUEST['users'];
    209168
    210169        $update = 'remove';
    211         foreach ( $userids as $id ) {
     170        foreach ( (array) $userids as $id ) {
    212171                $id = (int) $id;
    213                 if ( $id == $current_user->id && !is_super_admin() ) {
    214                         $update = 'err_admin_remove';
     172
     173                if ( ! current_user_can('remove_user', $id) ) {
     174                        wp_die( __('You can&#8217;t remove that user.') );
    215175                        continue;
    216176                }
    217                 if ( !current_user_can('remove_user', $id) ) {
     177
     178                if ( $id == $current_user->id && !is_super_admin() ) {
    218179                        $update = 'err_admin_remove';
    219180                        continue;
    220181                }
    221                 remove_user_from_blog($id, $blog_id);
     182
     183                switch ( $_REQUEST['delete_option'][$id] ) {
     184                case 'delete':
     185                        remove_user_from_blog( $id, $blog_id );
     186                        break;
     187                case 'reassign':
     188                        remove_user_from_blog( $id, $blog_id, $_REQUEST['reassign'][$id] );
     189                        break;
     190                }
    222191        }
    223192
    224193        $redirect = add_query_arg( array('update' => $update), $redirect);
     
    236205                exit();
    237206        }
    238207
    239         if ( !current_user_can('remove_users') )
    240                 $error = new WP_Error('edit_users', __('You can&#8217;t remove users.'));
     208        if ( !current_user_can( 'remove_users' ) )
     209                $error = new WP_Error( 'edit_users', __('You can&#8217;t remove users.') );
    241210
    242211        if ( empty($_REQUEST['users']) )
    243                 $userids = array(intval($_REQUEST['user']));
     212                $userids = array( intval($_REQUEST['user']) );
    244213        else
    245214                $userids = $_REQUEST['users'];
    246215
    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; ?>
     216        include( 'admin-header.php' );
     217        _confirm_remove_users( $userids, 'remove' );
    252218
    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 
    283219break;
    284220
    285221default: