';
echo '
'.__('Import RSS').'
';
}
function footer() {
echo '';
}
function unhtmlentities($string) { // From php.net for < 4.3 compat
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
function greet() {
echo ''.__('Howdy! This importer allows you to extract posts as well as comments from any RSS 2.0 file into your blog. This is useful if you want to import your posts from a system that is not handled by a custom import tool. Pick an RSS file to upload and click Import.
Note that you could also import your comments. Just make sure your comments exist within each "Item" element in the following format:
<comment>
<author>Commenter name</author>
<email>Commenter email</email>
<url>Commenter website</url>
<date>Comment date</date>
<content>Comment text</content>
</comment>
Remember that you may have multiple occurances of comment element within each "Item" element (because a post can have many associated comments). Duplicate comments would automatically be ignored.').'
';
wp_import_upload_form("admin.php?import=rss&step=1");
}
//function get_posts() {
function import_posts_with_comments() {
global $wpdb;
echo('');
set_magic_quotes_runtime(0);
$datalines = file($this->file); // Read the file into an array
$importdata = implode('', $datalines); // squish it
$importdata = str_replace(array ("rn", "r"), "n", $importdata);
preg_match_all('|- (.*?)
|is', $importdata, $this->posts);
$this->posts = $this->posts[1];
$index = 0;
foreach ($this->posts as $post) {
preg_match('|(.*?)|is', $post, $post_title);
$post_title = $wpdb->escape(trim($post_title[1]));
preg_match('|(.*?)|is', $post, $post_date);
if ($post_date) {
$post_date = strtotime($post_date[1]);
} else {
// if we don't already have something from pubDate
preg_match('|(.*?)|is', $post, $post_date);
$post_date = preg_replace('|([-+])([0-9]+):([0-9]+)$|', '123', $post_date[1]);
$post_date = str_replace('T', ' ', $post_date);
$post_date = strtotime($post_date);
}
$post_date = gmdate('Y-m-d H:i:s', $post_date);
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
if (!$categories) {
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
}
$cat_index = 0;
foreach ($categories as $category) {
$categories[$cat_index] = $wpdb->escape($this->unhtmlentities($category));
$cat_index++;
}
preg_match('|(.*?)|is', $post, $guid);
if ($guid)
$guid = $wpdb->escape(trim($guid[1]));
else
$guid = '';
preg_match('|(.*?)|is', $post, $post_content);
$post_content = str_replace(array (''), '', $wpdb->escape(trim($post_content[1])));
if (!$post_content) {
// This is for feeds that put content in description
preg_match('|(.*?)|is', $post, $post_content);
$post_content = $wpdb->escape($this->unhtmlentities(trim($post_content[1])));
}
// Clean up content
$post_content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $post_content);
$post_content = str_replace('
', '
', $post_content);
$post_content = str_replace('
', '
', $post_content);
$post_author = 1;
$post_status = 'publish';
//$this->posts[$index] = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status', 'guid', 'categories');
$postData = compact('post_author', 'post_date', 'post_content', 'post_title', 'post_status', 'guid', 'categories');
if ($post_id = post_exists($post_title, $post_content, $post_date)) {
_e('- Post "'.$post_title.'" already imported');
}
else {
$post_id = wp_insert_post($postData);
echo("
- Imported post:".$post_title);
//categories
if (0 != count($categories)){
wp_create_categories($categories, $post_id);
}
//comments start
preg_match_all('|(.*?)|is', $post, $this->comments);
$this->comments = $this->comments[1];
foreach ($this->comments as $comment) {
$comment_post_ID = $post_id;
$comment_approved = 1;
preg_match('|(.*?)|is', $comment, $comment_author);
$comment_author = $wpdb->escape(trim($comment_author[1]));
preg_match('|(.*?)|is', $comment, $comment_author_email);
$comment_author_email = $wpdb->escape(trim($comment_author_email[1]));
preg_match('|(.*?)|is', $comment, $comment_author_url);
$comment_author_url = $wpdb->escape(trim($comment_author_url[1]));
preg_match('|(.*?)|is', $comment, $comment_date);
$comment_date = trim($comment_date[1]);
if ($comment_date) {
$comment_date = strtotime($comment_date);
}
$comment_date = gmdate('Y-m-d H:i:s', $comment_date);
preg_match('|(.*?)|is', $comment, $comment_content);
$comment_content = $wpdb->escape(trim($comment_content[1]));
// Check if it's already there
if (!comment_exists($comment_author, $comment_date)) {
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved');
$commentdata = wp_filter_comment($commentdata);
wp_insert_comment($commentdata);
echo("
- Imported comment by '.$comment_author.' dated:".$comment_date);
}
else
echo('
- Duplicate comment by '.$comment_author.' dated:'.$comment_date.' omitted.');
}
//comments end
}
$index++;
}
echo('
');
}
function import() {
$file = wp_import_handle_upload();
if ( isset($file['error']) ) {
echo $file['error'];
return;
}
$this->file = $file['file'];
$this->import_posts_with_comments();
wp_import_cleanup($file['id']);
echo '';
printf(__('All done. Have fun!'), get_option('home'));
echo '
';
}
function dispatch() {
if (empty ($_GET['step']))
$step = 0;
else
$step = (int) $_GET['step'];
$this->header();
switch ($step) {
case 0 :
$this->greet();
break;
case 1 :
$this->import();
break;
}
$this->footer();
}
function RSS_Import() {
// Nothing.
}
}
$rss_import = new RSS_Import();
register_importer('rss', 'RSS', __('Import posts from an RSS feed'), array ($rss_import, 'dispatch'));