WordPress.org

Make WordPress Core

Ticket #18977: 18977.2.patch

File 18977.2.patch, 8.3 KB (added by dllh, 17 months ago)
  • wp-admin/includes/import.php

     
    9393 
    9494        return array( 'file' => $file, 'id' => $id ); 
    9595} 
     96 
     97/** 
     98 * Returns a list from WordPress.org of popular importer plugins. 
     99 * 
     100 * @since 3.5.0 
     101 * 
     102 * @return array Importers with metadata for each. 
     103 */ 
     104function wp_get_popular_importers() { 
     105        include ABSPATH . WPINC . '/version.php'; // include an unmodified $wp_version 
     106 
     107        $locale = get_locale(); 
     108        $popular_importers = get_site_transient( 'popular_importers_' . $locale ); 
     109 
     110        if ( ! $popular_importers ) { 
     111                $url = add_query_arg( 'locale', get_locale(), 'http://api.wordpress.org/core/importers/1.0/' ); 
     112                $options = array( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() ); 
     113                $popular_importers = maybe_unserialize( wp_remote_retrieve_body( wp_remote_get( $url, $options ) ) ); 
     114 
     115                if ( is_array( $popular_importers ) ) 
     116                        set_site_transient( 'popular_importers_' . $locale, $popular_importers, 2 * DAY_IN_SECONDS ); 
     117                else 
     118                        $popular_importers = false; 
     119        } 
     120 
     121        if ( is_array( $popular_importers ) ) { 
     122                // If the data was received as translated, return it as-is. 
     123                if ( $popular_importers['translated'] ) 
     124                        return $popular_importers['importers']; 
     125 
     126                foreach ( $popular_importers['importers'] as &$importer ) { 
     127                        $importer['description'] = translate( $importer['description'] ); 
     128                        if ( $importer['name'] != 'WordPress' ) 
     129                                $importer['name'] = translate( $importer['name'] ); 
     130                } 
     131                return $popular_importers['importers']; 
     132        } 
     133 
     134        return array( 
     135                // slug => name, description, plugin slug, and register_importer() slug 
     136                'blogger' => array( 
     137                        'name' => __( 'Blogger' ), 
     138                        'description' => __( 'Install the Blogger importer to import posts, comments, and users from a Blogger blog.' ), 
     139                        'plugin-slug' => 'blogger-importer', 
     140                        'importer-id' => 'blogger', 
     141                ), 
     142                'wpcat2tag' => array( 
     143                        'name' => __( 'Categories and Tags Converter' ), 
     144                        'description' => __( 'Install the category/tag converter to convert existing categories to tags or tags to categories, selectively.' ), 
     145                        'plugin-slug' => 'wpcat2tag-importer', 
     146                        'importer-id' => 'wp-cat2tag', 
     147                ), 
     148                'livejournal' => array( 
     149                        'name' => __( 'LiveJournal' ), 
     150                        'description' => __( 'Install the LiveJournal importer to import posts from LiveJournal using their API.' ), 
     151                        'plugin-slug' => 'livejournal-importer', 
     152                        'importer-id' => 'livejournal', 
     153                ), 
     154                'movabletype' => array( 
     155                        'name' => __( 'Movable Type and TypePad' ), 
     156                        'description' => __( 'Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog.' ), 
     157                        'plugin-slug' => 'movabletype-importer', 
     158                        'importer-id' => 'mt', 
     159                ), 
     160                'opml' => array( 
     161                        'name' => __( 'Blogroll' ), 
     162                        'description' => __( 'Install the blogroll importer to import links in OPML format.' ), 
     163                        'plugin-slug' => 'opml-importer', 
     164                        'importer-id' => 'opml', 
     165                ), 
     166                'rss' => array( 
     167                        'name' => __( 'RSS' ), 
     168                        'description' => __( 'Install the RSS importer to import posts from an RSS feed.' ), 
     169                        'plugin-slug' => 'rss-importer', 
     170                        'importer-id' => 'rss', 
     171                ), 
     172                'tumblr' => array( 
     173                        'name' => __( 'Tumblr' ), 
     174                        'description' => __( 'Install the Tumblr importer to import posts & media from Tumblr using their API.' ), 
     175                        'plugin-slug' => 'tumblr-importer', 
     176                        'importer-id' => 'tumblr', 
     177                ), 
     178                'wordpress' => array( 
     179                        'name' => 'WordPress', 
     180                        'description' => __( 'Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.' ), 
     181                        'plugin-slug' => 'wordpress-importer', 
     182                        'importer-id' => 'wordpress', 
     183                ), 
     184        ); 
     185} 
  • wp-admin/import.php

     
    2929        '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>' 
    3030); 
    3131 
    32 $popular_importers = array(); 
    33 if ( current_user_can('install_plugins') ) 
    34         $popular_importers = array( 
    35                 'blogger' => array( __('Blogger'), __('Install the Blogger importer to import posts, comments, and users from a Blogger blog.'), 'install' ), 
    36                 'wpcat2tag' => array(__('Categories and Tags Converter'), __('Install the category/tag converter to convert existing categories to tags or tags to categories, selectively.'), 'install', 'wp-cat2tag' ), 
    37                 'livejournal' => array( __( 'LiveJournal' ), __( 'Install the LiveJournal importer to import posts from LiveJournal using their API.' ), 'install' ), 
    38                 'movabletype' => array( __('Movable Type and TypePad'), __('Install the Movable Type importer to import posts and comments from a Movable Type or TypePad blog.'), 'install', 'mt' ), 
    39                 'opml' => array( __('Blogroll'), __('Install the blogroll importer to import links in OPML format.'), 'install' ), 
    40                 'rss' => array( __('RSS'), __('Install the RSS importer to import posts from an RSS feed.'), 'install' ), 
    41                 'tumblr' => array( __('Tumblr'), __('Install the Tumblr importer to import posts &amp; media from Tumblr using their API.'), 'install' ), 
    42                 'wordpress' => array( 'WordPress', __('Install the WordPress importer to import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.'), 'install' ) 
    43         ); 
     32if ( current_user_can( 'install_plugins' ) ) 
     33        $popular_importers = wp_get_popular_importers(); 
     34else 
     35        $popular_importers = array(); 
    4436 
    45 if ( ! empty( $_GET['invalid'] ) && !empty($popular_importers[$_GET['invalid']][3]) ) { 
    46         wp_redirect( admin_url('import.php?import=' . $popular_importers[$_GET['invalid']][3]) ); 
    47         exit; 
     37// Detect and redirect invalid importers like 'movabletype', which is registered as 'mt' 
     38if ( ! empty( $_GET['invalid'] ) && isset( $popular_importers[ $_GET['invalid'] ] ) ) { 
     39        $importer_id = $popular_importers[ $_GET['invalid'] ]['importer-id']; 
     40        if ( $importer_id != $_GET['invalid'] ) { // Prevent redirect loops. 
     41                wp_redirect( admin_url( 'admin.php?import=' . $importer_id ) ); 
     42                exit; 
     43        } 
     44        unset( $importer_id ); 
    4845} 
    4946 
    5047add_thickbox(); 
     
    6865 
    6966// If a popular importer is not registered, create a dummy registration that links to the plugin installer. 
    7067foreach ( $popular_importers as $pop_importer => $pop_data ) { 
    71         if ( isset( $importers[$pop_importer] ) ) 
     68        if ( isset( $importers[ $pop_importer ] ) ) 
    7269                continue; 
    73         if ( isset( $pop_data[3] ) && isset( $importers[ $pop_data[3] ] ) ) 
     70        if ( isset( $importers[ $pop_data['importer-id'] ] ) ) 
    7471                continue; 
    75  
    76         $importers[$pop_importer] = $popular_importers[$pop_importer]; 
     72        $importers[ $pop_data['importer-id'] ] = array( $pop_data['name'], $pop_data['description'], 'install' => $pop_data['plugin-slug'] ); 
    7773} 
    7874 
    79 if ( empty($importers) ) { 
    80         echo '<p>'.__('No importers are available.').'</p>'; // TODO: make more helpful 
     75if ( empty( $importers ) ) { 
     76        echo '<p>' . __('No importers are available.') . '</p>'; // TODO: make more helpful 
    8177} else { 
    82         uasort($importers, create_function('$a, $b', 'return strcmp($a[0], $b[0]);')); 
     78        uasort($importers, create_function('$a, $b', 'return strnatcasecmp($a[0], $b[0]);')); 
    8379?> 
    8480<table class="widefat importers" cellspacing="0"> 
    8581 
    8682<?php 
    87         $style = ''; 
    88         foreach ($importers as $id => $data) { 
    89                 $style = ('class="alternate"' == $style || 'class="alternate active"' == $style) ? '' : 'alternate'; 
     83        $alt = ''; 
     84        foreach ($importers as $importer_id => $data) { 
    9085                $action = ''; 
    91                 if ( 'install' == $data[2] ) { 
    92                         $plugin_slug = $id . '-importer'; 
     86                if ( isset( $data['install'] ) ) { 
     87                        $plugin_slug = $data['install']; 
    9388                        if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_slug ) ) { 
    9489                                // Looks like Importer is installed, But not active 
    9590                                $plugins = get_plugins( '/' . $plugin_slug ); 
     
    111106                                } 
    112107                        } 
    113108                } else { 
    114                         $action = "<a href='" . esc_url("admin.php?import=$id") . "' title='" . esc_attr( wptexturize(strip_tags($data[1])) ) ."'>{$data[0]}</a>"; 
     109                        $action = "<a href='" . esc_url( "admin.php?import=$importer_id" ) . "' title='" . esc_attr( wptexturize( strip_tags( $data[1] ) ) ) ."'>{$data[0]}</a>"; 
    115110                } 
    116111 
    117                 if ($style != '') 
    118                         $style = 'class="'.$style.'"'; 
     112                $alt = $alt ? '' : ' class="alternate"'; 
    119113                echo " 
    120                         <tr $style> 
     114                        <tr$alt> 
    121115                                <td class='import-system row-title'>$action</td> 
    122116                                <td class='desc'>{$data[1]}</td> 
    123117                        </tr>";