WordPress.org

Make WordPress Core

Ticket #18379: 18379.2.diff

File 18379.2.diff, 16.7 KB (added by PeteMall, 4 years ago)

users

  • wp-admin/includes/class-wp-ms-users-list-table.php

     
    188188                                                                $actions = array(); 
    189189                                                                $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>'; 
    190190 
    191                                                                 if ( current_user_can( 'delete_user', $user->ID) && ! in_array( $user->user_login, $super_admins ) ) { 
    192                                                                         $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'edit.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>'; 
     191                                                                if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) { 
     192                                                                        $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>'; 
    193193                                                                } 
    194194 
    195195                                                                $actions = apply_filters( 'ms_user_row_actions', $actions, $user ); 
  • wp-admin/network/users.php

     
    1616if ( ! current_user_can( 'manage_network_users' ) ) 
    1717        wp_die( __( 'You do not have permission to access this page.' ) ); 
    1818 
     19function confirm_delete_users( $users ) { 
     20        $current_user = wp_get_current_user(); 
     21        if ( !is_array( $users ) ) 
     22                return false; 
     23 
     24        screen_icon(); 
     25        ?> 
     26        <h2><?php esc_html_e( 'Users' ); ?></h2> 
     27        <p><?php _e( 'Transfer or delete posts and links before deleting users.' ); ?></p> 
     28        <form action="users.php?action=dodelete" method="post"> 
     29        <input type="hidden" name="dodelete" /> 
     30        <?php 
     31        wp_nonce_field( 'ms-users-delete' ); 
     32        $site_admins = get_super_admins(); 
     33        $admin_out = "<option value='$current_user->ID'>$current_user->user_login</option>"; 
     34 
     35        foreach ( ( $allusers = (array) $_POST['allusers'] ) as $key => $val ) { 
     36                if ( $val != '' && $val != '0' ) { 
     37                        $delete_user = new WP_User( $val ); 
     38 
     39                        if ( ! current_user_can( 'delete_user', $delete_user->ID ) ) 
     40                                wp_die( sprintf( __( 'Warning! User %s cannot be deleted.' ), $delete_user->user_login ) ); 
     41 
     42                        if ( in_array( $delete_user->user_login, $site_admins ) ) 
     43                                wp_die( sprintf( __( 'Warning! User cannot be deleted. The user %s is a network admnistrator.' ), $delete_user->user_login ) ); 
     44 
     45                        echo "<input type='hidden' name='user[]' value='{$val}'/>\n"; 
     46                        $blogs = get_blogs_of_user( $val, true ); 
     47 
     48                        if ( !empty( $blogs ) ) { 
     49                                ?> 
     50                                <br /><fieldset><p><legend><?php printf( __( "What should be done with posts and links owned by <em>%s</em>?" ), $delete_user->user_login ); ?></legend></p> 
     51                                <?php 
     52                                foreach ( (array) $blogs as $key => $details ) { 
     53                                        $blog_users = get_users( array( 'blog_id' => $details->userblog_id ) ); 
     54                                        if ( is_array( $blog_users ) && !empty( $blog_users ) ) { 
     55                                                $user_site = "<a href='" . esc_url( get_home_url( $details->userblog_id ) ) . "'>{$details->blogname}</a>"; 
     56                                                $user_dropdown = "<select name='blog[$val][{$key}]'>"; 
     57                                                $user_list = ''; 
     58                                                foreach ( $blog_users as $user ) { 
     59                                                        if ( ! in_array( $user->ID, $allusers ) ) 
     60                                                                $user_list .= "<option value='{$user->ID}'>{$user->user_login}</option>"; 
     61                                                } 
     62                                                if ( '' == $user_list ) 
     63                                                        $user_list = $admin_out; 
     64                                                $user_dropdown .= $user_list; 
     65                                                $user_dropdown .= "</select>\n"; 
     66                                                ?> 
     67                                                <ul style="list-style:none;"> 
     68                                                        <li><?php printf( __( 'Site: %s' ), $user_site ); ?></li> 
     69                                                        <li><label><input type="radio" id="delete_option0" name="delete[<?php echo $details->userblog_id . '][' . $delete_user->ID ?>]" value="delete" checked="checked" /> 
     70                                                        <?php _e( 'Delete all posts and links.' ); ?></label></li> 
     71                                                        <li><label><input type="radio" id="delete_option1" name="delete[<?php echo $details->userblog_id . '][' . $delete_user->ID ?>]" value="reassign" /> 
     72                                                        <?php echo __( 'Attribute all posts and links to:' ) . '</label>' . $user_dropdown; ?></li> 
     73                                                </ul> 
     74                                                <?php 
     75                                        } 
     76                                } 
     77                                echo "</fieldset>"; 
     78                        } 
     79                } 
     80        } 
     81 
     82        submit_button( __('Confirm Deletion'), 'delete' ); 
     83        ?> 
     84        </form> 
     85    <?php 
     86        return true; 
     87} 
     88 
     89if ( isset( $_GET['action'] ) ) { 
     90        do_action( 'wpmuadminedit' , '' ); 
     91 
     92        switch ( $_GET['action'] ) { 
     93                case 'deleteuser': 
     94                        if ( ! current_user_can( 'manage_network_users' ) ) 
     95                                wp_die( __( 'You do not have permission to access this page.' ) ); 
     96 
     97                        check_admin_referer( 'deleteuser' ); 
     98 
     99                        $id = intval( $_GET['id'] ); 
     100                        if ( $id != '0' && $id != '1' ) { 
     101                                $_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle with arrays 
     102                                $title = __( 'Users' ); 
     103                                $parent_file = 'users.php'; 
     104                                require_once( '../admin-header.php' ); 
     105                                echo '<div class="wrap">'; 
     106                                confirm_delete_users( $_POST['allusers'] ); 
     107                                echo '</div>'; 
     108                    require_once( '../admin-footer.php' ); 
     109                        } else { 
     110                                wp_redirect( network_admin_url( 'users.php' ) ); 
     111                        } 
     112                        exit(); 
     113                break; 
     114 
     115                case 'allusers': 
     116                        if ( !current_user_can( 'manage_network_users' ) ) 
     117                                wp_die( __( 'You do not have permission to access this page.' ) ); 
     118 
     119                        if ( ( isset( $_POST['action']) || isset($_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { 
     120                                check_admin_referer( 'bulk-users-network' ); 
     121 
     122                                if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) 
     123                                        $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; 
     124 
     125                                $userfunction = ''; 
     126 
     127                                foreach ( (array) $_POST['allusers'] as $key => $val ) { 
     128                                        if ( !empty( $val ) ) { 
     129                                                switch ( $doaction ) { 
     130                                                        case 'delete': 
     131                                                                if ( ! current_user_can( 'delete_users' ) ) 
     132                                                                        wp_die( __( 'You do not have permission to access this page.' ) ); 
     133                                                                $title = __( 'Users' ); 
     134                                                                $parent_file = 'users.php'; 
     135                                                                require_once( '../admin-header.php' ); 
     136                                                                echo '<div class="wrap">'; 
     137                                                                confirm_delete_users( $_POST['allusers'] ); 
     138                                                                echo '</div>'; 
     139                                                    require_once( '../admin-footer.php' ); 
     140                                                    exit(); 
     141                                                break; 
     142 
     143                                                        case 'spam': 
     144                                                                $user = new WP_User( $val ); 
     145                                                                if ( in_array( $user->user_login, get_super_admins() ) ) 
     146                                                                        wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); 
     147 
     148                                                                $userfunction = 'all_spam'; 
     149                                                                $blogs = get_blogs_of_user( $val, true ); 
     150                                                                foreach ( (array) $blogs as $key => $details ) { 
     151                                                                        if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! 
     152                                                                                update_blog_status( $details->userblog_id, 'spam', '1' ); 
     153                                                                } 
     154                                                                update_user_status( $val, 'spam', '1' ); 
     155                                                        break; 
     156 
     157                                                        case 'notspam': 
     158                                                                $userfunction = 'all_notspam'; 
     159                                                                $blogs = get_blogs_of_user( $val, true ); 
     160                                                                foreach ( (array) $blogs as $key => $details ) 
     161                                                                        update_blog_status( $details->userblog_id, 'spam', '0' ); 
     162 
     163                                                                update_user_status( $val, 'spam', '0' ); 
     164                                                        break; 
     165                                                } 
     166                                        } 
     167                                } 
     168 
     169                                wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); 
     170                        } else { 
     171                                $location = network_admin_url( 'users.php' ); 
     172 
     173                                if ( ! empty( $_REQUEST['paged'] ) ) 
     174                                        $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); 
     175                                wp_redirect( $location ); 
     176                        } 
     177                        exit(); 
     178                break; 
     179 
     180                case 'dodelete': 
     181                        check_admin_referer( 'ms-users-delete' ); 
     182                        if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) 
     183                                wp_die( __( 'You do not have permission to access this page.' ) ); 
     184 
     185                        if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { 
     186                                foreach ( $_POST['blog'] as $id => $users ) { 
     187                                        foreach ( $users as $blogid => $user_id ) { 
     188                                                if ( ! current_user_can( 'delete_user', $id ) ) 
     189                                                        continue; 
     190 
     191                                                if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) 
     192                                                        remove_user_from_blog( $id, $blogid, $user_id ); 
     193                                                else 
     194                                                        remove_user_from_blog( $id, $blogid ); 
     195                                        } 
     196                                } 
     197                        } 
     198                        $i = 0; 
     199                        if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) 
     200                                foreach( $_POST['user'] as $id ) { 
     201                                        if ( ! current_user_can( 'delete_user', $id ) ) 
     202                                                continue; 
     203                                        wpmu_delete_user( $id ); 
     204                                        $i++; 
     205                                } 
     206 
     207                        if ( $i == 1 ) 
     208                                $deletefunction = 'delete'; 
     209                        else 
     210                                $deletefunction = 'all_delete'; 
     211 
     212                        wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), network_admin_url( 'users.php' ) ) ); 
     213                        exit(); 
     214                break;   
     215        } 
     216} 
     217 
    19218$wp_list_table = _get_list_table('WP_MS_Users_List_Table'); 
    20219$pagenum = $wp_list_table->get_pagenum(); 
    21220$wp_list_table->prepare_items(); 
     
    88287                <?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?> 
    89288        </form> 
    90289 
    91         <form id="form-user-list" action='edit.php?action=allusers' method='post'> 
     290        <form id="form-user-list" action='users.php?action=allusers' method='post'> 
    92291                <?php $wp_list_table->display(); ?> 
    93292        </form> 
    94293</div> 
  • wp-admin/network/edit.php

     
    1818        exit; 
    1919} 
    2020 
    21 function confirm_delete_users( $users ) { 
    22         $current_user = wp_get_current_user(); 
    23         if ( !is_array( $users ) ) 
    24                 return false; 
    25  
    26         screen_icon(); 
    27         ?> 
    28         <h2><?php esc_html_e( 'Users' ); ?></h2> 
    29         <p><?php _e( 'Transfer or delete posts and links before deleting users.' ); ?></p> 
    30         <form action="edit.php?action=dodelete" method="post"> 
    31         <input type="hidden" name="dodelete" /> 
    32         <?php 
    33         wp_nonce_field( 'ms-users-delete' ); 
    34         $site_admins = get_super_admins(); 
    35         $admin_out = "<option value='$current_user->ID'>$current_user->user_login</option>"; 
    36  
    37         foreach ( ( $allusers = (array) $_POST['allusers'] ) as $key => $val ) { 
    38                 if ( $val != '' && $val != '0' ) { 
    39                         $delete_user = new WP_User( $val ); 
    40  
    41                         if ( ! current_user_can( 'delete_user', $delete_user->ID ) ) 
    42                                 wp_die( sprintf( __( 'Warning! User %s cannot be deleted.' ), $delete_user->user_login ) ); 
    43  
    44                         if ( in_array( $delete_user->user_login, $site_admins ) ) 
    45                                 wp_die( sprintf( __( 'Warning! User cannot be deleted. The user %s is a network admnistrator.' ), $delete_user->user_login ) ); 
    46  
    47                         echo "<input type='hidden' name='user[]' value='{$val}'/>\n"; 
    48                         $blogs = get_blogs_of_user( $val, true ); 
    49  
    50                         if ( !empty( $blogs ) ) { 
    51                                 ?> 
    52                                 <br /><fieldset><p><legend><?php printf( __( "What should be done with posts and links owned by <em>%s</em>?" ), $delete_user->user_login ); ?></legend></p> 
    53                                 <?php 
    54                                 foreach ( (array) $blogs as $key => $details ) { 
    55                                         $blog_users = get_users( array( 'blog_id' => $details->userblog_id ) ); 
    56                                         if ( is_array( $blog_users ) && !empty( $blog_users ) ) { 
    57                                                 $user_site = "<a href='" . esc_url( get_home_url( $details->userblog_id ) ) . "'>{$details->blogname}</a>"; 
    58                                                 $user_dropdown = "<select name='blog[$val][{$key}]'>"; 
    59                                                 $user_list = ''; 
    60                                                 foreach ( $blog_users as $user ) { 
    61                                                         if ( ! in_array( $user->ID, $allusers ) ) 
    62                                                                 $user_list .= "<option value='{$user->ID}'>{$user->user_login}</option>"; 
    63                                                 } 
    64                                                 if ( '' == $user_list ) 
    65                                                         $user_list = $admin_out; 
    66                                                 $user_dropdown .= $user_list; 
    67                                                 $user_dropdown .= "</select>\n"; 
    68                                                 ?> 
    69                                                 <ul style="list-style:none;"> 
    70                                                         <li><?php printf( __( 'Site: %s' ), $user_site ); ?></li> 
    71                                                         <li><label><input type="radio" id="delete_option0" name="delete[<?php echo $details->userblog_id . '][' . $delete_user->ID ?>]" value="delete" checked="checked" /> 
    72                                                         <?php _e( 'Delete all posts and links.' ); ?></label></li> 
    73                                                         <li><label><input type="radio" id="delete_option1" name="delete[<?php echo $details->userblog_id . '][' . $delete_user->ID ?>]" value="reassign" /> 
    74                                                         <?php echo __( 'Attribute all posts and links to:' ) . '</label>' . $user_dropdown; ?></li> 
    75                                                 </ul> 
    76                                                 <?php 
    77                                         } 
    78                                 } 
    79                                 echo "</fieldset>"; 
    80                         } 
    81                 } 
    82         } 
    83  
    84         submit_button( __('Confirm Deletion'), 'delete' ); 
    85         ?> 
    86         </form> 
    87     <?php 
    88         return true; 
    89 } 
    90  
    9121do_action( 'wpmuadminedit' , ''); 
    9222 
    9323if ( isset( $_GET['id' ]) ) 
     
    280210                exit(); 
    281211        break; 
    282212 
    283         // Users 
    284         case 'deleteuser': 
    285                 if ( ! current_user_can( 'manage_network_users' ) ) 
    286                         wp_die( __( 'You do not have permission to access this page.' ) ); 
    287  
    288                 check_admin_referer( 'deleteuser' ); 
    289  
    290                 if ( $id != '0' && $id != '1' ) { 
    291                         $_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle with arrays 
    292                         $title = __( 'Users' ); 
    293                         $parent_file = 'users.php'; 
    294                         require_once( '../admin-header.php' ); 
    295                         echo '<div class="wrap">'; 
    296                         confirm_delete_users( $_POST['allusers'] ); 
    297                         echo '</div>'; 
    298             require_once( '../admin-footer.php' ); 
    299                 } else { 
    300                         wp_redirect( network_admin_url( 'users.php' ) ); 
    301                 } 
    302                 exit(); 
    303         break; 
    304  
    305         case 'allusers': 
    306                 if ( !current_user_can( 'manage_network_users' ) ) 
    307                         wp_die( __( 'You do not have permission to access this page.' ) ); 
    308  
    309                 if ( ( isset( $_POST['action']) || isset($_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) { 
    310                         check_admin_referer( 'bulk-users-network' ); 
    311  
    312                         if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) 
    313                                 $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; 
    314  
    315                         $userfunction = ''; 
    316  
    317                         foreach ( (array) $_POST['allusers'] as $key => $val ) { 
    318                                 if ( !empty( $val ) ) { 
    319                                         switch ( $doaction ) { 
    320                                                 case 'delete': 
    321                                                         if ( ! current_user_can( 'delete_users' ) ) 
    322                                                                 wp_die( __( 'You do not have permission to access this page.' ) ); 
    323                                                         $title = __( 'Users' ); 
    324                                                         $parent_file = 'users.php'; 
    325                                                         require_once( '../admin-header.php' ); 
    326                                                         echo '<div class="wrap">'; 
    327                                                         confirm_delete_users( $_POST['allusers'] ); 
    328                                                         echo '</div>'; 
    329                                             require_once( '../admin-footer.php' ); 
    330                                             exit(); 
    331                                         break; 
    332  
    333                                                 case 'spam': 
    334                                                         $user = new WP_User( $val ); 
    335                                                         if ( in_array( $user->user_login, get_super_admins() ) ) 
    336                                                                 wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); 
    337  
    338                                                         $userfunction = 'all_spam'; 
    339                                                         $blogs = get_blogs_of_user( $val, true ); 
    340                                                         foreach ( (array) $blogs as $key => $details ) { 
    341                                                                 if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! 
    342                                                                         update_blog_status( $details->userblog_id, 'spam', '1' ); 
    343                                                         } 
    344                                                         update_user_status( $val, 'spam', '1' ); 
    345                                                 break; 
    346  
    347                                                 case 'notspam': 
    348                                                         $userfunction = 'all_notspam'; 
    349                                                         $blogs = get_blogs_of_user( $val, true ); 
    350                                                         foreach ( (array) $blogs as $key => $details ) 
    351                                                                 update_blog_status( $details->userblog_id, 'spam', '0' ); 
    352  
    353                                                         update_user_status( $val, 'spam', '0' ); 
    354                                                 break; 
    355                                         } 
    356                                 } 
    357                         } 
    358  
    359                         wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); 
    360                 } else { 
    361                         $location = network_admin_url( 'users.php' ); 
    362  
    363                         if ( ! empty( $_REQUEST['paged'] ) ) 
    364                                 $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location ); 
    365                         wp_redirect( $location ); 
    366                 } 
    367                 exit(); 
    368         break; 
    369  
    370         case 'dodelete': 
    371                 check_admin_referer( 'ms-users-delete' ); 
    372                 if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) 
    373                         wp_die( __( 'You do not have permission to access this page.' ) ); 
    374  
    375                 if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { 
    376                         foreach ( $_POST['blog'] as $id => $users ) { 
    377                                 foreach ( $users as $blogid => $user_id ) { 
    378                                         if ( ! current_user_can( 'delete_user', $id ) ) 
    379                                                 continue; 
    380  
    381                                         if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) 
    382                                                 remove_user_from_blog( $id, $blogid, $user_id ); 
    383                                         else 
    384                                                 remove_user_from_blog( $id, $blogid ); 
    385                                 } 
    386                         } 
    387                 } 
    388                 $i = 0; 
    389                 if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) 
    390                         foreach( $_POST['user'] as $id ) { 
    391                                 if ( ! current_user_can( 'delete_user', $id ) ) 
    392                                         continue; 
    393                                 wpmu_delete_user( $id ); 
    394                                 $i++; 
    395                         } 
    396  
    397                 if ( $i == 1 ) 
    398                         $deletefunction = 'delete'; 
    399                 else 
    400                         $deletefunction = 'all_delete'; 
    401  
    402                 wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), network_admin_url( 'users.php' ) ) ); 
    403                 exit(); 
    404         break; 
    405  
    406213        default: 
    407214                // Let plugins use us as a post handler easily 
    408215                do_action( 'network_admin_edit_' . $_GET['action'] );