From 33ec99a00310658743153b20454553953b2186d8 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Tue, 2 Sep 2014 21:34:09 +0200 Subject: [PATCH] Adds some plugins --- .../jquery.ui.progressbar.min.1.7.2.js | 13 + .../jquery-ui/jquery.ui.progressbar.min.js | 16 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 213 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 124 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 123 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 3457 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 130 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 112 bytes .../redmond/jquery-ui-1.7.2.custom.css | 406 ++++++ .../plugins/regenerate-thumbnails/readme.txt | 118 ++ .../regenerate-thumbnails.php | 405 ++++++ .../regenerate-thumbnails/screenshot-1.png | Bin 0 -> 83994 bytes .../regenerate-thumbnails/screenshot-2.png | Bin 0 -> 26775 bytes .../regenerate-thumbnails/screenshot-3.png | Bin 0 -> 50192 bytes .../languages/wordpress-importer.pot | 231 ++++ .../plugins/wordpress-importer/parsers.php | 664 ++++++++++ .../plugins/wordpress-importer/readme.txt | 107 ++ .../wordpress-importer/wordpress-importer.php | 1132 +++++++++++++++++ 20 files changed, 3092 insertions(+) create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.1.7.2.js create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.js create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_55_fbec88_40x100.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/jquery-ui-1.7.2.custom.css create mode 100644 wp-content/plugins/regenerate-thumbnails/readme.txt create mode 100644 wp-content/plugins/regenerate-thumbnails/regenerate-thumbnails.php create mode 100644 wp-content/plugins/regenerate-thumbnails/screenshot-1.png create mode 100644 wp-content/plugins/regenerate-thumbnails/screenshot-2.png create mode 100644 wp-content/plugins/regenerate-thumbnails/screenshot-3.png create mode 100644 wp-content/plugins/wordpress-importer/languages/wordpress-importer.pot create mode 100644 wp-content/plugins/wordpress-importer/parsers.php create mode 100644 wp-content/plugins/wordpress-importer/readme.txt create mode 100644 wp-content/plugins/wordpress-importer/wordpress-importer.php diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.1.7.2.js b/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.1.7.2.js new file mode 100644 index 0000000..990c4a3 --- /dev/null +++ b/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.1.7.2.js @@ -0,0 +1,13 @@ +/* + * jQuery UI Progressbar 1.7.2 + * + * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * ui.core.js + */ +(function(a){a.widget("ui.progressbar",{_init:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this._valueMin(),"aria-valuemax":this._valueMax(),"aria-valuenow":this._value()});this.valueDiv=a('
').appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow").removeData("progressbar").unbind(".progressbar");this.valueDiv.remove();a.widget.prototype.destroy.apply(this,arguments)},value:function(b){if(b===undefined){return this._value()}this._setData("value",b);return this},_setData:function(b,c){switch(b){case"value":this.options.value=c;this._refreshValue();this._trigger("change",null,{});break}a.widget.prototype._setData.apply(this,arguments)},_value:function(){var b=this.options.value;if(bthis._valueMax()){b=this._valueMax()}return b},_valueMin:function(){var b=0;return b},_valueMax:function(){var b=100;return b},_refreshValue:function(){var b=this.value();this.valueDiv[b==this._valueMax()?"addClass":"removeClass"]("ui-corner-right");this.valueDiv.width(b+"%");this.element.attr("aria-valuenow",b)}});a.extend(a.ui.progressbar,{version:"1.7.2",defaults:{value:0}})})(jQuery);; \ No newline at end of file diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.js b/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.js new file mode 100644 index 0000000..3f82ddb --- /dev/null +++ b/wp-content/plugins/regenerate-thumbnails/jquery-ui/jquery.ui.progressbar.min.js @@ -0,0 +1,16 @@ +/* + * jQuery UI Progressbar 1.8.6 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("
").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change");this._value()===this.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a= +this.value();this.valueDiv.toggleClass("ui-corner-right",a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.6"})})(jQuery); diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png b/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_55_fbec88_40x100.png b/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_flat_55_fbec88_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff0d2968ba10a10c610de6e497835621fdeeee5 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!N$PA*qrS22FRJ?>EalY(fIbdAy>152*br0 zm#ZW46DD2}+Em!s|xjZW|^1EO|(5d{JeUmv{p6fa-GJh;t>KCH4`R~7(L8qj} Y_egNRQF(If70@^aPgg&ebxsLQ0Qgob)Bpeg literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_85_dfeffc_1x400.png b/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_85_dfeffc_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..014951529c315d6042e72febc310a4d2db5b4a82 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq?|lm978O6-<~(*YA_IRxoBVf zfAX@vsV!R#l$@#*eLnw)_Sv|_?i7P!ORnX)SxaXh+BPpZ!Fw~yjr&#G|Jw^YMHDhV X&EsZx`7bsSXc~j3tDnm{r-UW|&(SK+ literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_95_fef1ec_1x400.png b/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/wp-content/plugins/regenerate-thumbnails/jquery-ui/redmond/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..81ecc362d50ef5abbc0420aacd5345822f1f6098 GIT binary patch literal 3457 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 Media) after previously uploading images or have changed to a theme with different featured post image dimensions. + +You can either regenerate the thumbnails for all image uploads, individual image uploads, or specific multiple image uploads. + +See the [screenshots tab](http://wordpress.org/extend/plugins/regenerate-thumbnails/screenshots/) for more details. + +== Installation == + +1. Go to your admin area and select Plugins -> Add new from the menu. +2. Search for "Regenerate Thumbnails". +3. Click install. +4. Click activate. + +== Screenshots == + +1. The plugin at work regenerating thumbnails +2. You can resize single images by hovering over their row in the Media Library +2. You can resize specific multiples images using the checkboxes and the "Bulk Actions" dropdown + +== ChangeLog == + += Version 2.2.4 = + +* Better AJAX response error handling in the JavaScript. This should fix a long-standing bug in this plugin. Props Hew Sutton. + += Version 2.2.3 = + +* Make the capability required to use this plugin filterable so themes and other plugins can change it. Props [Jackson Whelan](http://jacksonwhelan.com/). + += Version 2.2.2 = + +* Don't check the nonce until we're sure that the action called was for this plugin. Fixes lots of "Are you sure you want to do this?" error messages. + += Version 2.2.1 = + +* Fix the bottom bulk action dropdown. Thanks Stefan for pointing out the issue! + += Version 2.2.0 = + +* Changes to the Bulk Action functionality were made shortly before the release of WordPress 3.1 which broke the way I implemented the specific multiple image regeneration feature. This version adds to the Bulk Action menu using Javascript as that's the only way to do it currently. + += Version 2.1.3 = + +* Move the `error_reporting()` call in the AJAX handler to the beginning so that we're more sure that no PHP errors are outputted. Some hosts disable usage of `set_time_limit()` and calling it was causing a PHP warning to be outputted. + += Version 2.1.2 = + +* When regenerating all images, newest images are done first rather than the oldest. +* Fixed a bug with regeneration error reporting in some browsers. Thanks to pete-sch for reporting the error. +* Supress PHP errors in the AJAX handler to avoid sending an invalid JSON response. Thanks to pete-sch for reporting the error. +* Better and more detailed error reporting for when `wp_generate_attachment_metadata()` fails. + += Version 2.1.1 = + +* Clean up the wording a bit to better match the new features and just be easier to understand. +* Updated screenshots. + += Version 2.1.0 = + +Lots of new features! + +* Thanks to a lot of jQuery help from [Boris Schapira](http://borisschapira.com/), a failed image regeneration will no longer stop the whole process. +* The results of each image regeneration is now outputted. You can easily see which images were successfully regenerated and which failed. Was inspired by a concept by Boris. +* There is now a button on the regeneration page that will allow you to abort resizing images for any reason. Based on code by Boris. +* You can now regenerate single images from the Media page. The link to do so will show up in the actions list when you hover over the row. +* You can now bulk regenerate multiple from the Media page. Check the boxes and then select "Regenerate Thumbnails" form the "Bulk Actions" dropdown. WordPress 3.1+ only. +* The total time that the regeneration process took is now displayed in the final status message. +* jQuery UI Progressbar version upgraded. + += Version 2.0.3 = + +* Switch out deprecated function call. + += Version 2.0.2 = + +* Directly query the database to only fetch what the plugin needs (the attachment ID). This will reduce the memory required as it's not storing the whole row for each attachment. + += Version 2.0.1 = + +* I accidentally left a `check_admin_referer()` (nonce check) commented out. + += Version 2.0.0 = + +* Recoded from scratch. Now uses an AJAX request per attachment to do the resizing. No more PHP maximum execution time errors or anything like that. Also features a pretty progress bar to let the user know how it's going. + += Version 1.1.0 = + +* WordPress 2.7 updates -- code + UI. Thanks to jdub and Patrick F. + += Version 1.0.0 = + +* Initial release. + +== Upgrade Notice == + += 2.2.4 = +Better AJAX response error handling in the JavaScript. This should fix a long-standing bug in this plugin. Props Hew Sutton. + += 2.2.3 = +Make the capability required to use this plugin filterable so themes and other plugins can change it. Props [Jackson Whelan](http://jacksonwhelan.com/). + += 2.2.2 = +Fixes lots of "Are you sure you want to do this?" error messages. + += 2.2.1 = +Fix the bottom bulk action dropdown. Thanks Stefan for pointing out the issue! \ No newline at end of file diff --git a/wp-content/plugins/regenerate-thumbnails/regenerate-thumbnails.php b/wp-content/plugins/regenerate-thumbnails/regenerate-thumbnails.php new file mode 100644 index 0000000..2f20f3c --- /dev/null +++ b/wp-content/plugins/regenerate-thumbnails/regenerate-thumbnails.php @@ -0,0 +1,405 @@ +. + +**************************************************************************/ + +class RegenerateThumbnails { + var $menu_id; + + // Plugin initialization + function RegenerateThumbnails() { + // Load up the localization file if we're using WordPress in a different language + // Place it in this plugin's "localization" folder and name it "regenerate-thumbnails-[value in wp-config].mo" + load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' ); + + add_action( 'admin_menu', array( &$this, 'add_admin_menu' ) ); + add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueues' ) ); + add_action( 'wp_ajax_regeneratethumbnail', array( &$this, 'ajax_process_image' ) ); + add_filter( 'media_row_actions', array( &$this, 'add_media_row_action' ), 10, 2 ); + //add_filter( 'bulk_actions-upload', array( &$this, 'add_bulk_actions' ), 99 ); // A last minute change to 3.1 makes this no longer work + add_action( 'admin_head-upload.php', array( &$this, 'add_bulk_actions_via_javascript' ) ); + add_action( 'admin_action_bulk_regenerate_thumbnails', array( &$this, 'bulk_action_handler' ) ); // Top drowndown + add_action( 'admin_action_-1', array( &$this, 'bulk_action_handler' ) ); // Bottom dropdown (assumes top dropdown = default value) + + // Allow people to change what capability is required to use this plugin + $this->capability = apply_filters( 'regenerate_thumbs_cap', 'manage_options' ); + } + + + // Register the management page + function add_admin_menu() { + $this->menu_id = add_management_page( __( 'Regenerate Thumbnails', 'regenerate-thumbnails' ), __( 'Regen. Thumbnails', 'regenerate-thumbnails' ), $this->capability, 'regenerate-thumbnails', array(&$this, 'regenerate_interface') ); + } + + + // Enqueue the needed Javascript and CSS + function admin_enqueues( $hook_suffix ) { + if ( $hook_suffix != $this->menu_id ) + return; + + // WordPress 3.1 vs older version compatibility + if ( wp_script_is( 'jquery-ui-widget', 'registered' ) ) + wp_enqueue_script( 'jquery-ui-progressbar', plugins_url( 'jquery-ui/jquery.ui.progressbar.min.js', __FILE__ ), array( 'jquery-ui-core', 'jquery-ui-widget' ), '1.8.6' ); + else + wp_enqueue_script( 'jquery-ui-progressbar', plugins_url( 'jquery-ui/jquery.ui.progressbar.min.1.7.2.js', __FILE__ ), array( 'jquery-ui-core' ), '1.7.2' ); + + wp_enqueue_style( 'jquery-ui-regenthumbs', plugins_url( 'jquery-ui/redmond/jquery-ui-1.7.2.custom.css', __FILE__ ), array(), '1.7.2' ); + } + + + // Add a "Regenerate Thumbnails" link to the media row actions + function add_media_row_action( $actions, $post ) { + if ( 'image/' != substr( $post->post_mime_type, 0, 6 ) || ! current_user_can( $this->capability ) ) + return $actions; + + $url = wp_nonce_url( admin_url( 'tools.php?page=regenerate-thumbnails&goback=1&ids=' . $post->ID ), 'regenerate-thumbnails' ); + $actions['regenerate_thumbnails'] = '' . __( 'Regenerate Thumbnails', 'regenerate-thumbnails' ) . ''; + + return $actions; + } + + + // Add "Regenerate Thumbnails" to the Bulk Actions media dropdown + function add_bulk_actions( $actions ) { + $delete = false; + if ( ! empty( $actions['delete'] ) ) { + $delete = $actions['delete']; + unset( $actions['delete'] ); + } + + $actions['bulk_regenerate_thumbnails'] = __( 'Regenerate Thumbnails', 'regenerate-thumbnails' ); + + if ( $delete ) + $actions['delete'] = $delete; + + return $actions; + } + + + // Add new items to the Bulk Actions using Javascript + // A last minute change to the "bulk_actions-xxxxx" filter in 3.1 made it not possible to add items using that + function add_bulk_actions_via_javascript() { + if ( ! current_user_can( $this->capability ) ) + return; +?> + + + + + +
+

+ +capability ) ) + wp_die( __( 'Cheatin’ uh?' ) ); + + // Form nonce check + check_admin_referer( 'regenerate-thumbnails' ); + + // Create the list of image IDs + if ( ! empty( $_REQUEST['ids'] ) ) { + $images = array_map( 'intval', explode( ',', trim( $_REQUEST['ids'], ',' ) ) ); + $ids = implode( ',', $images ); + } else { + // Directly querying the database is normally frowned upon, but all + // of the API functions will return the full post objects which will + // suck up lots of memory. This is best, just not as future proof. + if ( ! $images = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE 'image/%' ORDER BY ID DESC" ) ) { + echo '

' . sprintf( __( "Unable to find any images. Are you sure some exist?", 'regenerate-thumbnails' ), admin_url( 'upload.php?post_mime_type=image' ) ) . "

"; + return; + } + + // Generate the list of IDs + $ids = array(); + foreach ( $images as $image ) + $ids[] = $image->ID; + $ids = implode( ',', $ids ); + } + + echo '

' . __( "Please be patient while the thumbnails are regenerated. This can take a while if your server is slow (inexpensive hosting) or if you have many images. Do not navigate away from this page until this script is done or the thumbnails will not be resized. You will be notified via this page when the regenerating is completed.", 'regenerate-thumbnails' ) . '

'; + + $count = count( $images ); + + $text_goback = ( ! empty( $_GET['goback'] ) ) ? sprintf( __( 'To go back to the previous page, click here.', 'regenerate-thumbnails' ), 'javascript:history.go(-1)' ) : ''; + $text_failures = sprintf( __( 'All done! %1$s image(s) were successfully resized in %2$s seconds and there were %3$s failure(s). To try regenerating the failed images again, click here. %5$s', 'regenerate-thumbnails' ), "' + rt_successes + '", "' + rt_totaltime + '", "' + rt_errors + '", esc_url( wp_nonce_url( admin_url( 'tools.php?page=regenerate-thumbnails&goback=1' ), 'regenerate-thumbnails' ) . '&ids=' ) . "' + rt_failedlist + '", $text_goback ); + $text_nofailures = sprintf( __( 'All done! %1$s image(s) were successfully resized in %2$s seconds and there were 0 failures. %3$s', 'regenerate-thumbnails' ), "' + rt_successes + '", "' + rt_totaltime + '", $text_goback ); +?> + + + + +
+
+
+ +

+ +

+ +

+
+ 0' ); ?>
+ 0' ); ?> +

+ +
    +
  1. +
+ + + +
+ + +

media settings page. Old thumbnails will be kept to avoid any broken images due to hard-coded URLs.", 'regenerate-thumbnails' ), admin_url( 'options-media.php' ) ); ?>

+ +

Media page. Hover over an image's row and click the link to resize just that one image or use the checkboxes and the "Bulk Actions" dropdown to resize multiple images (WordPress 3.1+ only).", 'regenerate-thumbnails '), admin_url( 'upload.php' ) ); ?>

+ +

+ +

+ +

+ + + +
+ + + +post_type || 'image/' != substr( $image->post_mime_type, 0, 6 ) ) + die( json_encode( array( 'error' => sprintf( __( 'Failed resize: %s is an invalid image ID.', 'regenerate-thumbnails' ), esc_html( $_REQUEST['id'] ) ) ) ) ); + + if ( ! current_user_can( $this->capability ) ) + $this->die_json_error_msg( $image->ID, __( "Your user account doesn't have permission to resize images", 'regenerate-thumbnails' ) ); + + $fullsizepath = get_attached_file( $image->ID ); + + if ( false === $fullsizepath || ! file_exists( $fullsizepath ) ) + $this->die_json_error_msg( $image->ID, sprintf( __( 'The originally uploaded image file cannot be found at %s', 'regenerate-thumbnails' ), '' . esc_html( $fullsizepath ) . '' ) ); + + @set_time_limit( 900 ); // 5 minutes per image should be PLENTY + + $metadata = wp_generate_attachment_metadata( $image->ID, $fullsizepath ); + + if ( is_wp_error( $metadata ) ) + $this->die_json_error_msg( $image->ID, $metadata->get_error_message() ); + if ( empty( $metadata ) ) + $this->die_json_error_msg( $image->ID, __( 'Unknown failure reason.', 'regenerate-thumbnails' ) ); + + // If this fails, then it just means that nothing was changed (old value == new value) + wp_update_attachment_metadata( $image->ID, $metadata ); + + die( json_encode( array( 'success' => sprintf( __( '"%1$s" (ID %2$s) was successfully resized in %3$s seconds.', 'regenerate-thumbnails' ), esc_html( get_the_title( $image->ID ) ), $image->ID, timer_stop() ) ) ) ); + } + + + // Helper to make a JSON error message + function die_json_error_msg( $id, $message ) { + die( json_encode( array( 'error' => sprintf( __( '"%1$s" (ID %2$s) failed to resize. The error message was: %3$s', 'regenerate-thumbnails' ), esc_html( get_the_title( $id ) ), $id, $message ) ) ) ); + } + + + // Helper function to escape quotes in strings for use in Javascript + function esc_quotes( $string ) { + return str_replace( '"', '\"', $string ); + } +} + +// Start up this plugin +add_action( 'init', 'RegenerateThumbnails' ); +function RegenerateThumbnails() { + global $RegenerateThumbnails; + $RegenerateThumbnails = new RegenerateThumbnails(); +} + +?> \ No newline at end of file diff --git a/wp-content/plugins/regenerate-thumbnails/screenshot-1.png b/wp-content/plugins/regenerate-thumbnails/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8a04be0e94adc8ade379a7d231ed0e367d43b3 GIT binary patch literal 83994 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
    AI__h_1bUEmsBpQ@p07R{&l-35TYELCQg~ry*4O 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
  1. U~{YWt-=lSeveO zR2)uwBPAj!aO7Q%`jB?T(nFIr>ZpVZjTjz&VLJ3gi zU_-eAi&ZAUs{mSeEm^28?FPQ}u9GSOS4$W2TgO=2L#^~=9qoK_%lL*m_u>=kSvjFs z+P1I~HD$0y*x7L$JzAD?7i}lBIYOEwf!+qJz03h71_pi4%a4zb{jrqtruq4K*_HWq zYS_V%5wV1kf|hotQ)NnE%@F5zoN zs8p&vKR-IWvAp(`ntbGyr4y|;+jxi`B2^i3(?CEdErnh`jyRhW29l9#Zg-1^haq?AXhsx>eE+Rp$2;RpA z^{9}Mk+oRnjrsBEy1J&)PAhS*FfHG<8x6~oXQVKEsHe}p+q2CK{G)tAl=jSY)Fg&} zIthlu)}+PI2_?*sua}=4Ii-^FHW8!Mb0#u^a_-i0IX%slQ_|tC5 zi8R@B?Edv{`3t>HXh4HlYKkBTn+_25DALa?0CRC>7Q(`yv%ncT$wiA#Otg}kcC-P@ ztJ@u~%jqi@l;t!})9+rKBcu0hi^ihJWxqEX#uVg!51Fqh)FfZXin{X}g@=n0Qa4pG z726yQY-J<9EQK*k*l@-1aMCaDx-@kZ41MGf^9#ubJQBFTdw)T}_*+<0M971uQmabM z1Bik2<#oO4&g=dxv=66+l|vgTil^Z!JC@u%ccOL=E6aQt%GW^^t*7?+O`7$ssRrrElc-0dSg3AVzFk=pVF3Mw!#c^q4Rcn9Wn@>{v?}>fM`+u>}Xg0@6T%rD-rSUr}C3m_51Cu`MP1>!N!&!G)Z)gxa%ygw%pXzx`{ch+8HvT&x`B4AhXYf4ni5nsiomB%j*03aqj$+n;cQ*u+oeE~G+`78_ zB$-wGprjj%3Qw%*4tuE)*x@FtPok|`8>Vlp*oH2Tc+r`ogVwEQB^FhaI=vy2IJcYC zbYpZiJa50nKghL%nKu+_qhndy_G#q(!>VBa_Sv}kpIbY$fRIm5Je9QgYXED^f^IxuKB}<|iNB2D@C!D(72pL1;rKc8rcsF#EvYzCwg$ zY+&i|dUdw6j3i~?;28DUVuW(ol%qzMke5gPWX_m~z@U>Jc7m@nqaUb{y*0F#Q2lE* z?Cbgym=3700&dJ0``472uRW)ZqVbsao)ihB9x-7g@a1p+{1LT`QL105_>4lOZ~Kmi z7sGS;PnDZKAWLWUr!oQy8$YVx(2r~kH1Y|sL*>EmTDB|ey=*Tp$9;Jz1WLCEr literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/screenshot-2.png b/wp-content/plugins/regenerate-thumbnails/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a9047247d31fd2e3ab5ed3af1982b4d6093eeea2 GIT binary patch literal 26775 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 literal 0 HcmV?d00001 diff --git a/wp-content/plugins/regenerate-thumbnails/screenshot-3.png b/wp-content/plugins/regenerate-thumbnails/screenshot-3.png new file mode 100644 index 0000000000000000000000000000000000000000..037e4949e5463291549023bb966f4b645c5ed708 GIT binary patch literal 50192 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\n" +"Language-Team: LANGUAGE \n" + +#: parsers.php:42 parsers.php:63 +msgid "There was an error when reading this WXR file" +msgstr "" + +#: parsers.php:43 +msgid "" +"Details are shown above. The importer will now try again with a different " +"parser..." +msgstr "" + +#: parsers.php:67 parsers.php:72 parsers.php:262 parsers.php:451 +msgid "" +"This does not appear to be a WXR file, missing/invalid WXR version number" +msgstr "" + +#: wordpress-importer.php:134 wordpress-importer.php:143 +#: wordpress-importer.php:194 wordpress-importer.php:202 +msgid "Sorry, there has been an error." +msgstr "" + +#: wordpress-importer.php:135 +msgid "The file does not exist, please try again." +msgstr "" + +#: wordpress-importer.php:178 +msgid "All done." +msgstr "" + +#: wordpress-importer.php:178 +msgid "Have fun!" +msgstr "" + +#: wordpress-importer.php:179 +msgid "Remember to update the passwords and roles of imported users." +msgstr "" + +#: wordpress-importer.php:210 +msgid "" +"This WXR file (version %s) may not be supported by this version of the " +"importer. Please consider updating." +msgstr "" + +#: wordpress-importer.php:235 +msgid "" +"Failed to import author %s. Their posts will be attributed to the current " +"user." +msgstr "" + +#: wordpress-importer.php:261 +msgid "Assign Authors" +msgstr "" + +#: wordpress-importer.php:262 +msgid "" +"To make it easier for you to edit and save the imported content, you may " +"want to reassign the author of the imported item to an existing user of this " +"site. For example, you may want to import all the entries as admins entries." +msgstr "" + +#: wordpress-importer.php:264 +msgid "" +"If a new user is created by WordPress, a new password will be randomly " +"generated and the new user’s role will be set as %s. Manually changing " +"the new user’s details will be necessary." +msgstr "" + +#: wordpress-importer.php:274 +msgid "Import Attachments" +msgstr "" + +#: wordpress-importer.php:277 +msgid "Download and import file attachments" +msgstr "" + +#: wordpress-importer.php:281 +msgid "Submit" +msgstr "" + +#: wordpress-importer.php:294 +msgid "Import author:" +msgstr "" + +#: wordpress-importer.php:305 +msgid "or create new user with login name:" +msgstr "" + +#: wordpress-importer.php:308 +msgid "as a new user:" +msgstr "" + +#: wordpress-importer.php:316 +msgid "assign posts to an existing user:" +msgstr "" + +#: wordpress-importer.php:318 +msgid "or assign posts to an existing user:" +msgstr "" + +#: wordpress-importer.php:319 +msgid "- Select -" +msgstr "" + +#: wordpress-importer.php:369 +msgid "" +"Failed to create new user for %s. Their posts will be attributed to the " +"current user." +msgstr "" + +#: wordpress-importer.php:418 +msgid "Failed to import category %s" +msgstr "" + +#: wordpress-importer.php:456 +msgid "Failed to import post tag %s" +msgstr "" + +#: wordpress-importer.php:500 wordpress-importer.php:626 +msgid "Failed to import %s %s" +msgstr "" + +#: wordpress-importer.php:522 +msgid "Failed to import “%s”: Invalid post type %s" +msgstr "" + +#: wordpress-importer.php:543 +msgid "%s “%s” already exists." +msgstr "" + +#: wordpress-importer.php:598 +msgid "Failed to import %s “%s”" +msgstr "" + +#: wordpress-importer.php:744 +msgid "Menu item skipped due to missing menu slug" +msgstr "" + +#: wordpress-importer.php:751 +msgid "Menu item skipped due to invalid menu slug: %s" +msgstr "" + +#: wordpress-importer.php:814 +msgid "Fetching attachments is not enabled" +msgstr "" + +#: wordpress-importer.php:827 +msgid "Invalid file type" +msgstr "" + +#: wordpress-importer.php:871 +msgid "Remote server did not respond" +msgstr "" + +#: wordpress-importer.php:877 +msgid "Remote server returned error response %1$d %2$s" +msgstr "" + +#: wordpress-importer.php:884 +msgid "Remote file is incorrect size" +msgstr "" + +#: wordpress-importer.php:889 +msgid "Zero size file downloaded" +msgstr "" + +#: wordpress-importer.php:895 +msgid "Remote file is too large, limit is %s" +msgstr "" + +#: wordpress-importer.php:994 +msgid "Import WordPress" +msgstr "" + +#: wordpress-importer.php:1001 +msgid "" +"A new version of this importer is available. Please update to version %s to " +"ensure compatibility with newer export files." +msgstr "" + +#: wordpress-importer.php:1016 +msgid "" +"Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import " +"the posts, pages, comments, custom fields, categories, and tags into this " +"site." +msgstr "" + +#: wordpress-importer.php:1017 +msgid "Choose a WXR (.xml) file to upload, then click Upload file and import." +msgstr "" + +#: wordpress-importer.php:1091 +msgid "" +"Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file." +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "WordPress Importer" +msgstr "" + +#. Plugin URI of the plugin/theme +msgid "http://wordpress.org/extend/plugins/wordpress-importer/" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"Import posts, pages, comments, custom fields, categories, tags and more from " +"a WordPress export file." +msgstr "" + +#. Author of the plugin/theme +msgid "wordpressdotorg" +msgstr "" + +#. Author URI of the plugin/theme +msgid "http://wordpress.org/" +msgstr "" diff --git a/wp-content/plugins/wordpress-importer/parsers.php b/wp-content/plugins/wordpress-importer/parsers.php new file mode 100644 index 0000000..f3cee6c --- /dev/null +++ b/wp-content/plugins/wordpress-importer/parsers.php @@ -0,0 +1,664 @@ +parse( $file ); + + // If SimpleXML succeeds or this is an invalid WXR file then return the results + if ( ! is_wp_error( $result ) || 'SimpleXML_parse_error' != $result->get_error_code() ) + return $result; + } else if ( extension_loaded( 'xml' ) ) { + $parser = new WXR_Parser_XML; + $result = $parser->parse( $file ); + + // If XMLParser succeeds or this is an invalid WXR file then return the results + if ( ! is_wp_error( $result ) || 'XML_parse_error' != $result->get_error_code() ) + return $result; + } + + // We have a malformed XML file, so display the error and fallthrough to regex + if ( isset($result) && defined('IMPORT_DEBUG') && IMPORT_DEBUG ) { + echo '
    ';
    +			if ( 'SimpleXML_parse_error' == $result->get_error_code() ) {
    +				foreach  ( $result->get_error_data() as $error )
    +					echo $error->line . ':' . $error->column . ' ' . esc_html( $error->message ) . "\n";
    +			} else if ( 'XML_parse_error' == $result->get_error_code() ) {
    +				$error = $result->get_error_data();
    +				echo $error[0] . ':' . $error[1] . ' ' . esc_html( $error[2] );
    +			}
    +			echo '
    '; + echo '

    ' . __( 'There was an error when reading this WXR file', 'wordpress-importer' ) . '
    '; + echo __( 'Details are shown above. The importer will now try again with a different parser...', 'wordpress-importer' ) . '

    '; + } + + // use regular expressions if nothing else available or this is bad XML + $parser = new WXR_Parser_Regex; + return $parser->parse( $file ); + } +} + +/** + * WXR Parser that makes use of the SimpleXML PHP extension. + */ +class WXR_Parser_SimpleXML { + function parse( $file ) { + $authors = $posts = $categories = $tags = $terms = array(); + + $internal_errors = libxml_use_internal_errors(true); + + $dom = new DOMDocument; + $old_value = null; + if ( function_exists( 'libxml_disable_entity_loader' ) ) { + $old_value = libxml_disable_entity_loader( true ); + } + $success = $dom->loadXML( file_get_contents( $file ) ); + if ( ! is_null( $old_value ) ) { + libxml_disable_entity_loader( $old_value ); + } + + if ( ! $success || isset( $dom->doctype ) ) { + return new WP_Error( 'SimpleXML_parse_error', __( 'There was an error when reading this WXR file', 'wordpress-importer' ), libxml_get_errors() ); + } + + $xml = simplexml_import_dom( $dom ); + unset( $dom ); + + // halt if loading produces an error + if ( ! $xml ) + return new WP_Error( 'SimpleXML_parse_error', __( 'There was an error when reading this WXR file', 'wordpress-importer' ), libxml_get_errors() ); + + $wxr_version = $xml->xpath('/rss/channel/wp:wxr_version'); + if ( ! $wxr_version ) + return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); + + $wxr_version = (string) trim( $wxr_version[0] ); + // confirm that we are dealing with the correct file format + if ( ! preg_match( '/^\d+\.\d+$/', $wxr_version ) ) + return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); + + $base_url = $xml->xpath('/rss/channel/wp:base_site_url'); + $base_url = (string) trim( $base_url[0] ); + + $namespaces = $xml->getDocNamespaces(); + if ( ! isset( $namespaces['wp'] ) ) + $namespaces['wp'] = 'http://wordpress.org/export/1.1/'; + if ( ! isset( $namespaces['excerpt'] ) ) + $namespaces['excerpt'] = 'http://wordpress.org/export/1.1/excerpt/'; + + // grab authors + foreach ( $xml->xpath('/rss/channel/wp:author') as $author_arr ) { + $a = $author_arr->children( $namespaces['wp'] ); + $login = (string) $a->author_login; + $authors[$login] = array( + 'author_id' => (int) $a->author_id, + 'author_login' => $login, + 'author_email' => (string) $a->author_email, + 'author_display_name' => (string) $a->author_display_name, + 'author_first_name' => (string) $a->author_first_name, + 'author_last_name' => (string) $a->author_last_name + ); + } + + // grab cats, tags and terms + foreach ( $xml->xpath('/rss/channel/wp:category') as $term_arr ) { + $t = $term_arr->children( $namespaces['wp'] ); + $categories[] = array( + 'term_id' => (int) $t->term_id, + 'category_nicename' => (string) $t->category_nicename, + 'category_parent' => (string) $t->category_parent, + 'cat_name' => (string) $t->cat_name, + 'category_description' => (string) $t->category_description + ); + } + + foreach ( $xml->xpath('/rss/channel/wp:tag') as $term_arr ) { + $t = $term_arr->children( $namespaces['wp'] ); + $tags[] = array( + 'term_id' => (int) $t->term_id, + 'tag_slug' => (string) $t->tag_slug, + 'tag_name' => (string) $t->tag_name, + 'tag_description' => (string) $t->tag_description + ); + } + + foreach ( $xml->xpath('/rss/channel/wp:term') as $term_arr ) { + $t = $term_arr->children( $namespaces['wp'] ); + $terms[] = array( + 'term_id' => (int) $t->term_id, + 'term_taxonomy' => (string) $t->term_taxonomy, + 'slug' => (string) $t->term_slug, + 'term_parent' => (string) $t->term_parent, + 'term_name' => (string) $t->term_name, + 'term_description' => (string) $t->term_description + ); + } + + // grab posts + foreach ( $xml->channel->item as $item ) { + $post = array( + 'post_title' => (string) $item->title, + 'guid' => (string) $item->guid, + ); + + $dc = $item->children( 'http://purl.org/dc/elements/1.1/' ); + $post['post_author'] = (string) $dc->creator; + + $content = $item->children( 'http://purl.org/rss/1.0/modules/content/' ); + $excerpt = $item->children( $namespaces['excerpt'] ); + $post['post_content'] = (string) $content->encoded; + $post['post_excerpt'] = (string) $excerpt->encoded; + + $wp = $item->children( $namespaces['wp'] ); + $post['post_id'] = (int) $wp->post_id; + $post['post_date'] = (string) $wp->post_date; + $post['post_date_gmt'] = (string) $wp->post_date_gmt; + $post['comment_status'] = (string) $wp->comment_status; + $post['ping_status'] = (string) $wp->ping_status; + $post['post_name'] = (string) $wp->post_name; + $post['status'] = (string) $wp->status; + $post['post_parent'] = (int) $wp->post_parent; + $post['menu_order'] = (int) $wp->menu_order; + $post['post_type'] = (string) $wp->post_type; + $post['post_password'] = (string) $wp->post_password; + $post['is_sticky'] = (int) $wp->is_sticky; + + if ( isset($wp->attachment_url) ) + $post['attachment_url'] = (string) $wp->attachment_url; + + foreach ( $item->category as $c ) { + $att = $c->attributes(); + if ( isset( $att['nicename'] ) ) + $post['terms'][] = array( + 'name' => (string) $c, + 'slug' => (string) $att['nicename'], + 'domain' => (string) $att['domain'] + ); + } + + foreach ( $wp->postmeta as $meta ) { + $post['postmeta'][] = array( + 'key' => (string) $meta->meta_key, + 'value' => (string) $meta->meta_value + ); + } + + foreach ( $wp->comment as $comment ) { + $meta = array(); + if ( isset( $comment->commentmeta ) ) { + foreach ( $comment->commentmeta as $m ) { + $meta[] = array( + 'key' => (string) $m->meta_key, + 'value' => (string) $m->meta_value + ); + } + } + + $post['comments'][] = array( + 'comment_id' => (int) $comment->comment_id, + 'comment_author' => (string) $comment->comment_author, + 'comment_author_email' => (string) $comment->comment_author_email, + 'comment_author_IP' => (string) $comment->comment_author_IP, + 'comment_author_url' => (string) $comment->comment_author_url, + 'comment_date' => (string) $comment->comment_date, + 'comment_date_gmt' => (string) $comment->comment_date_gmt, + 'comment_content' => (string) $comment->comment_content, + 'comment_approved' => (string) $comment->comment_approved, + 'comment_type' => (string) $comment->comment_type, + 'comment_parent' => (string) $comment->comment_parent, + 'comment_user_id' => (int) $comment->comment_user_id, + 'commentmeta' => $meta, + ); + } + + $posts[] = $post; + } + + return array( + 'authors' => $authors, + 'posts' => $posts, + 'categories' => $categories, + 'tags' => $tags, + 'terms' => $terms, + 'base_url' => $base_url, + 'version' => $wxr_version + ); + } +} + +/** + * WXR Parser that makes use of the XML Parser PHP extension. + */ +class WXR_Parser_XML { + var $wp_tags = array( + 'wp:post_id', 'wp:post_date', 'wp:post_date_gmt', 'wp:comment_status', 'wp:ping_status', 'wp:attachment_url', + 'wp:status', 'wp:post_name', 'wp:post_parent', 'wp:menu_order', 'wp:post_type', 'wp:post_password', + 'wp:is_sticky', 'wp:term_id', 'wp:category_nicename', 'wp:category_parent', 'wp:cat_name', 'wp:category_description', + 'wp:tag_slug', 'wp:tag_name', 'wp:tag_description', 'wp:term_taxonomy', 'wp:term_parent', + 'wp:term_name', 'wp:term_description', 'wp:author_id', 'wp:author_login', 'wp:author_email', 'wp:author_display_name', + 'wp:author_first_name', 'wp:author_last_name', + ); + var $wp_sub_tags = array( + 'wp:comment_id', 'wp:comment_author', 'wp:comment_author_email', 'wp:comment_author_url', + 'wp:comment_author_IP', 'wp:comment_date', 'wp:comment_date_gmt', 'wp:comment_content', + 'wp:comment_approved', 'wp:comment_type', 'wp:comment_parent', 'wp:comment_user_id', + ); + + function parse( $file ) { + $this->wxr_version = $this->in_post = $this->cdata = $this->data = $this->sub_data = $this->in_tag = $this->in_sub_tag = false; + $this->authors = $this->posts = $this->term = $this->category = $this->tag = array(); + + $xml = xml_parser_create( 'UTF-8' ); + xml_parser_set_option( $xml, XML_OPTION_SKIP_WHITE, 1 ); + xml_parser_set_option( $xml, XML_OPTION_CASE_FOLDING, 0 ); + xml_set_object( $xml, $this ); + xml_set_character_data_handler( $xml, 'cdata' ); + xml_set_element_handler( $xml, 'tag_open', 'tag_close' ); + + if ( ! xml_parse( $xml, file_get_contents( $file ), true ) ) { + $current_line = xml_get_current_line_number( $xml ); + $current_column = xml_get_current_column_number( $xml ); + $error_code = xml_get_error_code( $xml ); + $error_string = xml_error_string( $error_code ); + return new WP_Error( 'XML_parse_error', 'There was an error when reading this WXR file', array( $current_line, $current_column, $error_string ) ); + } + xml_parser_free( $xml ); + + if ( ! preg_match( '/^\d+\.\d+$/', $this->wxr_version ) ) + return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); + + return array( + 'authors' => $this->authors, + 'posts' => $this->posts, + 'categories' => $this->category, + 'tags' => $this->tag, + 'terms' => $this->term, + 'base_url' => $this->base_url, + 'version' => $this->wxr_version + ); + } + + function tag_open( $parse, $tag, $attr ) { + if ( in_array( $tag, $this->wp_tags ) ) { + $this->in_tag = substr( $tag, 3 ); + return; + } + + if ( in_array( $tag, $this->wp_sub_tags ) ) { + $this->in_sub_tag = substr( $tag, 3 ); + return; + } + + switch ( $tag ) { + case 'category': + if ( isset($attr['domain'], $attr['nicename']) ) { + $this->sub_data['domain'] = $attr['domain']; + $this->sub_data['slug'] = $attr['nicename']; + } + break; + case 'item': $this->in_post = true; + case 'title': if ( $this->in_post ) $this->in_tag = 'post_title'; break; + case 'guid': $this->in_tag = 'guid'; break; + case 'dc:creator': $this->in_tag = 'post_author'; break; + case 'content:encoded': $this->in_tag = 'post_content'; break; + case 'excerpt:encoded': $this->in_tag = 'post_excerpt'; break; + + case 'wp:term_slug': $this->in_tag = 'slug'; break; + case 'wp:meta_key': $this->in_sub_tag = 'key'; break; + case 'wp:meta_value': $this->in_sub_tag = 'value'; break; + } + } + + function cdata( $parser, $cdata ) { + if ( ! trim( $cdata ) ) + return; + + $this->cdata .= trim( $cdata ); + } + + function tag_close( $parser, $tag ) { + switch ( $tag ) { + case 'wp:comment': + unset( $this->sub_data['key'], $this->sub_data['value'] ); // remove meta sub_data + if ( ! empty( $this->sub_data ) ) + $this->data['comments'][] = $this->sub_data; + $this->sub_data = false; + break; + case 'wp:commentmeta': + $this->sub_data['commentmeta'][] = array( + 'key' => $this->sub_data['key'], + 'value' => $this->sub_data['value'] + ); + break; + case 'category': + if ( ! empty( $this->sub_data ) ) { + $this->sub_data['name'] = $this->cdata; + $this->data['terms'][] = $this->sub_data; + } + $this->sub_data = false; + break; + case 'wp:postmeta': + if ( ! empty( $this->sub_data ) ) + $this->data['postmeta'][] = $this->sub_data; + $this->sub_data = false; + break; + case 'item': + $this->posts[] = $this->data; + $this->data = false; + break; + case 'wp:category': + case 'wp:tag': + case 'wp:term': + $n = substr( $tag, 3 ); + array_push( $this->$n, $this->data ); + $this->data = false; + break; + case 'wp:author': + if ( ! empty($this->data['author_login']) ) + $this->authors[$this->data['author_login']] = $this->data; + $this->data = false; + break; + case 'wp:base_site_url': + $this->base_url = $this->cdata; + break; + case 'wp:wxr_version': + $this->wxr_version = $this->cdata; + break; + + default: + if ( $this->in_sub_tag ) { + $this->sub_data[$this->in_sub_tag] = ! empty( $this->cdata ) ? $this->cdata : ''; + $this->in_sub_tag = false; + } else if ( $this->in_tag ) { + $this->data[$this->in_tag] = ! empty( $this->cdata ) ? $this->cdata : ''; + $this->in_tag = false; + } + } + + $this->cdata = false; + } +} + +/** + * WXR Parser that uses regular expressions. Fallback for installs without an XML parser. + */ +class WXR_Parser_Regex { + var $authors = array(); + var $posts = array(); + var $categories = array(); + var $tags = array(); + var $terms = array(); + var $base_url = ''; + + function WXR_Parser_Regex() { + $this->__construct(); + } + + function __construct() { + $this->has_gzip = is_callable( 'gzopen' ); + } + + function parse( $file ) { + $wxr_version = $in_post = false; + + $fp = $this->fopen( $file, 'r' ); + if ( $fp ) { + while ( ! $this->feof( $fp ) ) { + $importline = rtrim( $this->fgets( $fp ) ); + + if ( ! $wxr_version && preg_match( '|(\d+\.\d+)|', $importline, $version ) ) + $wxr_version = $version[1]; + + if ( false !== strpos( $importline, '' ) ) { + preg_match( '|(.*?)|is', $importline, $url ); + $this->base_url = $url[1]; + continue; + } + if ( false !== strpos( $importline, '' ) ) { + preg_match( '|(.*?)|is', $importline, $category ); + $this->categories[] = $this->process_category( $category[1] ); + continue; + } + if ( false !== strpos( $importline, '' ) ) { + preg_match( '|(.*?)|is', $importline, $tag ); + $this->tags[] = $this->process_tag( $tag[1] ); + continue; + } + if ( false !== strpos( $importline, '' ) ) { + preg_match( '|(.*?)|is', $importline, $term ); + $this->terms[] = $this->process_term( $term[1] ); + continue; + } + if ( false !== strpos( $importline, '' ) ) { + preg_match( '|(.*?)|is', $importline, $author ); + $a = $this->process_author( $author[1] ); + $this->authors[$a['author_login']] = $a; + continue; + } + if ( false !== strpos( $importline, '' ) ) { + $post = ''; + $in_post = true; + continue; + } + if ( false !== strpos( $importline, '' ) ) { + $in_post = false; + $this->posts[] = $this->process_post( $post ); + continue; + } + if ( $in_post ) { + $post .= $importline . "\n"; + } + } + + $this->fclose($fp); + } + + if ( ! $wxr_version ) + return new WP_Error( 'WXR_parse_error', __( 'This does not appear to be a WXR file, missing/invalid WXR version number', 'wordpress-importer' ) ); + + return array( + 'authors' => $this->authors, + 'posts' => $this->posts, + 'categories' => $this->categories, + 'tags' => $this->tags, + 'terms' => $this->terms, + 'base_url' => $this->base_url, + 'version' => $wxr_version + ); + } + + function get_tag( $string, $tag ) { + preg_match( "|<$tag.*?>(.*?)|is", $string, $return ); + if ( isset( $return[1] ) ) { + if ( substr( $return[1], 0, 9 ) == '' ) !== false ) { + preg_match_all( '||s', $return[1], $matches ); + $return = ''; + foreach( $matches[1] as $match ) + $return .= $match; + } else { + $return = preg_replace( '|^$|s', '$1', $return[1] ); + } + } else { + $return = $return[1]; + } + } else { + $return = ''; + } + return $return; + } + + function process_category( $c ) { + return array( + 'term_id' => $this->get_tag( $c, 'wp:term_id' ), + 'cat_name' => $this->get_tag( $c, 'wp:cat_name' ), + 'category_nicename' => $this->get_tag( $c, 'wp:category_nicename' ), + 'category_parent' => $this->get_tag( $c, 'wp:category_parent' ), + 'category_description' => $this->get_tag( $c, 'wp:category_description' ), + ); + } + + function process_tag( $t ) { + return array( + 'term_id' => $this->get_tag( $t, 'wp:term_id' ), + 'tag_name' => $this->get_tag( $t, 'wp:tag_name' ), + 'tag_slug' => $this->get_tag( $t, 'wp:tag_slug' ), + 'tag_description' => $this->get_tag( $t, 'wp:tag_description' ), + ); + } + + function process_term( $t ) { + return array( + 'term_id' => $this->get_tag( $t, 'wp:term_id' ), + 'term_taxonomy' => $this->get_tag( $t, 'wp:term_taxonomy' ), + 'slug' => $this->get_tag( $t, 'wp:term_slug' ), + 'term_parent' => $this->get_tag( $t, 'wp:term_parent' ), + 'term_name' => $this->get_tag( $t, 'wp:term_name' ), + 'term_description' => $this->get_tag( $t, 'wp:term_description' ), + ); + } + + function process_author( $a ) { + return array( + 'author_id' => $this->get_tag( $a, 'wp:author_id' ), + 'author_login' => $this->get_tag( $a, 'wp:author_login' ), + 'author_email' => $this->get_tag( $a, 'wp:author_email' ), + 'author_display_name' => $this->get_tag( $a, 'wp:author_display_name' ), + 'author_first_name' => $this->get_tag( $a, 'wp:author_first_name' ), + 'author_last_name' => $this->get_tag( $a, 'wp:author_last_name' ), + ); + } + + function process_post( $post ) { + $post_id = $this->get_tag( $post, 'wp:post_id' ); + $post_title = $this->get_tag( $post, 'title' ); + $post_date = $this->get_tag( $post, 'wp:post_date' ); + $post_date_gmt = $this->get_tag( $post, 'wp:post_date_gmt' ); + $comment_status = $this->get_tag( $post, 'wp:comment_status' ); + $ping_status = $this->get_tag( $post, 'wp:ping_status' ); + $status = $this->get_tag( $post, 'wp:status' ); + $post_name = $this->get_tag( $post, 'wp:post_name' ); + $post_parent = $this->get_tag( $post, 'wp:post_parent' ); + $menu_order = $this->get_tag( $post, 'wp:menu_order' ); + $post_type = $this->get_tag( $post, 'wp:post_type' ); + $post_password = $this->get_tag( $post, 'wp:post_password' ); + $is_sticky = $this->get_tag( $post, 'wp:is_sticky' ); + $guid = $this->get_tag( $post, 'guid' ); + $post_author = $this->get_tag( $post, 'dc:creator' ); + + $post_excerpt = $this->get_tag( $post, 'excerpt:encoded' ); + $post_excerpt = preg_replace_callback( '|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_excerpt ); + $post_excerpt = str_replace( '
    ', '
    ', $post_excerpt ); + $post_excerpt = str_replace( '
    ', '
    ', $post_excerpt ); + + $post_content = $this->get_tag( $post, 'content:encoded' ); + $post_content = preg_replace_callback( '|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_content ); + $post_content = str_replace( '
    ', '
    ', $post_content ); + $post_content = str_replace( '
    ', '
    ', $post_content ); + + $postdata = compact( 'post_id', 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_excerpt', + 'post_title', 'status', 'post_name', 'comment_status', 'ping_status', 'guid', 'post_parent', + 'menu_order', 'post_type', 'post_password', 'is_sticky' + ); + + $attachment_url = $this->get_tag( $post, 'wp:attachment_url' ); + if ( $attachment_url ) + $postdata['attachment_url'] = $attachment_url; + + preg_match_all( '|(.+?)|is', $post, $terms, PREG_SET_ORDER ); + foreach ( $terms as $t ) { + $post_terms[] = array( + 'slug' => $t[2], + 'domain' => $t[1], + 'name' => str_replace( array( '' ), '', $t[3] ), + ); + } + if ( ! empty( $post_terms ) ) $postdata['terms'] = $post_terms; + + preg_match_all( '|(.+?)|is', $post, $comments ); + $comments = $comments[1]; + if ( $comments ) { + foreach ( $comments as $comment ) { + preg_match_all( '|(.+?)|is', $comment, $commentmeta ); + $commentmeta = $commentmeta[1]; + $c_meta = array(); + foreach ( $commentmeta as $m ) { + $c_meta[] = array( + 'key' => $this->get_tag( $m, 'wp:meta_key' ), + 'value' => $this->get_tag( $m, 'wp:meta_value' ), + ); + } + + $post_comments[] = array( + 'comment_id' => $this->get_tag( $comment, 'wp:comment_id' ), + 'comment_author' => $this->get_tag( $comment, 'wp:comment_author' ), + 'comment_author_email' => $this->get_tag( $comment, 'wp:comment_author_email' ), + 'comment_author_IP' => $this->get_tag( $comment, 'wp:comment_author_IP' ), + 'comment_author_url' => $this->get_tag( $comment, 'wp:comment_author_url' ), + 'comment_date' => $this->get_tag( $comment, 'wp:comment_date' ), + 'comment_date_gmt' => $this->get_tag( $comment, 'wp:comment_date_gmt' ), + 'comment_content' => $this->get_tag( $comment, 'wp:comment_content' ), + 'comment_approved' => $this->get_tag( $comment, 'wp:comment_approved' ), + 'comment_type' => $this->get_tag( $comment, 'wp:comment_type' ), + 'comment_parent' => $this->get_tag( $comment, 'wp:comment_parent' ), + 'comment_user_id' => $this->get_tag( $comment, 'wp:comment_user_id' ), + 'commentmeta' => $c_meta, + ); + } + } + if ( ! empty( $post_comments ) ) $postdata['comments'] = $post_comments; + + preg_match_all( '|(.+?)|is', $post, $postmeta ); + $postmeta = $postmeta[1]; + if ( $postmeta ) { + foreach ( $postmeta as $p ) { + $post_postmeta[] = array( + 'key' => $this->get_tag( $p, 'wp:meta_key' ), + 'value' => $this->get_tag( $p, 'wp:meta_value' ), + ); + } + } + if ( ! empty( $post_postmeta ) ) $postdata['postmeta'] = $post_postmeta; + + return $postdata; + } + + function _normalize_tag( $matches ) { + return '<' . strtolower( $matches[1] ); + } + + function fopen( $filename, $mode = 'r' ) { + if ( $this->has_gzip ) + return gzopen( $filename, $mode ); + return fopen( $filename, $mode ); + } + + function feof( $fp ) { + if ( $this->has_gzip ) + return gzeof( $fp ); + return feof( $fp ); + } + + function fgets( $fp, $len = 8192 ) { + if ( $this->has_gzip ) + return gzgets( $fp, $len ); + return fgets( $fp, $len ); + } + + function fclose( $fp ) { + if ( $this->has_gzip ) + return gzclose( $fp ); + return fclose( $fp ); + } +} diff --git a/wp-content/plugins/wordpress-importer/readme.txt b/wp-content/plugins/wordpress-importer/readme.txt new file mode 100644 index 0000000..7cf0ab2 --- /dev/null +++ b/wp-content/plugins/wordpress-importer/readme.txt @@ -0,0 +1,107 @@ +=== WordPress Importer === +Contributors: wordpressdotorg +Donate link: +Tags: importer, wordpress +Requires at least: 3.0 +Tested up to: 3.8 +Stable tag: 0.6.1 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file. + +== Description == + +The WordPress Importer will import the following content from a WordPress export file: + +* Posts, pages and other custom post types +* Comments +* Custom fields and post meta +* Categories, tags and terms from custom taxonomies +* Authors + +For further information and instructions please see the [Codex page on Importing Content](http://codex.wordpress.org/Importing_Content#WordPress) + +== Installation == + +The quickest method for installing the importer is: + +1. Visit Tools -> Import in the WordPress dashboard +1. Click on the WordPress link in the list of importers +1. Click "Install Now" +1. Finally click "Activate Plugin & Run Importer" + +If you would prefer to do things manually then follow these instructions: + +1. Upload the `wordpress-importer` folder to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. Go to the Tools -> Import screen, click on WordPress + +== Changelog == + += 0.6 = +* Support for WXR 1.2 and multiple CDATA sections +* Post aren't duplicates if their post_type's are different + += 0.5.2 = +* Double check that the uploaded export file exists before processing it. This prevents incorrect error messages when +an export file is uploaded to a server with bad permissions and WordPress 3.3 or 3.3.1 is being used. + += 0.5 = +* Import comment meta (requires export from WordPress 3.2) +* Minor bugfixes and enhancements + += 0.4 = +* Map comment user_id where possible +* Import attachments from `wp:attachment_url` +* Upload attachments to correct directory +* Remap resized image URLs correctly + += 0.3 = +* Use an XML Parser if possible +* Proper import support for nav menus +* ... and much more, see [Trac ticket #15197](http://core.trac.wordpress.org/ticket/15197) + += 0.1 = +* Initial release + +== Upgrade Notice == + += 0.6 = +Support for exports from WordPress 3.4. + += 0.5.2 = +Fix incorrect error message when the export file could not be uploaded. + += 0.5 = +Import comment meta and other minor bugfixes and enhancements. + += 0.4 = +Bug fixes for attachment importing and other small enhancements. + += 0.3 = +Upgrade for a more robust and reliable experience when importing WordPress export files, and for compatibility with WordPress 3.1. + +== Frequently Asked Questions == + += Help! I'm getting out of memory errors or a blank screen. = +If your exported file is very large, the import script may run into your host's configured memory limit for PHP. + +A message like "Fatal error: Allowed memory size of 8388608 bytes exhausted" indicates that the script can't successfully import your XML file under the current PHP memory limit. If you have access to the php.ini file, you can manually increase the limit; if you do not (your WordPress installation is hosted on a shared server, for instance), you might have to break your exported XML file into several smaller pieces and run the import script one at a time. + +For those with shared hosting, the best alternative may be to consult hosting support to determine the safest approach for running the import. A host may be willing to temporarily lift the memory limit and/or run the process directly from their end. + +-- [WordPress Codex: Importing Content](http://codex.wordpress.org/Importing_Content#Before_Importing) + +== Filters == + +The importer has a couple of filters to allow you to completely enable/block certain features: + +* `import_allow_create_users`: return false if you only want to allow mapping to existing users +* `import_allow_fetch_attachments`: return false if you do not wish to allow importing and downloading of attachments +* `import_attachment_size_limit`: return an integer value for the maximum file size in bytes to save (default is 0, which is unlimited) + +There are also a few actions available to hook into: + +* `import_start`: occurs after the export file has been uploaded and author import settings have been chosen +* `import_end`: called after the last output from the importer diff --git a/wp-content/plugins/wordpress-importer/wordpress-importer.php b/wp-content/plugins/wordpress-importer/wordpress-importer.php new file mode 100644 index 0000000..ab6814c --- /dev/null +++ b/wp-content/plugins/wordpress-importer/wordpress-importer.php @@ -0,0 +1,1132 @@ +header(); + + $step = empty( $_GET['step'] ) ? 0 : (int) $_GET['step']; + switch ( $step ) { + case 0: + $this->greet(); + break; + case 1: + check_admin_referer( 'import-upload' ); + if ( $this->handle_upload() ) + $this->import_options(); + break; + case 2: + check_admin_referer( 'import-wordpress' ); + $this->fetch_attachments = ( ! empty( $_POST['fetch_attachments'] ) && $this->allow_fetch_attachments() ); + $this->id = (int) $_POST['import_id']; + $file = get_attached_file( $this->id ); + set_time_limit(0); + $this->import( $file ); + break; + } + + $this->footer(); + } + + /** + * The main controller for the actual import stage. + * + * @param string $file Path to the WXR file for importing + */ + function import( $file ) { + add_filter( 'import_post_meta_key', array( $this, 'is_valid_meta_key' ) ); + add_filter( 'http_request_timeout', array( &$this, 'bump_request_timeout' ) ); + + $this->import_start( $file ); + + $this->get_author_mapping(); + + wp_suspend_cache_invalidation( true ); + $this->process_categories(); + $this->process_tags(); + $this->process_terms(); + $this->process_posts(); + wp_suspend_cache_invalidation( false ); + + // update incorrect/missing information in the DB + $this->backfill_parents(); + $this->backfill_attachment_urls(); + $this->remap_featured_images(); + + $this->import_end(); + } + + /** + * Parses the WXR file and prepares us for the task of processing parsed data + * + * @param string $file Path to the WXR file for importing + */ + function import_start( $file ) { + if ( ! is_file($file) ) { + echo '

    ' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
    '; + echo __( 'The file does not exist, please try again.', 'wordpress-importer' ) . '

    '; + $this->footer(); + die(); + } + + $import_data = $this->parse( $file ); + + if ( is_wp_error( $import_data ) ) { + echo '

    ' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
    '; + echo esc_html( $import_data->get_error_message() ) . '

    '; + $this->footer(); + die(); + } + + $this->version = $import_data['version']; + $this->get_authors_from_import( $import_data ); + $this->posts = $import_data['posts']; + $this->terms = $import_data['terms']; + $this->categories = $import_data['categories']; + $this->tags = $import_data['tags']; + $this->base_url = esc_url( $import_data['base_url'] ); + + wp_defer_term_counting( true ); + wp_defer_comment_counting( true ); + + do_action( 'import_start' ); + } + + /** + * Performs post-import cleanup of files and the cache + */ + function import_end() { + wp_import_cleanup( $this->id ); + + wp_cache_flush(); + foreach ( get_taxonomies() as $tax ) { + delete_option( "{$tax}_children" ); + _get_term_hierarchy( $tax ); + } + + wp_defer_term_counting( false ); + wp_defer_comment_counting( false ); + + echo '
    '; + echo '

    ' . __( 'Remember to update the passwords and roles of imported users.', 'wordpress-importer' ) . '

    '; + + do_action( 'import_end' ); + } + + /** + * Handles the WXR upload and initial parsing of the file to prepare for + * displaying author import options + * + * @return bool False if error uploading or invalid file, true otherwise + */ + function handle_upload() { + $file = wp_import_handle_upload(); + + if ( isset( $file['error'] ) ) { + echo '

    ' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
    '; + echo esc_html( $file['error'] ) . '

    '; + return false; + } else if ( ! file_exists( $file['file'] ) ) { + echo '

    ' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
    '; + printf( __( 'The export file could not be found at %s. It is likely that this was caused by a permissions problem.', 'wordpress-importer' ), esc_html( $file['file'] ) ); + echo '

    '; + return false; + } + + $this->id = (int) $file['id']; + $import_data = $this->parse( $file['file'] ); + if ( is_wp_error( $import_data ) ) { + echo '

    ' . __( 'Sorry, there has been an error.', 'wordpress-importer' ) . '
    '; + echo esc_html( $import_data->get_error_message() ) . '

    '; + return false; + } + + $this->version = $import_data['version']; + if ( $this->version > $this->max_wxr_version ) { + echo '

    '; + printf( __( 'This WXR file (version %s) may not be supported by this version of the importer. Please consider updating.', 'wordpress-importer' ), esc_html($import_data['version']) ); + echo '

    '; + } + + $this->get_authors_from_import( $import_data ); + + return true; + } + + /** + * Retrieve authors from parsed WXR data + * + * Uses the provided author information from WXR 1.1 files + * or extracts info from each post for WXR 1.0 files + * + * @param array $import_data Data returned by a WXR parser + */ + function get_authors_from_import( $import_data ) { + if ( ! empty( $import_data['authors'] ) ) { + $this->authors = $import_data['authors']; + // no author information, grab it from the posts + } else { + foreach ( $import_data['posts'] as $post ) { + $login = sanitize_user( $post['post_author'], true ); + if ( empty( $login ) ) { + printf( __( 'Failed to import author %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html( $post['post_author'] ) ); + echo '
    '; + continue; + } + + if ( ! isset($this->authors[$login]) ) + $this->authors[$login] = array( + 'author_login' => $login, + 'author_display_name' => $post['post_author'] + ); + } + } + } + + /** + * Display pre-import options, author importing/mapping and option to + * fetch attachments + */ + function import_options() { + $j = 0; +?> +
    + + + +authors ) ) : ?> +

    +

    admins entries.', 'wordpress-importer' ); ?>

    +allow_create_users() ) : ?> +

    + +
      +authors as $author ) : ?> +
    1. author_select( $j++, $author ); ?>
    2. + +
    + + +allow_fetch_attachments() ) : ?> +

    +

    + + +

    + + +

    +
    +' . esc_html( $author['author_display_name'] ); + if ( $this->version != '1.0' ) echo ' (' . esc_html( $author['author_login'] ) . ')'; + echo '

    '; + + if ( $this->version != '1.0' ) + echo '
    '; + + $create_users = $this->allow_create_users(); + if ( $create_users ) { + if ( $this->version != '1.0' ) { + _e( 'or create new user with login name:', 'wordpress-importer' ); + $value = ''; + } else { + _e( 'as a new user:', 'wordpress-importer' ); + $value = esc_attr( sanitize_user( $author['author_login'], true ) ); + } + + echo '
    '; + } + + if ( ! $create_users && $this->version == '1.0' ) + _e( 'assign posts to an existing user:', 'wordpress-importer' ); + else + _e( 'or assign posts to an existing user:', 'wordpress-importer' ); + wp_dropdown_users( array( 'name' => "user_map[$n]", 'multi' => true, 'show_option_all' => __( '- Select -', 'wordpress-importer' ) ) ); + echo ''; + + if ( $this->version != '1.0' ) + echo '
    '; + } + + /** + * Map old author logins to local user IDs based on decisions made + * in import options form. Can map to an existing user, create a new user + * or falls back to the current user in case of error with either of the previous + */ + function get_author_mapping() { + if ( ! isset( $_POST['imported_authors'] ) ) + return; + + $create_users = $this->allow_create_users(); + + foreach ( (array) $_POST['imported_authors'] as $i => $old_login ) { + // Multisite adds strtolower to sanitize_user. Need to sanitize here to stop breakage in process_posts. + $santized_old_login = sanitize_user( $old_login, true ); + $old_id = isset( $this->authors[$old_login]['author_id'] ) ? intval($this->authors[$old_login]['author_id']) : false; + + if ( ! empty( $_POST['user_map'][$i] ) ) { + $user = get_userdata( intval($_POST['user_map'][$i]) ); + if ( isset( $user->ID ) ) { + if ( $old_id ) + $this->processed_authors[$old_id] = $user->ID; + $this->author_mapping[$santized_old_login] = $user->ID; + } + } else if ( $create_users ) { + if ( ! empty($_POST['user_new'][$i]) ) { + $user_id = wp_create_user( $_POST['user_new'][$i], wp_generate_password() ); + } else if ( $this->version != '1.0' ) { + $user_data = array( + 'user_login' => $old_login, + 'user_pass' => wp_generate_password(), + 'user_email' => isset( $this->authors[$old_login]['author_email'] ) ? $this->authors[$old_login]['author_email'] : '', + 'display_name' => $this->authors[$old_login]['author_display_name'], + 'first_name' => isset( $this->authors[$old_login]['author_first_name'] ) ? $this->authors[$old_login]['author_first_name'] : '', + 'last_name' => isset( $this->authors[$old_login]['author_last_name'] ) ? $this->authors[$old_login]['author_last_name'] : '', + ); + $user_id = wp_insert_user( $user_data ); + } + + if ( ! is_wp_error( $user_id ) ) { + if ( $old_id ) + $this->processed_authors[$old_id] = $user_id; + $this->author_mapping[$santized_old_login] = $user_id; + } else { + printf( __( 'Failed to create new user for %s. Their posts will be attributed to the current user.', 'wordpress-importer' ), esc_html($this->authors[$old_login]['author_display_name']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ' ' . $user_id->get_error_message(); + echo '
    '; + } + } + + // failsafe: if the user_id was invalid, default to the current user + if ( ! isset( $this->author_mapping[$santized_old_login] ) ) { + if ( $old_id ) + $this->processed_authors[$old_id] = (int) get_current_user_id(); + $this->author_mapping[$santized_old_login] = (int) get_current_user_id(); + } + } + } + + /** + * Create new categories based on import information + * + * Doesn't create a new category if its slug already exists + */ + function process_categories() { + $this->categories = apply_filters( 'wp_import_categories', $this->categories ); + + if ( empty( $this->categories ) ) + return; + + foreach ( $this->categories as $cat ) { + // if the category already exists leave it alone + $term_id = term_exists( $cat['category_nicename'], 'category' ); + if ( $term_id ) { + if ( is_array($term_id) ) $term_id = $term_id['term_id']; + if ( isset($cat['term_id']) ) + $this->processed_terms[intval($cat['term_id'])] = (int) $term_id; + continue; + } + + $category_parent = empty( $cat['category_parent'] ) ? 0 : category_exists( $cat['category_parent'] ); + $category_description = isset( $cat['category_description'] ) ? $cat['category_description'] : ''; + $catarr = array( + 'category_nicename' => $cat['category_nicename'], + 'category_parent' => $category_parent, + 'cat_name' => $cat['cat_name'], + 'category_description' => $category_description + ); + + $id = wp_insert_category( $catarr ); + if ( ! is_wp_error( $id ) ) { + if ( isset($cat['term_id']) ) + $this->processed_terms[intval($cat['term_id'])] = $id; + } else { + printf( __( 'Failed to import category %s', 'wordpress-importer' ), esc_html($cat['category_nicename']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ': ' . $id->get_error_message(); + echo '
    '; + continue; + } + } + + unset( $this->categories ); + } + + /** + * Create new post tags based on import information + * + * Doesn't create a tag if its slug already exists + */ + function process_tags() { + $this->tags = apply_filters( 'wp_import_tags', $this->tags ); + + if ( empty( $this->tags ) ) + return; + + foreach ( $this->tags as $tag ) { + // if the tag already exists leave it alone + $term_id = term_exists( $tag['tag_slug'], 'post_tag' ); + if ( $term_id ) { + if ( is_array($term_id) ) $term_id = $term_id['term_id']; + if ( isset($tag['term_id']) ) + $this->processed_terms[intval($tag['term_id'])] = (int) $term_id; + continue; + } + + $tag_desc = isset( $tag['tag_description'] ) ? $tag['tag_description'] : ''; + $tagarr = array( 'slug' => $tag['tag_slug'], 'description' => $tag_desc ); + + $id = wp_insert_term( $tag['tag_name'], 'post_tag', $tagarr ); + if ( ! is_wp_error( $id ) ) { + if ( isset($tag['term_id']) ) + $this->processed_terms[intval($tag['term_id'])] = $id['term_id']; + } else { + printf( __( 'Failed to import post tag %s', 'wordpress-importer' ), esc_html($tag['tag_name']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ': ' . $id->get_error_message(); + echo '
    '; + continue; + } + } + + unset( $this->tags ); + } + + /** + * Create new terms based on import information + * + * Doesn't create a term its slug already exists + */ + function process_terms() { + $this->terms = apply_filters( 'wp_import_terms', $this->terms ); + + if ( empty( $this->terms ) ) + return; + + foreach ( $this->terms as $term ) { + // if the term already exists in the correct taxonomy leave it alone + $term_id = term_exists( $term['slug'], $term['term_taxonomy'] ); + if ( $term_id ) { + if ( is_array($term_id) ) $term_id = $term_id['term_id']; + if ( isset($term['term_id']) ) + $this->processed_terms[intval($term['term_id'])] = (int) $term_id; + continue; + } + + if ( empty( $term['term_parent'] ) ) { + $parent = 0; + } else { + $parent = term_exists( $term['term_parent'], $term['term_taxonomy'] ); + if ( is_array( $parent ) ) $parent = $parent['term_id']; + } + $description = isset( $term['term_description'] ) ? $term['term_description'] : ''; + $termarr = array( 'slug' => $term['slug'], 'description' => $description, 'parent' => intval($parent) ); + + $id = wp_insert_term( $term['term_name'], $term['term_taxonomy'], $termarr ); + if ( ! is_wp_error( $id ) ) { + if ( isset($term['term_id']) ) + $this->processed_terms[intval($term['term_id'])] = $id['term_id']; + } else { + printf( __( 'Failed to import %s %s', 'wordpress-importer' ), esc_html($term['term_taxonomy']), esc_html($term['term_name']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ': ' . $id->get_error_message(); + echo '
    '; + continue; + } + } + + unset( $this->terms ); + } + + /** + * Create new posts based on import information + * + * Posts marked as having a parent which doesn't exist will become top level items. + * Doesn't create a new post if: the post type doesn't exist, the given post ID + * is already noted as imported or a post with the same title and date already exists. + * Note that new/updated terms, comments and meta are imported for the last of the above. + */ + function process_posts() { + $this->posts = apply_filters( 'wp_import_posts', $this->posts ); + + foreach ( $this->posts as $post ) { + $post = apply_filters( 'wp_import_post_data_raw', $post ); + + if ( ! post_type_exists( $post['post_type'] ) ) { + printf( __( 'Failed to import “%s”: Invalid post type %s', 'wordpress-importer' ), + esc_html($post['post_title']), esc_html($post['post_type']) ); + echo '
    '; + do_action( 'wp_import_post_exists', $post ); + continue; + } + + if ( isset( $this->processed_posts[$post['post_id']] ) && ! empty( $post['post_id'] ) ) + continue; + + if ( $post['status'] == 'auto-draft' ) + continue; + + if ( 'nav_menu_item' == $post['post_type'] ) { + $this->process_menu_item( $post ); + continue; + } + + $post_type_object = get_post_type_object( $post['post_type'] ); + + $post_exists = post_exists( $post['post_title'], '', $post['post_date'] ); + if ( $post_exists && get_post_type( $post_exists ) == $post['post_type'] ) { + printf( __('%s “%s” already exists.', 'wordpress-importer'), $post_type_object->labels->singular_name, esc_html($post['post_title']) ); + echo '
    '; + $comment_post_ID = $post_id = $post_exists; + } else { + $post_parent = (int) $post['post_parent']; + if ( $post_parent ) { + // if we already know the parent, map it to the new local ID + if ( isset( $this->processed_posts[$post_parent] ) ) { + $post_parent = $this->processed_posts[$post_parent]; + // otherwise record the parent for later + } else { + $this->post_orphans[intval($post['post_id'])] = $post_parent; + $post_parent = 0; + } + } + + // map the post author + $author = sanitize_user( $post['post_author'], true ); + if ( isset( $this->author_mapping[$author] ) ) + $author = $this->author_mapping[$author]; + else + $author = (int) get_current_user_id(); + + $postdata = array( + 'import_id' => $post['post_id'], 'post_author' => $author, 'post_date' => $post['post_date'], + 'post_date_gmt' => $post['post_date_gmt'], 'post_content' => $post['post_content'], + 'post_excerpt' => $post['post_excerpt'], 'post_title' => $post['post_title'], + 'post_status' => $post['status'], 'post_name' => $post['post_name'], + 'comment_status' => $post['comment_status'], 'ping_status' => $post['ping_status'], + 'guid' => $post['guid'], 'post_parent' => $post_parent, 'menu_order' => $post['menu_order'], + 'post_type' => $post['post_type'], 'post_password' => $post['post_password'] + ); + + $original_post_ID = $post['post_id']; + $postdata = apply_filters( 'wp_import_post_data_processed', $postdata, $post ); + + if ( 'attachment' == $postdata['post_type'] ) { + $remote_url = ! empty($post['attachment_url']) ? $post['attachment_url'] : $post['guid']; + + // try to use _wp_attached file for upload folder placement to ensure the same location as the export site + // e.g. location is 2003/05/image.jpg but the attachment post_date is 2010/09, see media_handle_upload() + $postdata['upload_date'] = $post['post_date']; + if ( isset( $post['postmeta'] ) ) { + foreach( $post['postmeta'] as $meta ) { + if ( $meta['key'] == '_wp_attached_file' ) { + if ( preg_match( '%^[0-9]{4}/[0-9]{2}%', $meta['value'], $matches ) ) + $postdata['upload_date'] = $matches[0]; + break; + } + } + } + + $comment_post_ID = $post_id = $this->process_attachment( $postdata, $remote_url ); + } else { + $comment_post_ID = $post_id = wp_insert_post( $postdata, true ); + do_action( 'wp_import_insert_post', $post_id, $original_post_ID, $postdata, $post ); + } + + if ( is_wp_error( $post_id ) ) { + printf( __( 'Failed to import %s “%s”', 'wordpress-importer' ), + $post_type_object->labels->singular_name, esc_html($post['post_title']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ': ' . $post_id->get_error_message(); + echo '
    '; + continue; + } + + if ( $post['is_sticky'] == 1 ) + stick_post( $post_id ); + } + + // map pre-import ID to local ID + $this->processed_posts[intval($post['post_id'])] = (int) $post_id; + + if ( ! isset( $post['terms'] ) ) + $post['terms'] = array(); + + $post['terms'] = apply_filters( 'wp_import_post_terms', $post['terms'], $post_id, $post ); + + // add categories, tags and other terms + if ( ! empty( $post['terms'] ) ) { + $terms_to_set = array(); + foreach ( $post['terms'] as $term ) { + // back compat with WXR 1.0 map 'tag' to 'post_tag' + $taxonomy = ( 'tag' == $term['domain'] ) ? 'post_tag' : $term['domain']; + $term_exists = term_exists( $term['slug'], $taxonomy ); + $term_id = is_array( $term_exists ) ? $term_exists['term_id'] : $term_exists; + if ( ! $term_id ) { + $t = wp_insert_term( $term['name'], $taxonomy, array( 'slug' => $term['slug'] ) ); + if ( ! is_wp_error( $t ) ) { + $term_id = $t['term_id']; + do_action( 'wp_import_insert_term', $t, $term, $post_id, $post ); + } else { + printf( __( 'Failed to import %s %s', 'wordpress-importer' ), esc_html($taxonomy), esc_html($term['name']) ); + if ( defined('IMPORT_DEBUG') && IMPORT_DEBUG ) + echo ': ' . $t->get_error_message(); + echo '
    '; + do_action( 'wp_import_insert_term_failed', $t, $term, $post_id, $post ); + continue; + } + } + $terms_to_set[$taxonomy][] = intval( $term_id ); + } + + foreach ( $terms_to_set as $tax => $ids ) { + $tt_ids = wp_set_post_terms( $post_id, $ids, $tax ); + do_action( 'wp_import_set_post_terms', $tt_ids, $ids, $tax, $post_id, $post ); + } + unset( $post['terms'], $terms_to_set ); + } + + if ( ! isset( $post['comments'] ) ) + $post['comments'] = array(); + + $post['comments'] = apply_filters( 'wp_import_post_comments', $post['comments'], $post_id, $post ); + + // add/update comments + if ( ! empty( $post['comments'] ) ) { + $num_comments = 0; + $inserted_comments = array(); + foreach ( $post['comments'] as $comment ) { + $comment_id = $comment['comment_id']; + $newcomments[$comment_id]['comment_post_ID'] = $comment_post_ID; + $newcomments[$comment_id]['comment_author'] = $comment['comment_author']; + $newcomments[$comment_id]['comment_author_email'] = $comment['comment_author_email']; + $newcomments[$comment_id]['comment_author_IP'] = $comment['comment_author_IP']; + $newcomments[$comment_id]['comment_author_url'] = $comment['comment_author_url']; + $newcomments[$comment_id]['comment_date'] = $comment['comment_date']; + $newcomments[$comment_id]['comment_date_gmt'] = $comment['comment_date_gmt']; + $newcomments[$comment_id]['comment_content'] = $comment['comment_content']; + $newcomments[$comment_id]['comment_approved'] = $comment['comment_approved']; + $newcomments[$comment_id]['comment_type'] = $comment['comment_type']; + $newcomments[$comment_id]['comment_parent'] = $comment['comment_parent']; + $newcomments[$comment_id]['commentmeta'] = isset( $comment['commentmeta'] ) ? $comment['commentmeta'] : array(); + if ( isset( $this->processed_authors[$comment['comment_user_id']] ) ) + $newcomments[$comment_id]['user_id'] = $this->processed_authors[$comment['comment_user_id']]; + } + ksort( $newcomments ); + + foreach ( $newcomments as $key => $comment ) { + // if this is a new post we can skip the comment_exists() check + if ( ! $post_exists || ! comment_exists( $comment['comment_author'], $comment['comment_date'] ) ) { + if ( isset( $inserted_comments[$comment['comment_parent']] ) ) + $comment['comment_parent'] = $inserted_comments[$comment['comment_parent']]; + $comment = wp_filter_comment( $comment ); + $inserted_comments[$key] = wp_insert_comment( $comment ); + do_action( 'wp_import_insert_comment', $inserted_comments[$key], $comment, $comment_post_ID, $post ); + + foreach( $comment['commentmeta'] as $meta ) { + $value = maybe_unserialize( $meta['value'] ); + add_comment_meta( $inserted_comments[$key], $meta['key'], $value ); + } + + $num_comments++; + } + } + unset( $newcomments, $inserted_comments, $post['comments'] ); + } + + if ( ! isset( $post['postmeta'] ) ) + $post['postmeta'] = array(); + + $post['postmeta'] = apply_filters( 'wp_import_post_meta', $post['postmeta'], $post_id, $post ); + + // add/update post meta + if ( ! empty( $post['postmeta'] ) ) { + foreach ( $post['postmeta'] as $meta ) { + $key = apply_filters( 'import_post_meta_key', $meta['key'], $post_id, $post ); + $value = false; + + if ( '_edit_last' == $key ) { + if ( isset( $this->processed_authors[intval($meta['value'])] ) ) + $value = $this->processed_authors[intval($meta['value'])]; + else + $key = false; + } + + if ( $key ) { + // export gets meta straight from the DB so could have a serialized string + if ( ! $value ) + $value = maybe_unserialize( $meta['value'] ); + + add_post_meta( $post_id, $key, $value ); + do_action( 'import_post_meta', $post_id, $key, $value ); + + // if the post has a featured image, take note of this in case of remap + if ( '_thumbnail_id' == $key ) + $this->featured_images[$post_id] = (int) $value; + } + } + } + } + + unset( $this->posts ); + } + + /** + * Attempt to create a new menu item from import data + * + * Fails for draft, orphaned menu items and those without an associated nav_menu + * or an invalid nav_menu term. If the post type or term object which the menu item + * represents doesn't exist then the menu item will not be imported (waits until the + * end of the import to retry again before discarding). + * + * @param array $item Menu item details from WXR file + */ + function process_menu_item( $item ) { + // skip draft, orphaned menu items + if ( 'draft' == $item['status'] ) + return; + + $menu_slug = false; + if ( isset($item['terms']) ) { + // loop through terms, assume first nav_menu term is correct menu + foreach ( $item['terms'] as $term ) { + if ( 'nav_menu' == $term['domain'] ) { + $menu_slug = $term['slug']; + break; + } + } + } + + // no nav_menu term associated with this menu item + if ( ! $menu_slug ) { + _e( 'Menu item skipped due to missing menu slug', 'wordpress-importer' ); + echo '
    '; + return; + } + + $menu_id = term_exists( $menu_slug, 'nav_menu' ); + if ( ! $menu_id ) { + printf( __( 'Menu item skipped due to invalid menu slug: %s', 'wordpress-importer' ), esc_html( $menu_slug ) ); + echo '
    '; + return; + } else { + $menu_id = is_array( $menu_id ) ? $menu_id['term_id'] : $menu_id; + } + + foreach ( $item['postmeta'] as $meta ) + $$meta['key'] = $meta['value']; + + if ( 'taxonomy' == $_menu_item_type && isset( $this->processed_terms[intval($_menu_item_object_id)] ) ) { + $_menu_item_object_id = $this->processed_terms[intval($_menu_item_object_id)]; + } else if ( 'post_type' == $_menu_item_type && isset( $this->processed_posts[intval($_menu_item_object_id)] ) ) { + $_menu_item_object_id = $this->processed_posts[intval($_menu_item_object_id)]; + } else if ( 'custom' != $_menu_item_type ) { + // associated object is missing or not imported yet, we'll retry later + $this->missing_menu_items[] = $item; + return; + } + + if ( isset( $this->processed_menu_items[intval($_menu_item_menu_item_parent)] ) ) { + $_menu_item_menu_item_parent = $this->processed_menu_items[intval($_menu_item_menu_item_parent)]; + } else if ( $_menu_item_menu_item_parent ) { + $this->menu_item_orphans[intval($item['post_id'])] = (int) $_menu_item_menu_item_parent; + $_menu_item_menu_item_parent = 0; + } + + // wp_update_nav_menu_item expects CSS classes as a space separated string + $_menu_item_classes = maybe_unserialize( $_menu_item_classes ); + if ( is_array( $_menu_item_classes ) ) + $_menu_item_classes = implode( ' ', $_menu_item_classes ); + + $args = array( + 'menu-item-object-id' => $_menu_item_object_id, + 'menu-item-object' => $_menu_item_object, + 'menu-item-parent-id' => $_menu_item_menu_item_parent, + 'menu-item-position' => intval( $item['menu_order'] ), + 'menu-item-type' => $_menu_item_type, + 'menu-item-title' => $item['post_title'], + 'menu-item-url' => $_menu_item_url, + 'menu-item-description' => $item['post_content'], + 'menu-item-attr-title' => $item['post_excerpt'], + 'menu-item-target' => $_menu_item_target, + 'menu-item-classes' => $_menu_item_classes, + 'menu-item-xfn' => $_menu_item_xfn, + 'menu-item-status' => $item['status'] + ); + + $id = wp_update_nav_menu_item( $menu_id, 0, $args ); + if ( $id && ! is_wp_error( $id ) ) + $this->processed_menu_items[intval($item['post_id'])] = (int) $id; + } + + /** + * If fetching attachments is enabled then attempt to create a new attachment + * + * @param array $post Attachment post details from WXR + * @param string $url URL to fetch attachment from + * @return int|WP_Error Post ID on success, WP_Error otherwise + */ + function process_attachment( $post, $url ) { + if ( ! $this->fetch_attachments ) + return new WP_Error( 'attachment_processing_error', + __( 'Fetching attachments is not enabled', 'wordpress-importer' ) ); + + // if the URL is absolute, but does not contain address, then upload it assuming base_site_url + if ( preg_match( '|^/[\w\W]+$|', $url ) ) + $url = rtrim( $this->base_url, '/' ) . $url; + + $upload = $this->fetch_remote_file( $url, $post ); + if ( is_wp_error( $upload ) ) + return $upload; + + if ( $info = wp_check_filetype( $upload['file'] ) ) + $post['post_mime_type'] = $info['type']; + else + return new WP_Error( 'attachment_processing_error', __('Invalid file type', 'wordpress-importer') ); + + $post['guid'] = $upload['url']; + + // as per wp-admin/includes/upload.php + $post_id = wp_insert_attachment( $post, $upload['file'] ); + wp_update_attachment_metadata( $post_id, wp_generate_attachment_metadata( $post_id, $upload['file'] ) ); + + // remap resized image URLs, works by stripping the extension and remapping the URL stub. + if ( preg_match( '!^image/!', $info['type'] ) ) { + $parts = pathinfo( $url ); + $name = basename( $parts['basename'], ".{$parts['extension']}" ); // PATHINFO_FILENAME in PHP 5.2 + + $parts_new = pathinfo( $upload['url'] ); + $name_new = basename( $parts_new['basename'], ".{$parts_new['extension']}" ); + + $this->url_remap[$parts['dirname'] . '/' . $name] = $parts_new['dirname'] . '/' . $name_new; + } + + return $post_id; + } + + /** + * Attempt to download a remote file attachment + * + * @param string $url URL of item to fetch + * @param array $post Attachment details + * @return array|WP_Error Local file location details on success, WP_Error otherwise + */ + function fetch_remote_file( $url, $post ) { + // extract the file name and extension from the url + $file_name = basename( $url ); + + // get placeholder file in the upload dir with a unique, sanitized filename + $upload = wp_upload_bits( $file_name, 0, '', $post['upload_date'] ); + if ( $upload['error'] ) + return new WP_Error( 'upload_dir_error', $upload['error'] ); + + // fetch the remote url and write it to the placeholder file + $headers = wp_get_http( $url, $upload['file'] ); + + // request failed + if ( ! $headers ) { + @unlink( $upload['file'] ); + return new WP_Error( 'import_file_error', __('Remote server did not respond', 'wordpress-importer') ); + } + + // make sure the fetch was successful + if ( $headers['response'] != '200' ) { + @unlink( $upload['file'] ); + return new WP_Error( 'import_file_error', sprintf( __('Remote server returned error response %1$d %2$s', 'wordpress-importer'), esc_html($headers['response']), get_status_header_desc($headers['response']) ) ); + } + + $filesize = filesize( $upload['file'] ); + + if ( isset( $headers['content-length'] ) && $filesize != $headers['content-length'] ) { + @unlink( $upload['file'] ); + return new WP_Error( 'import_file_error', __('Remote file is incorrect size', 'wordpress-importer') ); + } + + if ( 0 == $filesize ) { + @unlink( $upload['file'] ); + return new WP_Error( 'import_file_error', __('Zero size file downloaded', 'wordpress-importer') ); + } + + $max_size = (int) $this->max_attachment_size(); + if ( ! empty( $max_size ) && $filesize > $max_size ) { + @unlink( $upload['file'] ); + return new WP_Error( 'import_file_error', sprintf(__('Remote file is too large, limit is %s', 'wordpress-importer'), size_format($max_size) ) ); + } + + // keep track of the old and new urls so we can substitute them later + $this->url_remap[$url] = $upload['url']; + $this->url_remap[$post['guid']] = $upload['url']; // r13735, really needed? + // keep track of the destination if the remote url is redirected somewhere else + if ( isset($headers['x-final-location']) && $headers['x-final-location'] != $url ) + $this->url_remap[$headers['x-final-location']] = $upload['url']; + + return $upload; + } + + /** + * Attempt to associate posts and menu items with previously missing parents + * + * An imported post's parent may not have been imported when it was first created + * so try again. Similarly for child menu items and menu items which were missing + * the object (e.g. post) they represent in the menu + */ + function backfill_parents() { + global $wpdb; + + // find parents for post orphans + foreach ( $this->post_orphans as $child_id => $parent_id ) { + $local_child_id = $local_parent_id = false; + if ( isset( $this->processed_posts[$child_id] ) ) + $local_child_id = $this->processed_posts[$child_id]; + if ( isset( $this->processed_posts[$parent_id] ) ) + $local_parent_id = $this->processed_posts[$parent_id]; + + if ( $local_child_id && $local_parent_id ) + $wpdb->update( $wpdb->posts, array( 'post_parent' => $local_parent_id ), array( 'ID' => $local_child_id ), '%d', '%d' ); + } + + // all other posts/terms are imported, retry menu items with missing associated object + $missing_menu_items = $this->missing_menu_items; + foreach ( $missing_menu_items as $item ) + $this->process_menu_item( $item ); + + // find parents for menu item orphans + foreach ( $this->menu_item_orphans as $child_id => $parent_id ) { + $local_child_id = $local_parent_id = 0; + if ( isset( $this->processed_menu_items[$child_id] ) ) + $local_child_id = $this->processed_menu_items[$child_id]; + if ( isset( $this->processed_menu_items[$parent_id] ) ) + $local_parent_id = $this->processed_menu_items[$parent_id]; + + if ( $local_child_id && $local_parent_id ) + update_post_meta( $local_child_id, '_menu_item_menu_item_parent', (int) $local_parent_id ); + } + } + + /** + * Use stored mapping information to update old attachment URLs + */ + function backfill_attachment_urls() { + global $wpdb; + // make sure we do the longest urls first, in case one is a substring of another + uksort( $this->url_remap, array(&$this, 'cmpr_strlen') ); + + foreach ( $this->url_remap as $from_url => $to_url ) { + // remap urls in post_content + $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->posts} SET post_content = REPLACE(post_content, %s, %s)", $from_url, $to_url) ); + // remap enclosure urls + $result = $wpdb->query( $wpdb->prepare("UPDATE {$wpdb->postmeta} SET meta_value = REPLACE(meta_value, %s, %s) WHERE meta_key='enclosure'", $from_url, $to_url) ); + } + } + + /** + * Update _thumbnail_id meta to new, imported attachment IDs + */ + function remap_featured_images() { + // cycle through posts that have a featured image + foreach ( $this->featured_images as $post_id => $value ) { + if ( isset( $this->processed_posts[$value] ) ) { + $new_id = $this->processed_posts[$value]; + // only update if there's a difference + if ( $new_id != $value ) + update_post_meta( $post_id, '_thumbnail_id', $new_id ); + } + } + } + + /** + * Parse a WXR file + * + * @param string $file Path to WXR file for parsing + * @return array Information gathered from the WXR file + */ + function parse( $file ) { + $parser = new WXR_Parser(); + return $parser->parse( $file ); + } + + // Display import page title + function header() { + echo '
    '; + screen_icon(); + echo '

    ' . __( 'Import WordPress', 'wordpress-importer' ) . '

    '; + + $updates = get_plugin_updates(); + $basename = plugin_basename(__FILE__); + if ( isset( $updates[$basename] ) ) { + $update = $updates[$basename]; + echo '

    '; + printf( __( 'A new version of this importer is available. Please update to version %s to ensure compatibility with newer export files.', 'wordpress-importer' ), $update->update->new_version ); + echo '

    '; + } + } + + // Close div.wrap + function footer() { + echo '
    '; + } + + /** + * Display introductory text and file upload form + */ + function greet() { + echo '
    '; + echo '

    '.__( 'Howdy! Upload your WordPress eXtended RSS (WXR) file and we’ll import the posts, pages, comments, custom fields, categories, and tags into this site.', 'wordpress-importer' ).'

    '; + echo '

    '.__( 'Choose a WXR (.xml) file to upload, then click Upload file and import.', 'wordpress-importer' ).'

    '; + wp_import_upload_form( 'admin.php?import=wordpress&step=1' ); + echo '
    '; + } + + /** + * Decide if the given meta key maps to information we will want to import + * + * @param string $key The meta key to check + * @return string|bool The key if we do want to import, false if not + */ + function is_valid_meta_key( $key ) { + // skip attachment metadata since we'll regenerate it from scratch + // skip _edit_lock as not relevant for import + if ( in_array( $key, array( '_wp_attached_file', '_wp_attachment_metadata', '_edit_lock' ) ) ) + return false; + return $key; + } + + /** + * Decide whether or not the importer is allowed to create users. + * Default is true, can be filtered via import_allow_create_users + * + * @return bool True if creating users is allowed + */ + function allow_create_users() { + return apply_filters( 'import_allow_create_users', true ); + } + + /** + * Decide whether or not the importer should attempt to download attachment files. + * Default is true, can be filtered via import_allow_fetch_attachments. The choice + * made at the import options screen must also be true, false here hides that checkbox. + * + * @return bool True if downloading attachments is allowed + */ + function allow_fetch_attachments() { + return apply_filters( 'import_allow_fetch_attachments', true ); + } + + /** + * Decide what the maximum file size for downloaded attachments is. + * Default is 0 (unlimited), can be filtered via import_attachment_size_limit + * + * @return int Maximum attachment file size to import + */ + function max_attachment_size() { + return apply_filters( 'import_attachment_size_limit', 0 ); + } + + /** + * Added to http_request_timeout filter to force timeout at 60 seconds during import + * @return int 60 + */ + function bump_request_timeout() { + return 60; + } + + // return the difference in length between two strings + function cmpr_strlen( $a, $b ) { + return strlen($b) - strlen($a); + } +} + +} // class_exists( 'WP_Importer' ) + +function wordpress_importer_init() { + load_plugin_textdomain( 'wordpress-importer', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); + + /** + * WordPress Importer object for registering the import callback + * @global WP_Import $wp_import + */ + $GLOBALS['wp_import'] = new WP_Import(); + register_importer( 'wordpress', 'WordPress', __('Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.', 'wordpress-importer'), array( $GLOBALS['wp_import'], 'dispatch' ) ); +} +add_action( 'admin_init', 'wordpress_importer_init' );

    ' . __( 'All done.', 'wordpress-importer' ) . ' ' . __( 'Have fun!', 'wordpress-importer' ) . '' . '