Make WordPress Core


Ignore:
Timestamp:
05/29/2015 02:40:52 AM (11 years ago)
Author:
helen
Message:

List tables: introduce the concept of a "primary" column.

This becomes the column that contains the row actions, and allows for a more flexibility, particularly with custom post types and list tables. To (re)define the primary column, use the list_table_primary_column filter, which receives the column name and the screen ID as arguments.

props stephdau, DaveAl, jesin.
see #25408.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-ms-users-list-table.php

    r32642 r32644  
    181181                        <?php
    182182
    183                         list( $columns, $hidden ) = $this->get_column_info();
     183                        list( $columns, $hidden, $sortable, $primary ) = $this->get_column_info();
    184184
    185185                        foreach ( $columns as $column_name => $column_display_name ) :
    186                                 $class = "class='$column_name column-$column_name'";
     186                                $classes = "$column_name column-$column_name";
     187                                if ( $primary === $column_name || 'blogs' === $column_name ) {
     188                                        $classes .= ' has-row-actions';
     189                                }
     190
     191                                if ( $primary === $column_name ) {
     192                                        $classes .= ' column-primary';
     193                                }
    187194
    188195                                $style = '';
    189                                 if ( in_array( $column_name, $hidden ) )
     196                                if ( in_array( $column_name, $hidden ) ) {
    190197                                        $style = ' style="display:none;"';
    191 
    192                                 $attributes = "$class$style";
    193 
    194                                 switch ( $column_name ) {
    195                                         case 'cb': ?>
    196                                                 <th scope="row" class="check-column">
    197                                                         <label class="screen-reader-text" for="blog_<?php echo $user->ID; ?>"><?php echo sprintf( __( 'Select %s' ), $user->user_login ); ?></label>
    198                                                         <input type="checkbox" id="blog_<?php echo $user->ID ?>" name="allusers[]" value="<?php echo esc_attr( $user->ID ) ?>" />
    199                                                 </th>
     198                                }
     199
     200                                $attributes = "class='$classes'$style";
     201
     202                                if ( 'cb' === $column_name ){
     203                                        ?>
     204                                        <th scope="row" class="check-column">
     205                                                <label class="screen-reader-text" for="blog_<?php echo $user->ID; ?>"><?php echo sprintf( __( 'Select %s' ), $user->user_login ); ?></label>
     206                                                <input type="checkbox" id="blog_<?php echo $user->ID ?>" name="allusers[]" value="<?php echo esc_attr( $user->ID ) ?>" />
     207                                        </th>
    200208                                        <?php
    201                                         break;
    202 
    203                                         case 'username':
    204                                                 $avatar = get_avatar( $user->user_email, 32 );
    205                                                 $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) );
    206 
    207                                                 echo "<td $attributes>"; ?>
    208                                                         <?php echo $avatar; ?><strong><a href="<?php echo $edit_link; ?>" class="edit"><?php echo $user->user_login; ?></a><?php
     209                                } else {
     210                                        echo "<td $attributes>";
     211                                       
     212                                        switch ( $column_name ) {
     213                                                case 'username':
     214                                                        $avatar = get_avatar( $user->user_email, 32 );
     215                                                        $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) );
     216
     217                                                        echo $avatar; ?><strong><a href="<?php echo $edit_link; ?>" class="edit"><?php echo $user->user_login; ?></a><?php
    209218                                                        if ( in_array( $user->user_login, $super_admins ) )
    210219                                                                echo ' - ' . __( 'Super Admin' );
    211220                                                        ?></strong>
    212                                                         <br/>
    213                                                         <?php
    214                                                                 $actions = array();
    215                                                                 $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>';
    216 
    217                                                                 if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) {
    218                                                                         $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>';
    219                                                                 }
    220 
    221                                                                 /**
    222                                                                  * Filter the action links displayed under each user
    223                                                                  * in the Network Admin Users list table.
    224                                                                  *
    225                                                                  * @since 3.2.0
    226                                                                  *
    227                                                                  * @param array   $actions An array of action links to be displayed.
    228                                                                  *                         Default 'Edit', 'Delete'.
    229                                                                  * @param WP_User $user    WP_User object.
    230                                                                  */
    231                                                                 $actions = apply_filters( 'ms_user_row_actions', $actions, $user );
    232                                                                 echo $this->row_actions( $actions );
    233                                                         ?>
    234                                                 </td>
    235                                         <?php
    236                                         break;
    237 
    238                                         case 'name':
    239                                                 echo "<td $attributes>$user->first_name $user->last_name</td>";
    240                                         break;
    241 
    242                                         case 'email':
    243                                                 echo "<td $attributes><a href='mailto:$user->user_email'>$user->user_email</a></td>";
    244                                         break;
    245 
    246                                         case 'registered':
    247                                                 if ( 'list' == $mode )
    248                                                         $date = __( 'Y/m/d' );
    249                                                 else
    250                                                         $date = __( 'Y/m/d g:i:s a' );
    251 
    252                                                 echo "<td $attributes>" . mysql2date( $date, $user->user_registered ) . "</td>";
    253                                         break;
    254 
    255                                         case 'blogs':
    256                                                 $blogs = get_blogs_of_user( $user->ID, true );
    257                                                 echo "<td $attributes>";
     221                                                <?php
     222                                                break;
     223
     224                                                case 'name':
     225                                                        echo "$user->first_name $user->last_name";
     226                                                break;
     227
     228                                                case 'email':
     229                                                        echo "<a href='mailto:$user->user_email'>$user->user_email</a>";
     230                                                break;
     231
     232                                                case 'registered':
     233                                                        if ( 'list' == $mode )
     234                                                                $date = __( 'Y/m/d' );
     235                                                        else
     236                                                                $date = __( 'Y/m/d g:i:s a' );
     237
     238                                                        echo mysql2date( $date, $user->user_registered );
     239                                                break;
     240
     241                                                case 'blogs':
     242                                                        $blogs = get_blogs_of_user( $user->ID, true );
    258243                                                        if ( is_array( $blogs ) ) {
    259244                                                                foreach ( (array) $blogs as $key => $val ) {
     
    306291                                                                }
    307292                                                        }
    308                                                         ?>
    309                                                 </td>
    310                                         <?php
    311                                         break;
    312 
    313                                         default:
    314                                                 echo "<td $attributes>";
    315                                                 /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */
    316                                                 echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID );
    317                                                 echo "</td>";
    318                                         break;
     293                                                break;
     294
     295                                                default:
     296                                                        /** This filter is documented in wp-admin/includes/class-wp-users-list-table.php */
     297                                                        echo apply_filters( 'manage_users_custom_column', '', $column_name, $user->ID );
     298                                                break;
     299                                        }
     300
     301                                        echo $this->handle_row_actions( $user, $column_name, $primary );
     302                                        echo '</td>';
    319303                                }
    320304                        endforeach
     
    324308                }
    325309        }
     310
     311        /**
     312         * Get name of default primary column
     313         *
     314         * @since 4.3.0
     315         * @access protected
     316         *
     317         * @return string
     318         */
     319        protected function get_default_primary_column_name() {
     320                return 'username';
     321        }
     322
     323        /**
     324         * Generate and display row actions links
     325         *
     326         * @since 4.3.0
     327         * @access protected
     328         *
     329         * @param object $user User being acted upon
     330         * @param string $column_name Current column name
     331         * @param string $primary Primary column name
     332         *
     333         * @return string
     334         */
     335        protected function handle_row_actions( $user, $column_name, $primary ) {
     336                $super_admins = get_super_admins();
     337                $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user->ID ) ) );
     338
     339                if ( $primary === $column_name ) {
     340                        $actions = array();
     341                        $actions['edit'] = '<a href="' . $edit_link . '">' . __( 'Edit' ) . '</a>';
     342
     343                        if ( current_user_can( 'delete_user', $user->ID ) && ! in_array( $user->user_login, $super_admins ) ) {
     344                                $actions['delete'] = '<a href="' . $delete = esc_url( network_admin_url( add_query_arg( '_wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'users.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user->ID ) ) ) . '" class="delete">' . __( 'Delete' ) . '</a>';
     345                        }
     346
     347                        /**
     348                         * Filter the action links displayed under each user
     349                         * in the Network Admin Users list table.
     350                         *
     351                         * @since 3.2.0
     352                         *
     353                         * @param array   $actions An array of action links to be displayed.
     354                         *                         Default 'Edit', 'Delete'.
     355                         * @param WP_User $user    WP_User object.
     356                         */
     357                        $actions = apply_filters( 'ms_user_row_actions', $actions, $user );
     358                        return $this->row_actions( $actions );
     359                }
     360        }
    326361}
Note: See TracChangeset for help on using the changeset viewer.