WordPress.org

Make WordPress Core

Ticket #17924: Replace_Admin_Role_Dropdown_3.2.1.patch

File Replace_Admin_Role_Dropdown_3.2.1.patch, 9.3 KB (added by mobius5150, 8 years ago)

The first patch.

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

     
    7373                        'total_items' => $wp_user_search->get_total(),
    7474                        'per_page' => $users_per_page,
    7575                ) );
     76               
     77                add_filter( 'user_role_name', array( &$this, 'wp_user_role_name' ), 1, 2 );
    7678        }
    7779
    7880        function no_items() {
     
    141143?>
    142144        <div class="alignleft actions">
    143145                <label class="screen-reader-text" for="new_role"><?php _e( 'Change role to&hellip;' ) ?></label>
    144                 <select name="new_role" id="new_role">
    145                         <option value=''><?php _e( 'Change role to&hellip;' ) ?></option>
    146                         <?php wp_dropdown_roles(); ?>
    147                 </select>
     146                <?php wp_user_role_selector(array(
     147                    'name' => 'new_role',
     148                    'id' => 'new_role',
     149                    'no_role' => false,
     150                    'before_list' => '<option value="" selected="true">' . __( 'Change role to&hellip;' ) . '</option>'
     151                )) ?>
    148152                <?php submit_button( __( 'Change' ), 'secondary', 'changeit', false ); ?>
    149153        </div>
    150154<?php
     
    193197
    194198                $style = '';
    195199                foreach ( $this->items as $userid => $user_object ) {
    196                         $role = reset( $user_object->roles );
    197200
    198201                        if ( is_multisite() && empty( $role ) )
    199202                                continue;
     
    261264                } else {
    262265                        $edit = '<strong>' . $user_object->user_login . '</strong>';
    263266                }
    264                 $role_name = isset( $wp_roles->role_names[$role] ) ? translate_user_role( $wp_roles->role_names[$role] ) : __( 'None' );
     267                if ( !isset( $role ) || $role == '' )
     268                    $role = $user_object->roles;
     269                if ( !is_array($role) )
     270                    $role = array( $role );
     271                $role_name = apply_filters( 'user_role_name' , $role, $role );
    265272                $avatar = get_avatar( $user_object->ID, 32 );
    266273
    267274                $r = "<tr id='user-$user_object->ID'$style>";
     
    315322
    316323                return $r;
    317324        }
     325       
     326        /**
     327         * Formats the role name for the WP_Users_List table role column.
     328         *
     329         * @param type string $role the string that is being filtered.
     330         * @param type array $roles the array of roles
     331         * @return type string
     332         */
     333        static function wp_user_role_name( $role, $roles ) {
     334            global $wp_roles;
     335            return isset( $wp_roles->role_names[$roles[0]] ) ? translate_user_role( $wp_roles->role_names[$roles[0]] ) : __( 'None' );
     336        }       
    318337}
    319338
    320339?>
  • wp-admin/includes/template.php

     
    754754<?php
    755755}
    756756
    757 
    758757/**
    759  * Print out <option> html elements for role selectors
     758 * Get the <option> html elements for role selectors
    760759 *
    761760 * @since 2.1.0
     761 * @deprecated 3.1.2 this function is deprecated. User wp_user_role_selector instead.
     762 * @uses serves as a wrapper for wp_get_dropdown_roles
     763 * @param string $selected slug for the role that should be already selected
     764 */
     765function wp_dropdown_roles( $selected = false ) {
     766        echo wp_get_dropdown_roles( $selected );
     767}
     768
     769
     770/**
     771 * Get the <option> html elements for role selectors
    762772 *
     773 * @since 3.1.2
     774 *
    763775 * @param string $selected slug for the role that should be already selected
     776 * @return string
    764777 */
    765 function wp_dropdown_roles( $selected = false ) {
     778function wp_get_dropdown_roles( $selected = false ) {
    766779        $p = '';
    767780        $r = '';
    768781
    769782        $editable_roles = get_editable_roles();
     783       
     784        if ( is_array( $selected ) )
     785            $selected = $selected[0];
    770786
    771787        foreach ( $editable_roles as $role => $details ) {
    772                 $name = translate_user_role($details['name'] );
     788                $name = translate_user_role( $details['name'] );
    773789                if ( $selected == $role ) // preselect specified role
    774790                        $p = "\n\t<option selected='selected' value='" . esc_attr($role) . "'>$name</option>";
    775791                else
    776792                        $r .= "\n\t<option value='" . esc_attr($role) . "'>$name</option>";
    777793        }
    778         echo $p . $r;
     794        return $p . $r;
    779795}
    780796
     797
    781798/**
     799 * Print out the dropdown role selector
     800 *
     801 * selected - (string) The role that is to be selected in the dropdown
     802 * name - (string) The html name element of the selector
     803 * id - (string) The html id element of the selector
     804 * class - (string) The classes to be applied to the selector
     805 * no_role - (bool) Whether an option should be shown to select no role
     806 * before_list - (string) Html to be inserted after the <select> and
     807 *      before the first option.
     808 * after_list - (string) Html to be inserted after the last <option> and
     809 *      before </select>
     810 *
     811 * @since 3.1.2
     812 *
     813 * @param string $options an array of options for the dropdown
     814 */
     815function wp_user_role_selector( $args = array() ) {
     816        $defaults = array(
     817            'selected' => false,
     818            'name' => 'role',
     819            'id' => 'role',
     820            'class' => false,
     821            'no_role' => true,
     822            'before_list' => false,
     823            'after_list' => false
     824        );
     825       
     826        $args = wp_parse_args( $args, $defaults );
     827        extract( $args );
     828       
     829        $p = "<select name='$name' id='$id'" . ( $class ? '' : " class='$class'" ) . '>' . $before_list;
     830        $r = '';
     831
     832        if ( $no_role ) {
     833            if ( $selected )
     834                    $r = '<option value="">' . __('&mdash; No role for this site &mdash;') . '</option>';
     835            else
     836                    $r = '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
     837        }
     838       
     839        $r .= '</select>' . $after_list;
     840       
     841        echo apply_filters( 'user_role_selector', $p . wp_get_dropdown_roles( $selected ) . $r, $args );
     842}
     843
     844/**
    782845 * {@internal Missing Short Description}}
    783846 *
    784847 * @since 2.3.0
  • wp-admin/options-general.php

     
    115115<tr valign="top">
    116116<th scope="row"><label for="default_role"><?php _e('New User Default Role') ?></label></th>
    117117<td>
    118 <select name="default_role" id="default_role"><?php wp_dropdown_roles( get_option('default_role') ); ?></select>
     118    <?php wp_user_role_selector( array(
     119            'selected' => get_option('default_role'),
     120            'name' => 'default_role',
     121            'id' => 'default_role',
     122            'no_role' => true
     123        ) ); ?>
    119124</td>
    120125</tr>
    121126<?php } else { ?>
  • wp-admin/user-edit.php

     
    240240
    241241<?php if ( !IS_PROFILE_PAGE && !is_network_admin() ) : ?>
    242242<tr><th><label for="role"><?php _e('Role:') ?></label></th>
    243 <td><select name="role" id="role">
     243<td>
    244244<?php
    245245// Get the highest/primary role for this user
    246246// TODO: create a function that does this: wp_get_user_role()
    247247$user_roles = $profileuser->roles;
    248 $user_role = array_shift($user_roles);
    249248
    250249// print the full list of roles with the primary one selected.
    251 wp_dropdown_roles($user_role);
    252 
    253 // print the 'no role' option. Make it selected if the user has no role yet.
    254 if ( $user_role )
    255         echo '<option value="">' . __('&mdash; No role for this site &mdash;') . '</option>';
    256 else
    257         echo '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
     250wp_user_role_selector(array(
     251    'selected' => $user_roles
     252));
    258253?>
    259 </select>
    260 <?php endif; //!IS_PROFILE_PAGE
     254</td>
     255<?php
     256endif; //!IS_PROFILE_PAGE
    261257
    262258if ( is_multisite() && is_network_admin() && ! IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
    263259<tr><th><label for="role"><?php _e('Super Admin'); ?></label></th>
  • wp-admin/user-new.php

     
    243243        </tr>
    244244        <tr class="form-field">
    245245                <th scope="row"><label for="adduser-role"><?php _e('Role'); ?></label></th>
    246                 <td><select name="role" id="adduser-role">
    247                         <?php wp_dropdown_roles( get_option('default_role') ); ?>
    248                         </select>
     246                <td>
     247                        <?php
     248                             wp_user_role_selector( array(
     249                                 'selected' => get_option('default_role'),
     250                                 'name' => 'role',
     251                                 'id' => 'adduser-role',
     252                                 'no_role' => false
     253                             ));
     254                        ?>
     255                       
    249256                </td>
    250257        </tr>
    251258<?php if ( is_super_admin() ) { ?>
     
    323330<?php } // !is_multisite ?>
    324331        <tr class="form-field">
    325332                <th scope="row"><label for="role"><?php _e('Role'); ?></label></th>
    326                 <td><select name="role" id="role">
     333                <td>
    327334                        <?php
    328335                        if ( !$new_user_role )
    329336                                $new_user_role = !empty($current_role) ? $current_role : get_option('default_role');
    330                         wp_dropdown_roles($new_user_role);
     337                            wp_user_role_selector(array(
     338                                'selected' => $new_user_role,
     339                                'no_role' => false
     340                            ));
    331341                        ?>
    332                         </select>
     342               
    333343                </td>
    334344        </tr>
    335345        <?php if ( is_multisite() && is_super_admin() ) { ?>