WordPress.org

Make WordPress Core

Ticket #15634: 15634.warn-on-wxr-version.diff

File 15634.warn-on-wxr-version.diff, 3.3 KB (added by duck_, 7 years ago)
  • trunk/parsers.php

     
    200200                        'categories' => $categories,
    201201                        'tags' => $tags,
    202202                        'terms' => $terms,
    203                         'base_url' => $base_url
     203                        'base_url' => $base_url,
     204                        'version' => $wxr_version
    204205                );
    205206        }
    206207}
     
    224225        );
    225226
    226227        function parse( $file ) {
    227                 $this->is_wxr_file = $this->in_post = $this->cdata = $this->data = $this->sub_data = $this->in_tag = $this->in_sub_tag = false;
     228                $this->wxr_version = $this->in_post = $this->cdata = $this->data = $this->sub_data = $this->in_tag = $this->in_sub_tag = false;
    228229                $this->authors = $this->posts = $this->term = $this->category = $this->tag = array();
    229230
    230231                $xml = xml_parser_create( 'UTF-8' );
     
    243244                }
    244245                xml_parser_free( $xml );
    245246
    246                 if ( ! $this->is_wxr_file )
     247                if ( ! preg_match( '/^\d+\.\d+$/', $this->wxr_version ) )
    247248                        return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) );
    248249
    249250                return array(
     
    252253                        'categories' => $this->category,
    253254                        'tags' => $this->tag,
    254255                        'terms' => $this->term,
    255                         'base_url' => $this->base_url
     256                        'base_url' => $this->base_url,
     257                        'version' => $this->wxr_version
    256258                );
    257259        }
    258260
     
    333335                                $this->base_url = $this->cdata;
    334336                                break;
    335337                        case 'wp:wxr_version':
    336                                 $this->is_wxr_file = preg_match( '/^\d+\.\d+$/', $this->cdata );
     338                                $this->wxr_version = $this->cdata;
    337339                                break;
    338340
    339341                        default:
     
    370372        }
    371373
    372374        function parse( $file ) {
    373                 $is_wxr = $in_post = false;
     375                $wxr_version = $in_post = false;
    374376
    375377                $fp = $this->fopen( $file, 'r' );
    376378                if ( $fp ) {
    377379                        while ( ! $this->feof( $fp ) ) {
    378380                                $importline = rtrim( $this->fgets( $fp ) );
    379381
    380                                 if ( ! $is_wxr && preg_match( '|<wp:wxr_version>\d+\.\d+</wp:wxr_version>|', $importline ) )
    381                                         $is_wxr = true;
     382                                if ( ! $wxr_version && preg_match( '|<wp:wxr_version>(\d+\.\d+)</wp:wxr_version>|', $importline, $version ) )
     383                                        $wxr_version = $version[1];
    382384
    383385                                if ( false !== strpos( $importline, '<wp:base_site_url>' ) ) {
    384386                                        preg_match( '|<wp:base_site_url>(.*?)</wp:base_site_url>|is', $importline, $url );
     
    433435                        'categories' => $this->categories,
    434436                        'tags' => $this->tags,
    435437                        'terms' => $this->terms,
    436                         'base_url' => $this->base_url
     438                        'base_url' => $this->base_url,
     439                        'version' => $wxr_version
    437440                );
    438441        }
    439442
  • trunk/wordpress-importer.php

     
    3535 */
    3636if ( class_exists( 'WP_Importer' ) ) {
    3737class WP_Import extends WP_Importer {
     38        var $wxr_version = 1.1; // max. supported WXR version
     39
    3840        var $id; // WXR attachment ID
    3941
    4042        // information to import from WXR file
     
    197199                        return false;
    198200                }
    199201
     202                if ( $import_data['version'] > $this->wxr_version ) {
     203                        echo '<div class="error"><p><strong>';
     204                        printf( __( 'This WXR file (version %s) may not be supported by this version of the importer, please try upgrading.', 'wordpress-importer' ), esc_html($import_data['version']) );
     205                        echo '</strong></p></div>';
     206                }
     207
    200208                $this->get_authors_from_import( $import_data );
    201209
    202210                return true;