web/wp-admin/import/textpattern.php
branchwordpress
changeset 109 03b0d1493584
child 132 4d4862461b8d
equal deleted inserted replaced
-1:000000000000 109:03b0d1493584
       
     1 <?php
       
     2 /**
       
     3  * TextPattern Importer
       
     4  *
       
     5  * @package WordPress
       
     6  * @subpackage Importer
       
     7  */
       
     8 
       
     9 if(!function_exists('get_comment_count'))
       
    10 {
       
    11 	/**
       
    12 	 * Get the comment count for posts.
       
    13 	 *
       
    14 	 * @package WordPress
       
    15 	 * @subpackage Textpattern_Import
       
    16 	 *
       
    17 	 * @param int $post_ID Post ID
       
    18 	 * @return int
       
    19 	 */
       
    20 	function get_comment_count($post_ID)
       
    21 	{
       
    22 		global $wpdb;
       
    23 		return $wpdb->get_var( $wpdb->prepare("SELECT count(*) FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) );
       
    24 	}
       
    25 }
       
    26 
       
    27 if(!function_exists('link_exists'))
       
    28 {
       
    29 	/**
       
    30 	 * Check whether link already exists.
       
    31 	 *
       
    32 	 * @package WordPress
       
    33 	 * @subpackage Textpattern_Import
       
    34 	 *
       
    35 	 * @param string $linkname
       
    36 	 * @return int
       
    37 	 */
       
    38 	function link_exists($linkname)
       
    39 	{
       
    40 		global $wpdb;
       
    41 		return $wpdb->get_var( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_name = %s", $linkname) );
       
    42 	}
       
    43 }
       
    44 
       
    45 /**
       
    46  * TextPattern Importer Class
       
    47  *
       
    48  * @since unknown
       
    49  */
       
    50 class Textpattern_Import {
       
    51 
       
    52 	function header()
       
    53 	{
       
    54 		echo '<div class="wrap">';
       
    55 		screen_icon();
       
    56 		echo '<h2>'.__('Import Textpattern').'</h2>';
       
    57 		echo '<p>'.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'</p>';
       
    58 	}
       
    59 
       
    60 	function footer()
       
    61 	{
       
    62 		echo '</div>';
       
    63 	}
       
    64 
       
    65 	function greet() {
       
    66 		echo '<div class="narrow">';
       
    67 		echo '<p>'.__('Howdy! This imports categories, users, posts, comments, and links from any Textpattern 4.0.2+ into this blog.').'</p>';
       
    68 		echo '<p>'.__('This has not been tested on previous versions of Textpattern.  Mileage may vary.').'</p>';
       
    69 		echo '<p>'.__('Your Textpattern Configuration settings are as follows:').'</p>';
       
    70 		echo '<form action="admin.php?import=textpattern&amp;step=1" method="post">';
       
    71 		wp_nonce_field('import-textpattern');
       
    72 		$this->db_form();
       
    73 		echo '<p class="submit"><input type="submit" name="submit" class="button" value="'.esc_attr__('Import').'" /></p>';
       
    74 		echo '</form>';
       
    75 		echo '</div>';
       
    76 	}
       
    77 
       
    78 	function get_txp_cats()
       
    79 	{
       
    80 		global $wpdb;
       
    81 		// General Housekeeping
       
    82 		$txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost'));
       
    83 		set_magic_quotes_runtime(0);
       
    84 		$prefix = get_option('tpre');
       
    85 
       
    86 		// Get Categories
       
    87 		return $txpdb->get_results('SELECT
       
    88 			id,
       
    89 			name,
       
    90 			title
       
    91 			FROM '.$prefix.'txp_category
       
    92 			WHERE type = "article"',
       
    93 			ARRAY_A);
       
    94 	}
       
    95 
       
    96 	function get_txp_users()
       
    97 	{
       
    98 		global $wpdb;
       
    99 		// General Housekeeping
       
   100 		$txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost'));
       
   101 		set_magic_quotes_runtime(0);
       
   102 		$prefix = get_option('tpre');
       
   103 
       
   104 		// Get Users
       
   105 
       
   106 		return $txpdb->get_results('SELECT
       
   107 			user_id,
       
   108 			name,
       
   109 			RealName,
       
   110 			email,
       
   111 			privs
       
   112 			FROM '.$prefix.'txp_users', ARRAY_A);
       
   113 	}
       
   114 
       
   115 	function get_txp_posts()
       
   116 	{
       
   117 		// General Housekeeping
       
   118 		$txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost'));
       
   119 		set_magic_quotes_runtime(0);
       
   120 		$prefix = get_option('tpre');
       
   121 
       
   122 		// Get Posts
       
   123 		return $txpdb->get_results('SELECT
       
   124 			ID,
       
   125 			Posted,
       
   126 			AuthorID,
       
   127 			LastMod,
       
   128 			Title,
       
   129 			Body,
       
   130 			Excerpt,
       
   131 			Category1,
       
   132 			Category2,
       
   133 			Status,
       
   134 			Keywords,
       
   135 			url_title,
       
   136 			comments_count
       
   137 			FROM '.$prefix.'textpattern
       
   138 			', ARRAY_A);
       
   139 	}
       
   140 
       
   141 	function get_txp_comments()
       
   142 	{
       
   143 		global $wpdb;
       
   144 		// General Housekeeping
       
   145 		$txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost'));
       
   146 		set_magic_quotes_runtime(0);
       
   147 		$prefix = get_option('tpre');
       
   148 
       
   149 		// Get Comments
       
   150 		return $txpdb->get_results('SELECT * FROM '.$prefix.'txp_discuss', ARRAY_A);
       
   151 	}
       
   152 
       
   153 		function get_txp_links()
       
   154 	{
       
   155 		//General Housekeeping
       
   156 		$txpdb = new wpdb(get_option('txpuser'), get_option('txppass'), get_option('txpname'), get_option('txphost'));
       
   157 		set_magic_quotes_runtime(0);
       
   158 		$prefix = get_option('tpre');
       
   159 
       
   160 		return $txpdb->get_results('SELECT
       
   161 			id,
       
   162 			date,
       
   163 			category,
       
   164 			url,
       
   165 			linkname,
       
   166 			description
       
   167 			FROM '.$prefix.'txp_link',
       
   168 			ARRAY_A);
       
   169 	}
       
   170 
       
   171 	function cat2wp($categories='')
       
   172 	{
       
   173 		// General Housekeeping
       
   174 		global $wpdb;
       
   175 		$count = 0;
       
   176 		$txpcat2wpcat = array();
       
   177 		// Do the Magic
       
   178 		if(is_array($categories))
       
   179 		{
       
   180 			echo '<p>'.__('Importing Categories...').'<br /><br /></p>';
       
   181 			foreach ($categories as $category)
       
   182 			{
       
   183 				$count++;
       
   184 				extract($category);
       
   185 
       
   186 
       
   187 				// Make Nice Variables
       
   188 				$name = $wpdb->escape($name);
       
   189 				$title = $wpdb->escape($title);
       
   190 
       
   191 				if($cinfo = category_exists($name))
       
   192 				{
       
   193 					$ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title));
       
   194 				}
       
   195 				else
       
   196 				{
       
   197 					$ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title));
       
   198 				}
       
   199 				$txpcat2wpcat[$id] = $ret_id;
       
   200 			}
       
   201 
       
   202 			// Store category translation for future use
       
   203 			add_option('txpcat2wpcat',$txpcat2wpcat);
       
   204 			echo '<p>'.sprintf(_n('Done! <strong>%1$s</strong> category imported.', 'Done! <strong>%1$s</strong> categories imported.', $count), $count).'<br /><br /></p>';
       
   205 			return true;
       
   206 		}
       
   207 		echo __('No Categories to Import!');
       
   208 		return false;
       
   209 	}
       
   210 
       
   211 	function users2wp($users='')
       
   212 	{
       
   213 		// General Housekeeping
       
   214 		global $wpdb;
       
   215 		$count = 0;
       
   216 		$txpid2wpid = array();
       
   217 
       
   218 		// Midnight Mojo
       
   219 		if(is_array($users))
       
   220 		{
       
   221 			echo '<p>'.__('Importing Users...').'<br /><br /></p>';
       
   222 			foreach($users as $user)
       
   223 			{
       
   224 				$count++;
       
   225 				extract($user);
       
   226 
       
   227 				// Make Nice Variables
       
   228 				$name = $wpdb->escape($name);
       
   229 				$RealName = $wpdb->escape($RealName);
       
   230 
       
   231 				if($uinfo = get_userdatabylogin($name))
       
   232 				{
       
   233 
       
   234 					$ret_id = wp_insert_user(array(
       
   235 								'ID'			=> $uinfo->ID,
       
   236 								'user_login'	=> $name,
       
   237 								'user_nicename'	=> $RealName,
       
   238 								'user_email'	=> $email,
       
   239 								'user_url'		=> 'http://',
       
   240 								'display_name'	=> $name)
       
   241 								);
       
   242 				}
       
   243 				else
       
   244 				{
       
   245 					$ret_id = wp_insert_user(array(
       
   246 								'user_login'	=> $name,
       
   247 								'user_nicename'	=> $RealName,
       
   248 								'user_email'	=> $email,
       
   249 								'user_url'		=> 'http://',
       
   250 								'display_name'	=> $name)
       
   251 								);
       
   252 				}
       
   253 				$txpid2wpid[$user_id] = $ret_id;
       
   254 
       
   255 				// Set Textpattern-to-WordPress permissions translation
       
   256 				$transperms = array(1 => '10', 2 => '9', 3 => '5', 4 => '4', 5 => '3', 6 => '2', 7 => '0');
       
   257 
       
   258 				// Update Usermeta Data
       
   259 				$user = new WP_User($ret_id);
       
   260 				if('10' == $transperms[$privs]) { $user->set_role('administrator'); }
       
   261 				if('9'  == $transperms[$privs]) { $user->set_role('editor'); }
       
   262 				if('5'  == $transperms[$privs]) { $user->set_role('editor'); }
       
   263 				if('4'  == $transperms[$privs]) { $user->set_role('author'); }
       
   264 				if('3'  == $transperms[$privs]) { $user->set_role('contributor'); }
       
   265 				if('2'  == $transperms[$privs]) { $user->set_role('contributor'); }
       
   266 				if('0'  == $transperms[$privs]) { $user->set_role('subscriber'); }
       
   267 
       
   268 				update_usermeta( $ret_id, 'wp_user_level', $transperms[$privs] );
       
   269 				update_usermeta( $ret_id, 'rich_editing', 'false');
       
   270 			}// End foreach($users as $user)
       
   271 
       
   272 			// Store id translation array for future use
       
   273 			add_option('txpid2wpid',$txpid2wpid);
       
   274 
       
   275 
       
   276 			echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> users imported.'), $count).'<br /><br /></p>';
       
   277 			return true;
       
   278 		}// End if(is_array($users)
       
   279 
       
   280 		echo __('No Users to Import!');
       
   281 		return false;
       
   282 
       
   283 	}// End function user2wp()
       
   284 
       
   285 	function posts2wp($posts='')
       
   286 	{
       
   287 		// General Housekeeping
       
   288 		global $wpdb;
       
   289 		$count = 0;
       
   290 		$txpposts2wpposts = array();
       
   291 		$cats = array();
       
   292 
       
   293 		// Do the Magic
       
   294 		if(is_array($posts))
       
   295 		{
       
   296 			echo '<p>'.__('Importing Posts...').'<br /><br /></p>';
       
   297 			foreach($posts as $post)
       
   298 			{
       
   299 				$count++;
       
   300 				extract($post);
       
   301 
       
   302 				// Set Textpattern-to-WordPress status translation
       
   303 				$stattrans = array(1 => 'draft', 2 => 'private', 3 => 'draft', 4 => 'publish', 5 => 'publish');
       
   304 
       
   305 				//Can we do this more efficiently?
       
   306 				$uinfo = ( get_userdatabylogin( $AuthorID ) ) ? get_userdatabylogin( $AuthorID ) : 1;
       
   307 				$authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ;
       
   308 
       
   309 				$Title = $wpdb->escape($Title);
       
   310 				$Body = $wpdb->escape($Body);
       
   311 				$Excerpt = $wpdb->escape($Excerpt);
       
   312 				$post_status = $stattrans[$Status];
       
   313 
       
   314 				// Import Post data into WordPress
       
   315 
       
   316 				if($pinfo = post_exists($Title,$Body))
       
   317 				{
       
   318 					$ret_id = wp_insert_post(array(
       
   319 						'ID'				=> $pinfo,
       
   320 						'post_date'			=> $Posted,
       
   321 						'post_date_gmt'		=> $post_date_gmt,
       
   322 						'post_author'		=> $authorid,
       
   323 						'post_modified'		=> $LastMod,
       
   324 						'post_modified_gmt' => $post_modified_gmt,
       
   325 						'post_title'		=> $Title,
       
   326 						'post_content'		=> $Body,
       
   327 						'post_excerpt'		=> $Excerpt,
       
   328 						'post_status'		=> $post_status,
       
   329 						'post_name'			=> $url_title,
       
   330 						'comment_count'		=> $comments_count)
       
   331 						);
       
   332 					if ( is_wp_error( $ret_id ) )
       
   333 						return $ret_id;
       
   334 				}
       
   335 				else
       
   336 				{
       
   337 					$ret_id = wp_insert_post(array(
       
   338 						'post_date'			=> $Posted,
       
   339 						'post_date_gmt'		=> $post_date_gmt,
       
   340 						'post_author'		=> $authorid,
       
   341 						'post_modified'		=> $LastMod,
       
   342 						'post_modified_gmt' => $post_modified_gmt,
       
   343 						'post_title'		=> $Title,
       
   344 						'post_content'		=> $Body,
       
   345 						'post_excerpt'		=> $Excerpt,
       
   346 						'post_status'		=> $post_status,
       
   347 						'post_name'			=> $url_title,
       
   348 						'comment_count'		=> $comments_count)
       
   349 						);
       
   350 					if ( is_wp_error( $ret_id ) )
       
   351 						return $ret_id;
       
   352 				}
       
   353 				$txpposts2wpposts[$ID] = $ret_id;
       
   354 
       
   355 				// Make Post-to-Category associations
       
   356 				$cats = array();
       
   357 				$category1 = get_category_by_slug($Category1);
       
   358 				$category1 = $category1->term_id;
       
   359 				$category2 = get_category_by_slug($Category2);
       
   360 				$category2 = $category2->term_id;
       
   361 				if($cat1 = $category1) { $cats[1] = $cat1; }
       
   362 				if($cat2 = $category2) { $cats[2] = $cat2; }
       
   363 
       
   364 				if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); }
       
   365 			}
       
   366 		}
       
   367 		// Store ID translation for later use
       
   368 		add_option('txpposts2wpposts',$txpposts2wpposts);
       
   369 
       
   370 		echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> posts imported.'), $count).'<br /><br /></p>';
       
   371 		return true;
       
   372 	}
       
   373 
       
   374 	function comments2wp($comments='')
       
   375 	{
       
   376 		// General Housekeeping
       
   377 		global $wpdb;
       
   378 		$count = 0;
       
   379 		$txpcm2wpcm = array();
       
   380 		$postarr = get_option('txpposts2wpposts');
       
   381 
       
   382 		// Magic Mojo
       
   383 		if(is_array($comments))
       
   384 		{
       
   385 			echo '<p>'.__('Importing Comments...').'<br /><br /></p>';
       
   386 			foreach($comments as $comment)
       
   387 			{
       
   388 				$count++;
       
   389 				extract($comment);
       
   390 
       
   391 				// WordPressify Data
       
   392 				$comment_ID = ltrim($discussid, '0');
       
   393 				$comment_post_ID = $postarr[$parentid];
       
   394 				$comment_approved = (1 == $visible) ? 1 : 0;
       
   395 				$name = $wpdb->escape($name);
       
   396 				$email = $wpdb->escape($email);
       
   397 				$web = $wpdb->escape($web);
       
   398 				$message = $wpdb->escape($message);
       
   399 
       
   400 				if($cinfo = comment_exists($name, $posted))
       
   401 				{
       
   402 					// Update comments
       
   403 					$ret_id = wp_update_comment(array(
       
   404 						'comment_ID'			=> $cinfo,
       
   405 						'comment_post_ID'		=> $comment_post_ID,
       
   406 						'comment_author'		=> $name,
       
   407 						'comment_author_email'	=> $email,
       
   408 						'comment_author_url'	=> $web,
       
   409 						'comment_date'			=> $posted,
       
   410 						'comment_content'		=> $message,
       
   411 						'comment_approved'		=> $comment_approved)
       
   412 						);
       
   413 				}
       
   414 				else
       
   415 				{
       
   416 					// Insert comments
       
   417 					$ret_id = wp_insert_comment(array(
       
   418 						'comment_post_ID'		=> $comment_post_ID,
       
   419 						'comment_author'		=> $name,
       
   420 						'comment_author_email'	=> $email,
       
   421 						'comment_author_url'	=> $web,
       
   422 						'comment_author_IP'		=> $ip,
       
   423 						'comment_date'			=> $posted,
       
   424 						'comment_content'		=> $message,
       
   425 						'comment_approved'		=> $comment_approved)
       
   426 						);
       
   427 				}
       
   428 				$txpcm2wpcm[$comment_ID] = $ret_id;
       
   429 			}
       
   430 			// Store Comment ID translation for future use
       
   431 			add_option('txpcm2wpcm', $txpcm2wpcm);
       
   432 
       
   433 			// Associate newly formed categories with posts
       
   434 			get_comment_count($ret_id);
       
   435 
       
   436 
       
   437 			echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> comments imported.'), $count).'<br /><br /></p>';
       
   438 			return true;
       
   439 		}
       
   440 		echo __('No Comments to Import!');
       
   441 		return false;
       
   442 	}
       
   443 
       
   444 	function links2wp($links='')
       
   445 	{
       
   446 		// General Housekeeping
       
   447 		global $wpdb;
       
   448 		$count = 0;
       
   449 
       
   450 		// Deal with the links
       
   451 		if(is_array($links))
       
   452 		{
       
   453 			echo '<p>'.__('Importing Links...').'<br /><br /></p>';
       
   454 			foreach($links as $link)
       
   455 			{
       
   456 				$count++;
       
   457 				extract($link);
       
   458 
       
   459 				// Make nice vars
       
   460 				$category = $wpdb->escape($category);
       
   461 				$linkname = $wpdb->escape($linkname);
       
   462 				$description = $wpdb->escape($description);
       
   463 
       
   464 				if($linfo = link_exists($linkname))
       
   465 				{
       
   466 					$ret_id = wp_insert_link(array(
       
   467 								'link_id'			=> $linfo,
       
   468 								'link_url'			=> $url,
       
   469 								'link_name'			=> $linkname,
       
   470 								'link_category'		=> $category,
       
   471 								'link_description'	=> $description,
       
   472 								'link_updated'		=> $date)
       
   473 								);
       
   474 				}
       
   475 				else
       
   476 				{
       
   477 					$ret_id = wp_insert_link(array(
       
   478 								'link_url'			=> $url,
       
   479 								'link_name'			=> $linkname,
       
   480 								'link_category'		=> $category,
       
   481 								'link_description'	=> $description,
       
   482 								'link_updated'		=> $date)
       
   483 								);
       
   484 				}
       
   485 				$txplinks2wplinks[$link_id] = $ret_id;
       
   486 			}
       
   487 			add_option('txplinks2wplinks',$txplinks2wplinks);
       
   488 			echo '<p>';
       
   489 			printf(_n('Done! <strong>%s</strong> link imported', 'Done! <strong>%s</strong> links imported', $count), $count);
       
   490 			echo '<br /><br /></p>';
       
   491 			return true;
       
   492 		}
       
   493 		echo __('No Links to Import!');
       
   494 		return false;
       
   495 	}
       
   496 
       
   497 	function import_categories()
       
   498 	{
       
   499 		// Category Import
       
   500 		$cats = $this->get_txp_cats();
       
   501 		$this->cat2wp($cats);
       
   502 		add_option('txp_cats', $cats);
       
   503 
       
   504 
       
   505 
       
   506 		echo '<form action="admin.php?import=textpattern&amp;step=2" method="post">';
       
   507 		wp_nonce_field('import-textpattern');
       
   508 		printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Users'));
       
   509 		echo '</form>';
       
   510 
       
   511 	}
       
   512 
       
   513 	function import_users()
       
   514 	{
       
   515 		// User Import
       
   516 		$users = $this->get_txp_users();
       
   517 		$this->users2wp($users);
       
   518 
       
   519 		echo '<form action="admin.php?import=textpattern&amp;step=3" method="post">';
       
   520 		wp_nonce_field('import-textpattern');
       
   521 		printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Posts'));
       
   522 		echo '</form>';
       
   523 	}
       
   524 
       
   525 	function import_posts()
       
   526 	{
       
   527 		// Post Import
       
   528 		$posts = $this->get_txp_posts();
       
   529 		$result = $this->posts2wp($posts);
       
   530 		if ( is_wp_error( $result ) )
       
   531 			return $result;
       
   532 
       
   533 		echo '<form action="admin.php?import=textpattern&amp;step=4" method="post">';
       
   534 		wp_nonce_field('import-textpattern');
       
   535 		printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Comments'));
       
   536 		echo '</form>';
       
   537 	}
       
   538 
       
   539 	function import_comments()
       
   540 	{
       
   541 		// Comment Import
       
   542 		$comments = $this->get_txp_comments();
       
   543 		$this->comments2wp($comments);
       
   544 
       
   545 		echo '<form action="admin.php?import=textpattern&amp;step=5" method="post">';
       
   546 		wp_nonce_field('import-textpattern');
       
   547 		printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Links'));
       
   548 		echo '</form>';
       
   549 	}
       
   550 
       
   551 	function import_links()
       
   552 	{
       
   553 		//Link Import
       
   554 		$links = $this->get_txp_links();
       
   555 		$this->links2wp($links);
       
   556 		add_option('txp_links', $links);
       
   557 
       
   558 		echo '<form action="admin.php?import=textpattern&amp;step=6" method="post">';
       
   559 		wp_nonce_field('import-textpattern');
       
   560 		printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Finish'));
       
   561 		echo '</form>';
       
   562 	}
       
   563 
       
   564 	function cleanup_txpimport()
       
   565 	{
       
   566 		delete_option('tpre');
       
   567 		delete_option('txp_cats');
       
   568 		delete_option('txpid2wpid');
       
   569 		delete_option('txpcat2wpcat');
       
   570 		delete_option('txpposts2wpposts');
       
   571 		delete_option('txpcm2wpcm');
       
   572 		delete_option('txplinks2wplinks');
       
   573 		delete_option('txpuser');
       
   574 		delete_option('txppass');
       
   575 		delete_option('txpname');
       
   576 		delete_option('txphost');
       
   577 		do_action('import_done', 'textpattern');
       
   578 		$this->tips();
       
   579 	}
       
   580 
       
   581 	function tips()
       
   582 	{
       
   583 		echo '<p>'.__('Welcome to WordPress.  We hope (and expect!) that you will find this platform incredibly rewarding!  As a new WordPress user coming from Textpattern, there are some things that we would like to point out.  Hopefully, they will help your transition go as smoothly as possible.').'</p>';
       
   584 		echo '<h3>'.__('Users').'</h3>';
       
   585 		echo '<p>'.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password.  Forget it.  You didn&#8217;t have that login in Textpattern, why should you have it here?  Instead we have taken care to import all of your users into our system.  Unfortunately there is one downside.  Because both WordPress and Textpattern uses a strong encryption hash with passwords, it is impossible to decrypt it and we are forced to assign temporary passwords to all your users.  <strong>Every user has the same username, but their passwords are reset to password123.</strong>  So <a href="%1$s">Login</a> and change it.'), get_bloginfo( 'wpurl' ) . '/wp-login.php').'</p>';
       
   586 		echo '<h3>'.__('Preserving Authors').'</h3>';
       
   587 		echo '<p>'.__('Secondly, we have attempted to preserve post authors.  If you are the only author or contributor to your blog, then you are safe.  In most cases, we are successful in this preservation endeavor.  However, if we cannot ascertain the name of the writer due to discrepancies between database tables, we assign it to you, the administrative user.').'</p>';
       
   588 		echo '<h3>'.__('Textile').'</h3>';
       
   589 		echo '<p>'.__('Also, since you&#8217;re coming from Textpattern, you probably have been using Textile to format your comments and posts.  If this is the case, we recommend downloading and installing <a href="http://www.huddledmasses.org/category/development/wordpress/textile/">Textile for WordPress</a>.  Trust me... You&#8217;ll want it.').'</p>';
       
   590 		echo '<h3>'.__('WordPress Resources').'</h3>';
       
   591 		echo '<p>'.__('Finally, there are numerous WordPress resources around the internet.  Some of them are:').'</p>';
       
   592 		echo '<ul>';
       
   593 		echo '<li>'.__('<a href="http://www.wordpress.org">The official WordPress site</a>').'</li>';
       
   594 		echo '<li>'.__('<a href="http://wordpress.org/support/">The WordPress support forums</a>').'</li>';
       
   595 		echo '<li>'.__('<a href="http://codex.wordpress.org">The Codex (In other words, the WordPress Bible)</a>').'</li>';
       
   596 		echo '</ul>';
       
   597 		echo '<p>'.sprintf(__('That&#8217;s it! What are you waiting for? Go <a href="%1$s">login</a>!'), get_bloginfo( 'wpurl' ) . '/wp-login.php').'</p>';
       
   598 	}
       
   599 
       
   600 	function db_form()
       
   601 	{
       
   602 		echo '<table class="form-table">';
       
   603 		printf('<tr><th scope="row"><label for="dbuser">%s</label></th><td><input type="text" name="dbuser" id="dbuser" /></td></tr>', __('Textpattern Database User:'));
       
   604 		printf('<tr><th scope="row"><label for="dbpass">%s</label></th><td><input type="password" name="dbpass" id="dbpass" /></td></tr>', __('Textpattern Database Password:'));
       
   605 		printf('<tr><th scope="row"><label for="dbname">%s</label></th><td><input type="text" id="dbname" name="dbname" /></td></tr>', __('Textpattern Database Name:'));
       
   606 		printf('<tr><th scope="row"><label for="dbhost">%s</label></th><td><input type="text" id="dbhost" name="dbhost" value="localhost" /></td></tr>', __('Textpattern Database Host:'));
       
   607 		printf('<tr><th scope="row"><label for="dbprefix">%s</label></th><td><input type="text" name="dbprefix" id="dbprefix"  /></td></tr>', __('Textpattern Table prefix (if any):'));
       
   608 		echo '</table>';
       
   609 	}
       
   610 
       
   611 	function dispatch()
       
   612 	{
       
   613 
       
   614 		if (empty ($_GET['step']))
       
   615 			$step = 0;
       
   616 		else
       
   617 			$step = (int) $_GET['step'];
       
   618 		$this->header();
       
   619 
       
   620 		if ( $step > 0 )
       
   621 		{
       
   622 			check_admin_referer('import-textpattern');
       
   623 
       
   624 			if($_POST['dbuser'])
       
   625 			{
       
   626 				if(get_option('txpuser'))
       
   627 					delete_option('txpuser');
       
   628 				add_option('txpuser', sanitize_user($_POST['dbuser'], true));
       
   629 			}
       
   630 			if($_POST['dbpass'])
       
   631 			{
       
   632 				if(get_option('txppass'))
       
   633 					delete_option('txppass');
       
   634 				add_option('txppass',  sanitize_user($_POST['dbpass'], true));
       
   635 			}
       
   636 
       
   637 			if($_POST['dbname'])
       
   638 			{
       
   639 				if(get_option('txpname'))
       
   640 					delete_option('txpname');
       
   641 				add_option('txpname',  sanitize_user($_POST['dbname'], true));
       
   642 			}
       
   643 			if($_POST['dbhost'])
       
   644 			{
       
   645 				if(get_option('txphost'))
       
   646 					delete_option('txphost');
       
   647 				add_option('txphost',  sanitize_user($_POST['dbhost'], true));
       
   648 			}
       
   649 			if($_POST['dbprefix'])
       
   650 			{
       
   651 				if(get_option('tpre'))
       
   652 					delete_option('tpre');
       
   653 				add_option('tpre',  sanitize_user($_POST['dbprefix']));
       
   654 			}
       
   655 
       
   656 
       
   657 		}
       
   658 
       
   659 		switch ($step)
       
   660 		{
       
   661 			default:
       
   662 			case 0 :
       
   663 				$this->greet();
       
   664 				break;
       
   665 			case 1 :
       
   666 				$this->import_categories();
       
   667 				break;
       
   668 			case 2 :
       
   669 				$this->import_users();
       
   670 				break;
       
   671 			case 3 :
       
   672 				$result = $this->import_posts();
       
   673 				if ( is_wp_error( $result ) )
       
   674 					echo $result->get_error_message();
       
   675 				break;
       
   676 			case 4 :
       
   677 				$this->import_comments();
       
   678 				break;
       
   679 			case 5 :
       
   680 				$this->import_links();
       
   681 				break;
       
   682 			case 6 :
       
   683 				$this->cleanup_txpimport();
       
   684 				break;
       
   685 		}
       
   686 
       
   687 		$this->footer();
       
   688 	}
       
   689 
       
   690 	function Textpattern_Import()
       
   691 	{
       
   692 		// Nothing.
       
   693 	}
       
   694 }
       
   695 
       
   696 $txp_import = new Textpattern_Import();
       
   697 
       
   698 register_importer('textpattern', __('Textpattern'), __('Import categories, users, posts, comments, and links from a Textpattern blog.'), array ($txp_import, 'dispatch'));
       
   699 
       
   700 ?>