Make WordPress Core


Ignore:
Timestamp:
07/17/2016 03:31:29 PM (8 years ago)
Author:
ocean90
Message:

Import: Enhance accessibility on the Import screen.

  • Remove title attributes.
  • Show "Install Now" and "Details" links if the importer isn't installed yet.
  • Show a "Run Importer" link if the importer is installed. It also handles activation if the plugin isn't activated.
  • Add aria-label attributes to each link.
  • Unify the importer descriptions to make them independent from the plugin state. The API was changed in [meta3690].
  • Adjust JavaScript callbacks for ajaxified importer installs.

Props afercia, swissspidy, ocean90.
See #24766.
Fixes #35191.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/import.php

    r37998 r38075  
    3131);
    3232
    33 if ( current_user_can( 'install_plugins' ) )
     33if ( current_user_can( 'install_plugins' ) ) {
     34    // List of popular importer plugins from the WordPress.org API.
    3435    $popular_importers = wp_get_popular_importers();
    35 else
    36     $popular_importers = array();
     36} else {
     37    $popular_importers = array();
     38}
    3739
    3840// Detect and redirect invalid importers like 'movabletype', which is registered as 'mt'
     
    6769
    6870<?php
    69 
     71// Registered (already installed) importers. They're stored in the global $wp_importers.
    7072$importers = get_importers();
    7173
     
    7678    if ( isset( $importers[ $pop_data['importer-id'] ] ) )
    7779        continue;
     80
     81    // Fill the array of registered (already installed) importers with data of the popular importers from the WordPress.org API.
    7882    $importers[ $pop_data['importer-id'] ] = array( $pop_data['name'], $pop_data['description'], 'install' => $pop_data['plugin-slug'] );
    7983}
     
    8690<table class="widefat importers striped">
    8791
    88 <?php
    89     foreach ($importers as $importer_id => $data) {
    90         $action = '';
     92    <?php
     93    foreach ( $importers as $importer_id => $data ) {
     94        $plugin_slug = $action = '';
     95        $is_plugin_installed = false;
     96
    9197        if ( isset( $data['install'] ) ) {
    9298            $plugin_slug = $data['install'];
     99
    93100            if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) {
    94                 // Looks like Importer is installed, But not active
     101                // Looks like an importer is installed, but not active.
    95102                $plugins = get_plugins( '/' . $plugin_slug );
    96                 if ( !empty($plugins) ) {
    97                     $keys = array_keys($plugins);
     103                if ( ! empty( $plugins ) ) {
     104                    $keys = array_keys( $plugins );
    98105                    $plugin_file = $plugin_slug . '/' . $keys[0];
    99                     $action = '<a href="' . esc_url(wp_nonce_url(admin_url('plugins.php?action=activate&plugin=' . $plugin_file . '&from=import'), 'activate-plugin_' . $plugin_file)) .
    100                                             '"title="' . esc_attr__('Activate importer') . '"">' . $data[0] . '</a>';
     106                    $url = wp_nonce_url( add_query_arg( array(
     107                        'action' => 'activate',
     108                        'plugin' => $plugin_file,
     109                        'from'   => 'import',
     110                    ), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_file );
     111                    $action = sprintf(
     112                        '<a href="%s" aria-label="%s">%s</a>',
     113                        esc_url( $url ),
     114                        /* translators: %s: Importer name */
     115                        esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ),
     116                        __( 'Run Importer' )
     117                    );
     118
     119                    $is_plugin_installed = true;
    101120                }
    102121            }
    103             if ( empty($action) ) {
     122
     123            if ( empty( $action ) ) {
    104124                if ( is_main_site() ) {
    105                     $action = '<a href="' . esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $plugin_slug .
    106                                         '&from=import&TB_iframe=true&width=600&height=550' ) ) . '" class="thickbox open-plugin-details-modal" title="' .
    107                                         esc_attr__('Install importer') . '">' . $data[0] . '</a>';
     125                    $url = wp_nonce_url( add_query_arg( array(
     126                        'action' => 'install-plugin',
     127                        'plugin' => $plugin_slug,
     128                        'from'   => 'import',
     129                    ), self_admin_url( 'update.php' ) ), 'install-plugin_' . $plugin_slug );
     130                    $action = sprintf(
     131                        '<a href="%1$s" class="install-now" data-slug="%2$s" data-name="%3$s" aria-label="%4$s">%5$s</a>',
     132                        esc_url( $url ),
     133                        esc_attr( $plugin_slug ),
     134                        esc_attr( $data[0] ),
     135                        /* translators: %s: Importer name */
     136                        esc_attr( sprintf( __( 'Install %s' ), $data[0] ) ),
     137                        __( 'Install Now' )
     138                    );
    108139                } else {
    109                     $action = $data[0];
    110                     $data[1] = sprintf( __( 'This importer is not installed. Please install importers from <a href="%s">the main site</a>.' ), get_admin_url( $current_site->blog_id, 'import.php' ) );
     140                    $action = sprintf(
     141                        /* translators: URL to wp-admin/import.php */
     142                        __( 'This importer is not installed. Please install importers from <a href="%s">the main site</a>.' ),
     143                        get_admin_url( get_current_network_id(), 'import.php' )
     144                    );
    111145                }
    112146            }
    113147        } else {
    114             $action = "<a href='" . esc_url( "admin.php?import=$importer_id" ) . "' title='" . esc_attr( wptexturize( strip_tags( $data[1] ) ) ) ."'>{$data[0]}</a>";
     148            $url = add_query_arg( array(
     149                'import' => $importer_id,
     150            ), self_admin_url( 'admin.php' ) );
     151            $action = sprintf(
     152                '<a href="%1$s" aria-label="%2$s">%3$s</a>',
     153                esc_url( $url ),
     154                /* translators: %s: Importer name */
     155                esc_attr( sprintf( __( 'Run %s' ), $data[0] ) ),
     156                __( 'Run Importer' )
     157            );
     158
     159            $is_plugin_installed = true;
    115160        }
    116161
     162        if ( ! $is_plugin_installed && is_main_site() ) {
     163            $url = add_query_arg( array(
     164                'tab'       => 'plugin-information',
     165                'plugin'    => $plugin_slug,
     166                'from'      => 'import',
     167                'TB_iframe' => 'true',
     168                'width'     => 600,
     169                'height'    => 550,
     170            ), network_admin_url( 'plugin-install.php' ) );
     171            $action .= sprintf(
     172                ' | <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">%3$s</a>',
     173                esc_url( $url ),
     174                /* translators: %s: Importer name */
     175                esc_attr( sprintf( __( 'More information about %s' ), $data[0] ) ),
     176                __( 'Details' )
     177            );
     178        }
     179
    117180        echo "
    118             <tr>
    119                 <td class='import-system row-title'>$action</td>
    120                 <td class='desc'>{$data[1]}</td>
     181            <tr class='importer-item'>
     182                <td class='import-system'>
     183                    <span class='importer-title'>{$data[0]}</span>
     184                    <span class='importer-action'>{$action}</span>
     185                </td>
     186                <td class='desc'>
     187                    <span class='importer-desc'>{$data[1]}</span>
     188                </td>
    121189            </tr>";
    122190    }
    123 ?>
    124 
     191    ?>
    125192</table>
    126193<?php
Note: See TracChangeset for help on using the changeset viewer.