|
1 <?php |
|
2 /** |
|
3 * DotClear Importer |
|
4 * |
|
5 * @package WordPress |
|
6 * @subpackage Importer |
|
7 * @author Thomas Quinot |
|
8 * @link http://thomas.quinot.org/ |
|
9 */ |
|
10 |
|
11 /** |
|
12 Add These Functions to make our lives easier |
|
13 **/ |
|
14 |
|
15 if(!function_exists('get_comment_count')) |
|
16 { |
|
17 /** |
|
18 * Get the comment count for posts. |
|
19 * |
|
20 * @package WordPress |
|
21 * @subpackage Dotclear_Import |
|
22 * |
|
23 * @param int $post_ID Post ID |
|
24 * @return int |
|
25 */ |
|
26 function get_comment_count($post_ID) |
|
27 { |
|
28 global $wpdb; |
|
29 return $wpdb->get_var( $wpdb->prepare("SELECT count(*) FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) ); |
|
30 } |
|
31 } |
|
32 |
|
33 if(!function_exists('link_exists')) |
|
34 { |
|
35 /** |
|
36 * Check whether link already exists. |
|
37 * |
|
38 * @package WordPress |
|
39 * @subpackage Dotclear_Import |
|
40 * |
|
41 * @param string $linkname |
|
42 * @return int |
|
43 */ |
|
44 function link_exists($linkname) |
|
45 { |
|
46 global $wpdb; |
|
47 return $wpdb->get_var( $wpdb->prepare("SELECT link_id FROM $wpdb->links WHERE link_name = %s", $linkname) ); |
|
48 } |
|
49 } |
|
50 |
|
51 /** |
|
52 * Convert from dotclear charset to utf8 if required |
|
53 * |
|
54 * @package WordPress |
|
55 * @subpackage Dotclear_Import |
|
56 * |
|
57 * @param string $s |
|
58 * @return string |
|
59 */ |
|
60 function csc ($s) { |
|
61 if (seems_utf8 ($s)) { |
|
62 return $s; |
|
63 } else { |
|
64 return iconv(get_option ("dccharset"),"UTF-8",$s); |
|
65 } |
|
66 } |
|
67 |
|
68 /** |
|
69 * @package WordPress |
|
70 * @subpackage Dotclear_Import |
|
71 * |
|
72 * @param string $s |
|
73 * @return string |
|
74 */ |
|
75 function textconv ($s) { |
|
76 return csc (preg_replace ('|(?<!<br />)\s*\n|', ' ', $s)); |
|
77 } |
|
78 |
|
79 /** |
|
80 * Dotclear Importer class |
|
81 * |
|
82 * Will process the WordPress eXtended RSS files that you upload from the export |
|
83 * file. |
|
84 * |
|
85 * @package WordPress |
|
86 * @subpackage Importer |
|
87 * |
|
88 * @since unknown |
|
89 */ |
|
90 class Dotclear_Import { |
|
91 |
|
92 function header() |
|
93 { |
|
94 echo '<div class="wrap">'; |
|
95 screen_icon(); |
|
96 echo '<h2>'.__('Import DotClear').'</h2>'; |
|
97 echo '<p>'.__('Steps may take a few minutes depending on the size of your database. Please be patient.').'</p>'; |
|
98 } |
|
99 |
|
100 function footer() |
|
101 { |
|
102 echo '</div>'; |
|
103 } |
|
104 |
|
105 function greet() |
|
106 { |
|
107 echo '<div class="narrow"><p>'.__('Howdy! This importer allows you to extract posts from a DotClear database into your blog. Mileage may vary.').'</p>'; |
|
108 echo '<p>'.__('Your DotClear Configuration settings are as follows:').'</p>'; |
|
109 echo '<form action="admin.php?import=dotclear&step=1" method="post">'; |
|
110 wp_nonce_field('import-dotclear'); |
|
111 $this->db_form(); |
|
112 echo '<p class="submit"><input type="submit" name="submit" class="button" value="'.esc_attr__('Import Categories').'" /></p>'; |
|
113 echo '</form></div>'; |
|
114 } |
|
115 |
|
116 function get_dc_cats() |
|
117 { |
|
118 global $wpdb; |
|
119 // General Housekeeping |
|
120 $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); |
|
121 set_magic_quotes_runtime(0); |
|
122 $dbprefix = get_option('dcdbprefix'); |
|
123 |
|
124 // Get Categories |
|
125 return $dcdb->get_results('SELECT * FROM '.$dbprefix.'categorie', ARRAY_A); |
|
126 } |
|
127 |
|
128 function get_dc_users() |
|
129 { |
|
130 global $wpdb; |
|
131 // General Housekeeping |
|
132 $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); |
|
133 set_magic_quotes_runtime(0); |
|
134 $dbprefix = get_option('dcdbprefix'); |
|
135 |
|
136 // Get Users |
|
137 |
|
138 return $dcdb->get_results('SELECT * FROM '.$dbprefix.'user', ARRAY_A); |
|
139 } |
|
140 |
|
141 function get_dc_posts() |
|
142 { |
|
143 // General Housekeeping |
|
144 $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); |
|
145 set_magic_quotes_runtime(0); |
|
146 $dbprefix = get_option('dcdbprefix'); |
|
147 |
|
148 // Get Posts |
|
149 return $dcdb->get_results('SELECT '.$dbprefix.'post.*, '.$dbprefix.'categorie.cat_libelle_url AS post_cat_name |
|
150 FROM '.$dbprefix.'post INNER JOIN '.$dbprefix.'categorie |
|
151 ON '.$dbprefix.'post.cat_id = '.$dbprefix.'categorie.cat_id', ARRAY_A); |
|
152 } |
|
153 |
|
154 function get_dc_comments() |
|
155 { |
|
156 global $wpdb; |
|
157 // General Housekeeping |
|
158 $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); |
|
159 set_magic_quotes_runtime(0); |
|
160 $dbprefix = get_option('dcdbprefix'); |
|
161 |
|
162 // Get Comments |
|
163 return $dcdb->get_results('SELECT * FROM '.$dbprefix.'comment', ARRAY_A); |
|
164 } |
|
165 |
|
166 function get_dc_links() |
|
167 { |
|
168 //General Housekeeping |
|
169 $dcdb = new wpdb(get_option('dcuser'), get_option('dcpass'), get_option('dcname'), get_option('dchost')); |
|
170 set_magic_quotes_runtime(0); |
|
171 $dbprefix = get_option('dcdbprefix'); |
|
172 |
|
173 return $dcdb->get_results('SELECT * FROM '.$dbprefix.'link ORDER BY position', ARRAY_A); |
|
174 } |
|
175 |
|
176 function cat2wp($categories='') |
|
177 { |
|
178 // General Housekeeping |
|
179 global $wpdb; |
|
180 $count = 0; |
|
181 $dccat2wpcat = array(); |
|
182 // Do the Magic |
|
183 if(is_array($categories)) |
|
184 { |
|
185 echo '<p>'.__('Importing Categories...').'<br /><br /></p>'; |
|
186 foreach ($categories as $category) |
|
187 { |
|
188 $count++; |
|
189 extract($category); |
|
190 |
|
191 // Make Nice Variables |
|
192 $name = $wpdb->escape($cat_libelle_url); |
|
193 $title = $wpdb->escape(csc ($cat_libelle)); |
|
194 $desc = $wpdb->escape(csc ($cat_desc)); |
|
195 |
|
196 if($cinfo = category_exists($name)) |
|
197 { |
|
198 $ret_id = wp_insert_category(array('cat_ID' => $cinfo, 'category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); |
|
199 } |
|
200 else |
|
201 { |
|
202 $ret_id = wp_insert_category(array('category_nicename' => $name, 'cat_name' => $title, 'category_description' => $desc)); |
|
203 } |
|
204 $dccat2wpcat[$id] = $ret_id; |
|
205 } |
|
206 |
|
207 // Store category translation for future use |
|
208 add_option('dccat2wpcat',$dccat2wpcat); |
|
209 echo '<p>'.sprintf(_n('Done! <strong>%1$s</strong> category imported.', 'Done! <strong>%1$s</strong> categories imported.', $count), $count).'<br /><br /></p>'; |
|
210 return true; |
|
211 } |
|
212 echo __('No Categories to Import!'); |
|
213 return false; |
|
214 } |
|
215 |
|
216 function users2wp($users='') |
|
217 { |
|
218 // General Housekeeping |
|
219 global $wpdb; |
|
220 $count = 0; |
|
221 $dcid2wpid = array(); |
|
222 |
|
223 // Midnight Mojo |
|
224 if(is_array($users)) |
|
225 { |
|
226 echo '<p>'.__('Importing Users...').'<br /><br /></p>'; |
|
227 foreach($users as $user) |
|
228 { |
|
229 $count++; |
|
230 extract($user); |
|
231 |
|
232 // Make Nice Variables |
|
233 $name = $wpdb->escape(csc ($name)); |
|
234 $RealName = $wpdb->escape(csc ($user_pseudo)); |
|
235 |
|
236 if($uinfo = get_userdatabylogin($name)) |
|
237 { |
|
238 |
|
239 $ret_id = wp_insert_user(array( |
|
240 'ID' => $uinfo->ID, |
|
241 'user_login' => $user_id, |
|
242 'user_nicename' => $Realname, |
|
243 'user_email' => $user_email, |
|
244 'user_url' => 'http://', |
|
245 'display_name' => $Realname) |
|
246 ); |
|
247 } |
|
248 else |
|
249 { |
|
250 $ret_id = wp_insert_user(array( |
|
251 'user_login' => $user_id, |
|
252 'user_nicename' => csc ($user_pseudo), |
|
253 'user_email' => $user_email, |
|
254 'user_url' => 'http://', |
|
255 'display_name' => $Realname) |
|
256 ); |
|
257 } |
|
258 $dcid2wpid[$user_id] = $ret_id; |
|
259 |
|
260 // Set DotClear-to-WordPress permissions translation |
|
261 |
|
262 // Update Usermeta Data |
|
263 $user = new WP_User($ret_id); |
|
264 $wp_perms = $user_level + 1; |
|
265 if(10 == $wp_perms) { $user->set_role('administrator'); } |
|
266 else if(9 == $wp_perms) { $user->set_role('editor'); } |
|
267 else if(5 <= $wp_perms) { $user->set_role('editor'); } |
|
268 else if(4 <= $wp_perms) { $user->set_role('author'); } |
|
269 else if(3 <= $wp_perms) { $user->set_role('contributor'); } |
|
270 else if(2 <= $wp_perms) { $user->set_role('contributor'); } |
|
271 else { $user->set_role('subscriber'); } |
|
272 |
|
273 update_usermeta( $ret_id, 'wp_user_level', $wp_perms); |
|
274 update_usermeta( $ret_id, 'rich_editing', 'false'); |
|
275 update_usermeta( $ret_id, 'first_name', csc ($user_prenom)); |
|
276 update_usermeta( $ret_id, 'last_name', csc ($user_nom)); |
|
277 }// End foreach($users as $user) |
|
278 |
|
279 // Store id translation array for future use |
|
280 add_option('dcid2wpid',$dcid2wpid); |
|
281 |
|
282 |
|
283 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> users imported.'), $count).'<br /><br /></p>'; |
|
284 return true; |
|
285 }// End if(is_array($users) |
|
286 |
|
287 echo __('No Users to Import!'); |
|
288 return false; |
|
289 |
|
290 }// End function user2wp() |
|
291 |
|
292 function posts2wp($posts='') |
|
293 { |
|
294 // General Housekeeping |
|
295 global $wpdb; |
|
296 $count = 0; |
|
297 $dcposts2wpposts = array(); |
|
298 $cats = array(); |
|
299 |
|
300 // Do the Magic |
|
301 if(is_array($posts)) |
|
302 { |
|
303 echo '<p>'.__('Importing Posts...').'<br /><br /></p>'; |
|
304 foreach($posts as $post) |
|
305 { |
|
306 $count++; |
|
307 extract($post); |
|
308 |
|
309 // Set DotClear-to-WordPress status translation |
|
310 $stattrans = array(0 => 'draft', 1 => 'publish'); |
|
311 $comment_status_map = array (0 => 'closed', 1 => 'open'); |
|
312 |
|
313 //Can we do this more efficiently? |
|
314 $uinfo = ( get_userdatabylogin( $user_id ) ) ? get_userdatabylogin( $user_id ) : 1; |
|
315 $authorid = ( is_object( $uinfo ) ) ? $uinfo->ID : $uinfo ; |
|
316 |
|
317 $Title = $wpdb->escape(csc ($post_titre)); |
|
318 $post_content = textconv ($post_content); |
|
319 $post_excerpt = ""; |
|
320 if ($post_chapo != "") { |
|
321 $post_excerpt = textconv ($post_chapo); |
|
322 $post_content = $post_excerpt ."\n<!--more-->\n".$post_content; |
|
323 } |
|
324 $post_excerpt = $wpdb->escape ($post_excerpt); |
|
325 $post_content = $wpdb->escape ($post_content); |
|
326 $post_status = $stattrans[$post_pub]; |
|
327 |
|
328 // Import Post data into WordPress |
|
329 |
|
330 if($pinfo = post_exists($Title,$post_content)) |
|
331 { |
|
332 $ret_id = wp_insert_post(array( |
|
333 'ID' => $pinfo, |
|
334 'post_author' => $authorid, |
|
335 'post_date' => $post_dt, |
|
336 'post_date_gmt' => $post_dt, |
|
337 'post_modified' => $post_upddt, |
|
338 'post_modified_gmt' => $post_upddt, |
|
339 'post_title' => $Title, |
|
340 'post_content' => $post_content, |
|
341 'post_excerpt' => $post_excerpt, |
|
342 'post_status' => $post_status, |
|
343 'post_name' => $post_titre_url, |
|
344 'comment_status' => $comment_status_map[$post_open_comment], |
|
345 'ping_status' => $comment_status_map[$post_open_tb], |
|
346 'comment_count' => $post_nb_comment + $post_nb_trackback) |
|
347 ); |
|
348 if ( is_wp_error( $ret_id ) ) |
|
349 return $ret_id; |
|
350 } |
|
351 else |
|
352 { |
|
353 $ret_id = wp_insert_post(array( |
|
354 'post_author' => $authorid, |
|
355 'post_date' => $post_dt, |
|
356 'post_date_gmt' => $post_dt, |
|
357 'post_modified' => $post_modified_gmt, |
|
358 'post_modified_gmt' => $post_modified_gmt, |
|
359 'post_title' => $Title, |
|
360 'post_content' => $post_content, |
|
361 'post_excerpt' => $post_excerpt, |
|
362 'post_status' => $post_status, |
|
363 'post_name' => $post_titre_url, |
|
364 'comment_status' => $comment_status_map[$post_open_comment], |
|
365 'ping_status' => $comment_status_map[$post_open_tb], |
|
366 'comment_count' => $post_nb_comment + $post_nb_trackback) |
|
367 ); |
|
368 if ( is_wp_error( $ret_id ) ) |
|
369 return $ret_id; |
|
370 } |
|
371 $dcposts2wpposts[$post_id] = $ret_id; |
|
372 |
|
373 // Make Post-to-Category associations |
|
374 $cats = array(); |
|
375 $category1 = get_category_by_slug($post_cat_name); |
|
376 $category1 = $category1->term_id; |
|
377 |
|
378 if($cat1 = $category1) { $cats[1] = $cat1; } |
|
379 |
|
380 if(!empty($cats)) { wp_set_post_categories($ret_id, $cats); } |
|
381 } |
|
382 } |
|
383 // Store ID translation for later use |
|
384 add_option('dcposts2wpposts',$dcposts2wpposts); |
|
385 |
|
386 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> posts imported.'), $count).'<br /><br /></p>'; |
|
387 return true; |
|
388 } |
|
389 |
|
390 function comments2wp($comments='') |
|
391 { |
|
392 // General Housekeeping |
|
393 global $wpdb; |
|
394 $count = 0; |
|
395 $dccm2wpcm = array(); |
|
396 $postarr = get_option('dcposts2wpposts'); |
|
397 |
|
398 // Magic Mojo |
|
399 if(is_array($comments)) |
|
400 { |
|
401 echo '<p>'.__('Importing Comments...').'<br /><br /></p>'; |
|
402 foreach($comments as $comment) |
|
403 { |
|
404 $count++; |
|
405 extract($comment); |
|
406 |
|
407 // WordPressify Data |
|
408 $comment_ID = (int) ltrim($comment_id, '0'); |
|
409 $comment_post_ID = (int) $postarr[$post_id]; |
|
410 $comment_approved = "$comment_pub"; |
|
411 $name = $wpdb->escape(csc ($comment_auteur)); |
|
412 $email = $wpdb->escape($comment_email); |
|
413 $web = "http://".$wpdb->escape($comment_site); |
|
414 $message = $wpdb->escape(textconv ($comment_content)); |
|
415 |
|
416 $comment = array( |
|
417 'comment_post_ID' => $comment_post_ID, |
|
418 'comment_author' => $name, |
|
419 'comment_author_email' => $email, |
|
420 'comment_author_url' => $web, |
|
421 'comment_author_IP' => $comment_ip, |
|
422 'comment_date' => $comment_dt, |
|
423 'comment_date_gmt' => $comment_dt, |
|
424 'comment_content' => $message, |
|
425 'comment_approved' => $comment_approved); |
|
426 $comment = wp_filter_comment($comment); |
|
427 |
|
428 if ( $cinfo = comment_exists($name, $comment_dt) ) { |
|
429 // Update comments |
|
430 $comment['comment_ID'] = $cinfo; |
|
431 $ret_id = wp_update_comment($comment); |
|
432 } else { |
|
433 // Insert comments |
|
434 $ret_id = wp_insert_comment($comment); |
|
435 } |
|
436 $dccm2wpcm[$comment_ID] = $ret_id; |
|
437 } |
|
438 // Store Comment ID translation for future use |
|
439 add_option('dccm2wpcm', $dccm2wpcm); |
|
440 |
|
441 // Associate newly formed categories with posts |
|
442 get_comment_count($ret_id); |
|
443 |
|
444 |
|
445 echo '<p>'.sprintf(__('Done! <strong>%1$s</strong> comments imported.'), $count).'<br /><br /></p>'; |
|
446 return true; |
|
447 } |
|
448 echo __('No Comments to Import!'); |
|
449 return false; |
|
450 } |
|
451 |
|
452 function links2wp($links='') |
|
453 { |
|
454 // General Housekeeping |
|
455 global $wpdb; |
|
456 $count = 0; |
|
457 |
|
458 // Deal with the links |
|
459 if(is_array($links)) |
|
460 { |
|
461 echo '<p>'.__('Importing Links...').'<br /><br /></p>'; |
|
462 foreach($links as $link) |
|
463 { |
|
464 $count++; |
|
465 extract($link); |
|
466 |
|
467 if ($title != "") { |
|
468 if ($cinfo = is_term(csc ($title), 'link_category')) { |
|
469 $category = $cinfo['term_id']; |
|
470 } else { |
|
471 $category = wp_insert_term($wpdb->escape (csc ($title)), 'link_category'); |
|
472 $category = $category['term_id']; |
|
473 } |
|
474 } else { |
|
475 $linkname = $wpdb->escape(csc ($label)); |
|
476 $description = $wpdb->escape(csc ($title)); |
|
477 |
|
478 if($linfo = link_exists($linkname)) { |
|
479 $ret_id = wp_insert_link(array( |
|
480 'link_id' => $linfo, |
|
481 'link_url' => $href, |
|
482 'link_name' => $linkname, |
|
483 'link_category' => $category, |
|
484 'link_description' => $description) |
|
485 ); |
|
486 } else { |
|
487 $ret_id = wp_insert_link(array( |
|
488 'link_url' => $url, |
|
489 'link_name' => $linkname, |
|
490 'link_category' => $category, |
|
491 'link_description' => $description) |
|
492 ); |
|
493 } |
|
494 $dclinks2wplinks[$link_id] = $ret_id; |
|
495 } |
|
496 } |
|
497 add_option('dclinks2wplinks',$dclinks2wplinks); |
|
498 echo '<p>'; |
|
499 printf(_n('Done! <strong>%s</strong> link or link category imported.', 'Done! <strong>%s</strong> links or link categories imported.', $count), $count); |
|
500 echo '<br /><br /></p>'; |
|
501 return true; |
|
502 } |
|
503 echo __('No Links to Import!'); |
|
504 return false; |
|
505 } |
|
506 |
|
507 function import_categories() |
|
508 { |
|
509 // Category Import |
|
510 $cats = $this->get_dc_cats(); |
|
511 $this->cat2wp($cats); |
|
512 add_option('dc_cats', $cats); |
|
513 |
|
514 |
|
515 |
|
516 echo '<form action="admin.php?import=dotclear&step=2" method="post">'; |
|
517 wp_nonce_field('import-dotclear'); |
|
518 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Users')); |
|
519 echo '</form>'; |
|
520 |
|
521 } |
|
522 |
|
523 function import_users() |
|
524 { |
|
525 // User Import |
|
526 $users = $this->get_dc_users(); |
|
527 $this->users2wp($users); |
|
528 |
|
529 echo '<form action="admin.php?import=dotclear&step=3" method="post">'; |
|
530 wp_nonce_field('import-dotclear'); |
|
531 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Posts')); |
|
532 echo '</form>'; |
|
533 } |
|
534 |
|
535 function import_posts() |
|
536 { |
|
537 // Post Import |
|
538 $posts = $this->get_dc_posts(); |
|
539 $result = $this->posts2wp($posts); |
|
540 if ( is_wp_error( $result ) ) |
|
541 return $result; |
|
542 |
|
543 echo '<form action="admin.php?import=dotclear&step=4" method="post">'; |
|
544 wp_nonce_field('import-dotclear'); |
|
545 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Comments')); |
|
546 echo '</form>'; |
|
547 } |
|
548 |
|
549 function import_comments() |
|
550 { |
|
551 // Comment Import |
|
552 $comments = $this->get_dc_comments(); |
|
553 $this->comments2wp($comments); |
|
554 |
|
555 echo '<form action="admin.php?import=dotclear&step=5" method="post">'; |
|
556 wp_nonce_field('import-dotclear'); |
|
557 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Import Links')); |
|
558 echo '</form>'; |
|
559 } |
|
560 |
|
561 function import_links() |
|
562 { |
|
563 //Link Import |
|
564 $links = $this->get_dc_links(); |
|
565 $this->links2wp($links); |
|
566 add_option('dc_links', $links); |
|
567 |
|
568 echo '<form action="admin.php?import=dotclear&step=6" method="post">'; |
|
569 wp_nonce_field('import-dotclear'); |
|
570 printf('<p class="submit"><input type="submit" name="submit" class="button" value="%s" /></p>', esc_attr__('Finish')); |
|
571 echo '</form>'; |
|
572 } |
|
573 |
|
574 function cleanup_dcimport() |
|
575 { |
|
576 delete_option('dcdbprefix'); |
|
577 delete_option('dc_cats'); |
|
578 delete_option('dcid2wpid'); |
|
579 delete_option('dccat2wpcat'); |
|
580 delete_option('dcposts2wpposts'); |
|
581 delete_option('dccm2wpcm'); |
|
582 delete_option('dclinks2wplinks'); |
|
583 delete_option('dcuser'); |
|
584 delete_option('dcpass'); |
|
585 delete_option('dcname'); |
|
586 delete_option('dchost'); |
|
587 delete_option('dccharset'); |
|
588 do_action('import_done', 'dotclear'); |
|
589 $this->tips(); |
|
590 } |
|
591 |
|
592 function tips() |
|
593 { |
|
594 echo '<p>'.__('Welcome to WordPress. We hope (and expect!) that you will find this platform incredibly rewarding! As a new WordPress user coming from DotClear, there are some things that we would like to point out. Hopefully, they will help your transition go as smoothly as possible.').'</p>'; |
|
595 echo '<h3>'.__('Users').'</h3>'; |
|
596 echo '<p>'.sprintf(__('You have already setup WordPress and have been assigned an administrative login and password. Forget it. You didn’t have that login in DotClear, 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 DotClear 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">Log in</a> and change it.'), '/wp-login.php').'</p>'; |
|
597 echo '<h3>'.__('Preserving Authors').'</h3>'; |
|
598 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>'; |
|
599 echo '<h3>'.__('Textile').'</h3>'; |
|
600 echo '<p>'.__('Also, since you’re coming from DotClear, 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’ll want it.').'</p>'; |
|
601 echo '<h3>'.__('WordPress Resources').'</h3>'; |
|
602 echo '<p>'.__('Finally, there are numerous WordPress resources around the internet. Some of them are:').'</p>'; |
|
603 echo '<ul>'; |
|
604 echo '<li>'.__('<a href="http://www.wordpress.org">The official WordPress site</a>').'</li>'; |
|
605 echo '<li>'.__('<a href="http://wordpress.org/support/">The WordPress support forums</a>').'</li>'; |
|
606 echo '<li>'.__('<a href="http://codex.wordpress.org">The Codex (In other words, the WordPress Bible)</a>').'</li>'; |
|
607 echo '</ul>'; |
|
608 echo '<p>'.sprintf(__('That’s it! What are you waiting for? Go <a href="%1$s">log in</a>!'), '../wp-login.php').'</p>'; |
|
609 } |
|
610 |
|
611 function db_form() |
|
612 { |
|
613 echo '<table class="form-table">'; |
|
614 printf('<tr><th><label for="dbuser">%s</label></th><td><input type="text" name="dbuser" id="dbuser" /></td></tr>', __('DotClear Database User:')); |
|
615 printf('<tr><th><label for="dbpass">%s</label></th><td><input type="password" name="dbpass" id="dbpass" /></td></tr>', __('DotClear Database Password:')); |
|
616 printf('<tr><th><label for="dbname">%s</label></th><td><input type="text" name="dbname" id="dbname" /></td></tr>', __('DotClear Database Name:')); |
|
617 printf('<tr><th><label for="dbhost">%s</label></th><td><input type="text" name="dbhost" id="dbhost" value="localhost" /></td></tr>', __('DotClear Database Host:')); |
|
618 printf('<tr><th><label for="dbprefix">%s</label></th><td><input type="text" name="dbprefix" id="dbprefix" value="dc_"/></td></tr>', __('DotClear Table prefix:')); |
|
619 printf('<tr><th><label for="dccharset">%s</label></th><td><input type="text" name="dccharset" id="dccharset" value="ISO-8859-15"/></td></tr>', __('Originating character set:')); |
|
620 echo '</table>'; |
|
621 } |
|
622 |
|
623 function dispatch() |
|
624 { |
|
625 |
|
626 if (empty ($_GET['step'])) |
|
627 $step = 0; |
|
628 else |
|
629 $step = (int) $_GET['step']; |
|
630 $this->header(); |
|
631 |
|
632 if ( $step > 0 ) |
|
633 { |
|
634 check_admin_referer('import-dotclear'); |
|
635 |
|
636 if($_POST['dbuser']) |
|
637 { |
|
638 if(get_option('dcuser')) |
|
639 delete_option('dcuser'); |
|
640 add_option('dcuser', sanitize_user($_POST['dbuser'], true)); |
|
641 } |
|
642 if($_POST['dbpass']) |
|
643 { |
|
644 if(get_option('dcpass')) |
|
645 delete_option('dcpass'); |
|
646 add_option('dcpass', sanitize_user($_POST['dbpass'], true)); |
|
647 } |
|
648 |
|
649 if($_POST['dbname']) |
|
650 { |
|
651 if(get_option('dcname')) |
|
652 delete_option('dcname'); |
|
653 add_option('dcname', sanitize_user($_POST['dbname'], true)); |
|
654 } |
|
655 if($_POST['dbhost']) |
|
656 { |
|
657 if(get_option('dchost')) |
|
658 delete_option('dchost'); |
|
659 add_option('dchost', sanitize_user($_POST['dbhost'], true)); |
|
660 } |
|
661 if($_POST['dccharset']) |
|
662 { |
|
663 if(get_option('dccharset')) |
|
664 delete_option('dccharset'); |
|
665 add_option('dccharset', sanitize_user($_POST['dccharset'], true)); |
|
666 } |
|
667 if($_POST['dbprefix']) |
|
668 { |
|
669 if(get_option('dcdbprefix')) |
|
670 delete_option('dcdbprefix'); |
|
671 add_option('dcdbprefix', sanitize_user($_POST['dbprefix'], true)); |
|
672 } |
|
673 |
|
674 |
|
675 } |
|
676 |
|
677 switch ($step) |
|
678 { |
|
679 default: |
|
680 case 0 : |
|
681 $this->greet(); |
|
682 break; |
|
683 case 1 : |
|
684 $this->import_categories(); |
|
685 break; |
|
686 case 2 : |
|
687 $this->import_users(); |
|
688 break; |
|
689 case 3 : |
|
690 $result = $this->import_posts(); |
|
691 if ( is_wp_error( $result ) ) |
|
692 echo $result->get_error_message(); |
|
693 break; |
|
694 case 4 : |
|
695 $this->import_comments(); |
|
696 break; |
|
697 case 5 : |
|
698 $this->import_links(); |
|
699 break; |
|
700 case 6 : |
|
701 $this->cleanup_dcimport(); |
|
702 break; |
|
703 } |
|
704 |
|
705 $this->footer(); |
|
706 } |
|
707 |
|
708 function Dotclear_Import() |
|
709 { |
|
710 // Nothing. |
|
711 } |
|
712 } |
|
713 |
|
714 $dc_import = new Dotclear_Import(); |
|
715 |
|
716 register_importer('dotclear', __('DotClear'), __('Import categories, users, posts, comments, and links from a DotClear blog.'), array ($dc_import, 'dispatch')); |
|
717 |
|
718 ?> |