source: trunk/www.guidonia.net/wp/wp-admin/import/greymatter.php@ 44

Last change on this file since 44 was 44, checked in by luciano, 14 years ago
File size: 10.9 KB
Line 
1<?php
2/**
3 * GreyMatter Importer
4 *
5 * @package WordPress
6 * @subpackage Importer
7 */
8
9/**
10 * GreyMatter Importer class
11 *
12 * Basic GreyMatter to WordPress importer, will import posts, comments, and
13 * posts karma.
14 *
15 * @since unknown
16 */
17class GM_Import {
18
19 var $gmnames = array ();
20
21 function header() {
22 echo '<div class="wrap">';
23 screen_icon();
24 echo '<h2>'.__('Import GreyMatter').'</h2>';
25 }
26
27 function footer() {
28 echo '</div>';
29 }
30
31 function greet() {
32 $this->header();
33?>
34<p><?php _e('This is a basic GreyMatter to WordPress import script.') ?></p>
35<p><?php _e('What it does:') ?></p>
36<ul>
37<li><?php _e('Parses gm-authors.cgi to import (new) authors. Everyone is imported at level 1.') ?></li>
38<li><?php _e('Parses the entries cgi files to import posts, comments, and karma on posts (although karma is not used on WordPress yet).<br />If authors are found not to be in gm-authors.cgi, imports them at level 0.') ?></li>
39<li><?php _e("Detects duplicate entries or comments. If you don't import everything the first time, or this import should fail in the middle, duplicate entries will not be made when you try again.") ?></li>
40</ul>
41<p><?php _e('What it does not:') ?></p>
42<ul>
43<li><?php _e('Parse gm-counter.cgi, gm-banlist.cgi, gm-cplog.cgi (you can make a CP log hack if you really feel like it, but I question the need of a CP log).') ?></li>
44<li><?php _e('Import gm-templates.') ?></li>
45<li><?php _e("Doesn't keep entries on top.")?></li>
46</ul>
47<p>&nbsp;</p>
48
49<form name="stepOne" method="get" action="">
50<input type="hidden" name="import" value="greymatter" />
51<input type="hidden" name="step" value="1" />
52<?php wp_nonce_field('import-greymatter'); ?>
53<h3><?php _e('Second step: GreyMatter details:') ?></h3>
54<table class="form-table">
55<tr>
56<td><label for="gmpath"><?php _e('Path to GM files:') ?></label></td>
57<td><input type="text" style="width:300px" name="gmpath" id="gmpath" value="/home/my/site/cgi-bin/greymatter/" /></td>
58</tr>
59<tr>
60<td><label for="archivespath"><?php _e('Path to GM entries:') ?></label></td>
61<td><input type="text" style="width:300px" name="archivespath" id="archivespath" value="/home/my/site/cgi-bin/greymatter/archives/" /></td>
62</tr>
63<tr>
64<td><label for="lastentry"><?php _e('Last entry&#8217;s number:') ?></label></td>
65<td><input type="text" name="lastentry" id="lastentry" value="00000001" /><br />
66 <?php _e('This importer will search for files 00000001.cgi to 000-whatever.cgi,<br />so you need to enter the number of the last GM post here.<br />(if you don&#8217;t know that number, just log into your FTP and look it out<br />in the entries&#8217; folder)') ?></td>
67</tr>
68</table>
69<p class="submit"><input type="submit" name="submit" class="button" value="<?php esc_attr_e('Start Importing') ?>" /></p>
70</form>
71<?php
72 $this->footer();
73 }
74
75
76
77 function gm2autobr($string) { // transforms GM's |*| into b2's <br />\n
78 $string = str_replace("|*|","<br />\n",$string);
79 return($string);
80 }
81
82 function import() {
83 global $wpdb;
84
85 $wpvarstoreset = array('gmpath', 'archivespath', 'lastentry');
86 for ($i=0; $i<count($wpvarstoreset); $i += 1) {
87 $wpvar = $wpvarstoreset[$i];
88 if (!isset($$wpvar)) {
89 if (empty($_POST["$wpvar"])) {
90 if (empty($_GET["$wpvar"])) {
91 $$wpvar = '';
92 } else {
93 $$wpvar = $_GET["$wpvar"];
94 }
95 } else {
96 $$wpvar = $_POST["$wpvar"];
97 }
98 }
99 }
100
101 if (!chdir($archivespath))
102 wp_die(__("Wrong path, the path to the GM entries does not exist on the server"));
103
104 if (!chdir($gmpath))
105 wp_die(__("Wrong path, the path to the GM files does not exist on the server"));
106
107 $lastentry = (int) $lastentry;
108
109 $this->header();
110?>
111<p><?php _e('The importer is running...') ?></p>
112<ul>
113<li><?php _e('importing users...') ?><ul><?php
114
115 chdir($gmpath);
116 $userbase = file("gm-authors.cgi");
117
118 foreach($userbase as $user) {
119 $userdata=explode("|", $user);
120
121 $user_ip="127.0.0.1";
122 $user_domain="localhost";
123 $user_browser="server";
124
125 $s=$userdata[4];
126 $user_joindate=substr($s,6,4)."-".substr($s,0,2)."-".substr($s,3,2)." 00:00:00";
127
128 $user_login=$wpdb->escape($userdata[0]);
129 $pass1=$wpdb->escape($userdata[1]);
130 $user_nickname=$wpdb->escape($userdata[0]);
131 $user_email=$wpdb->escape($userdata[2]);
132 $user_url=$wpdb->escape($userdata[3]);
133 $user_joindate=$wpdb->escape($user_joindate);
134
135 $user_id = username_exists($user_login);
136 if ($user_id) {
137 printf('<li>'.__('user %s').'<strong>'.__('Already exists').'</strong></li>', "<em>$user_login</em>");
138 $this->gmnames[$userdata[0]] = $user_id;
139 continue;
140 }
141
142 $user_info = array("user_login"=>"$user_login", "user_pass"=>"$pass1", "user_nickname"=>"$user_nickname", "user_email"=>"$user_email", "user_url"=>"$user_url", "user_ip"=>"$user_ip", "user_domain"=>"$user_domain", "user_browser"=>"$user_browser", "dateYMDhour"=>"$user_joindate", "user_level"=>"1", "user_idmode"=>"nickname");
143 $user_id = wp_insert_user($user_info);
144 $this->gmnames[$userdata[0]] = $user_id;
145
146 printf('<li>'.__('user %s...').' <strong>'.__('Done').'</strong></li>', "<em>$user_login</em>");
147 }
148
149?></ul><strong><?php _e('Done') ?></strong></li>
150<li><?php _e('importing posts, comments, and karma...') ?><br /><ul><?php
151
152 chdir($archivespath);
153
154 for($i = 0; $i <= $lastentry; $i = $i + 1) {
155
156 $entryfile = "";
157
158 if ($i<10000000) {
159 $entryfile .= "0";
160 if ($i<1000000) {
161 $entryfile .= "0";
162 if ($i<100000) {
163 $entryfile .= "0";
164 if ($i<10000) {
165 $entryfile .= "0";
166 if ($i<1000) {
167 $entryfile .= "0";
168 if ($i<100) {
169 $entryfile .= "0";
170 if ($i<10) {
171 $entryfile .= "0";
172 }}}}}}}
173
174 $entryfile .= "$i";
175
176 if (is_file($entryfile.".cgi")) {
177
178 $entry=file($entryfile.".cgi");
179 $postinfo=explode("|",$entry[0]);
180 $postmaincontent=$this->gm2autobr($entry[2]);
181 $postmorecontent=$this->gm2autobr($entry[3]);
182
183 $post_author=trim($wpdb->escape($postinfo[1]));
184
185 $post_title=$this->gm2autobr($postinfo[2]);
186 printf('<li>'.__('entry # %s : %s : by %s'), $entryfile, $post_title, $postinfo[1]);
187 $post_title=$wpdb->escape($post_title);
188
189 $postyear=$postinfo[6];
190 $postmonth=zeroise($postinfo[4],2);
191 $postday=zeroise($postinfo[5],2);
192 $posthour=zeroise($postinfo[7],2);
193 $postminute=zeroise($postinfo[8],2);
194 $postsecond=zeroise($postinfo[9],2);
195
196 if (($postinfo[10]=="PM") && ($posthour!="12"))
197 $posthour=$posthour+12;
198
199 $post_date="$postyear-$postmonth-$postday $posthour:$postminute:$postsecond";
200
201 $post_content=$postmaincontent;
202 if (strlen($postmorecontent)>3)
203 $post_content .= "<!--more--><br /><br />".$postmorecontent;
204 $post_content=$wpdb->escape($post_content);
205
206 $post_karma=$postinfo[12];
207
208 $post_status = 'publish'; //in greymatter, there are no drafts
209 $comment_status = 'open';
210 $ping_status = 'closed';
211
212 if ($post_ID = post_exists($post_title, '', $post_date)) {
213 echo ' ';
214 _e('(already exists)');
215 } else {
216 //just so that if a post already exists, new users are not created by checkauthor
217 // we'll check the author is registered, or if it's a deleted author
218 $user_id = username_exists($post_author);
219 if (!$user_id) { // if deleted from GM, we register the author as a level 0 user
220 $user_ip="127.0.0.1";
221 $user_domain="localhost";
222 $user_browser="server";
223 $user_joindate="1979-06-06 00:41:00";
224 $user_login=$wpdb->escape($post_author);
225 $pass1=$wpdb->escape("password");
226 $user_nickname=$wpdb->escape($post_author);
227 $user_email=$wpdb->escape("user@deleted.com");
228 $user_url=$wpdb->escape("");
229 $user_joindate=$wpdb->escape($user_joindate);
230
231 $user_info = array("user_login"=>$user_login, "user_pass"=>$pass1, "user_nickname"=>$user_nickname, "user_email"=>$user_email, "user_url"=>$user_url, "user_ip"=>$user_ip, "user_domain"=>$user_domain, "user_browser"=>$user_browser, "dateYMDhour"=>$user_joindate, "user_level"=>0, "user_idmode"=>"nickname");
232 $user_id = wp_insert_user($user_info);
233 $this->gmnames[$postinfo[1]] = $user_id;
234
235 echo ': ';
236 printf(__('registered deleted user %s at level 0 '), "<em>$user_login</em>");
237 }
238
239 if (array_key_exists($postinfo[1], $this->gmnames)) {
240 $post_author = $this->gmnames[$postinfo[1]];
241 } else {
242 $post_author = $user_id;
243 }
244
245 $postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_excerpt', 'post_status', 'comment_status', 'ping_status', 'post_modified', 'post_modified_gmt');
246 $post_ID = wp_insert_post($postdata);
247 if ( is_wp_error( $post_ID ) )
248 return $post_ID;
249 }
250
251 $c=count($entry);
252 if ($c>4) {
253 $numAddedComments = 0;
254 $numComments = 0;
255 for ($j=4;$j<$c;$j++) {
256 $entry[$j]=$this->gm2autobr($entry[$j]);
257 $commentinfo=explode("|",$entry[$j]);
258 $comment_post_ID=$post_ID;
259 $comment_author=$wpdb->escape($commentinfo[0]);
260 $comment_author_email=$wpdb->escape($commentinfo[2]);
261 $comment_author_url=$wpdb->escape($commentinfo[3]);
262 $comment_author_IP=$wpdb->escape($commentinfo[1]);
263
264 $commentyear=$commentinfo[7];
265 $commentmonth=zeroise($commentinfo[5],2);
266 $commentday=zeroise($commentinfo[6],2);
267 $commenthour=zeroise($commentinfo[8],2);
268 $commentminute=zeroise($commentinfo[9],2);
269 $commentsecond=zeroise($commentinfo[10],2);
270 if (($commentinfo[11]=="PM") && ($commenthour!="12"))
271 $commenthour=$commenthour+12;
272 $comment_date="$commentyear-$commentmonth-$commentday $commenthour:$commentminute:$commentsecond";
273
274 $comment_content=$wpdb->escape($commentinfo[12]);
275
276 if (!comment_exists($comment_author, $comment_date)) {
277 $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved');
278 $commentdata = wp_filter_comment($commentdata);
279 wp_insert_comment($commentdata);
280 $numAddedComments++;
281 }
282 $numComments++;
283 }
284 if ($numAddedComments > 0) {
285 echo ': ';
286 printf( _n('imported %s comment', 'imported %s comments', $numAddedComments) , $numAddedComments);
287 }
288 $preExisting = $numComments - numAddedComments;
289 if ($preExisting > 0) {
290 echo ' ';
291 printf( _n( 'ignored %s pre-existing comment', 'ignored %s pre-existing comments', $preExisting ) , $preExisting);
292 }
293 }
294 echo '... <strong>'.__('Done').'</strong></li>';
295 }
296 }
297 do_action('import_done', 'greymatter');
298 ?>
299</ul><strong><?php _e('Done') ?></strong></li></ul>
300<p>&nbsp;</p>
301<p><?php _e('Completed GreyMatter import!') ?></p>
302<?php
303 $this->footer();
304 return;
305 }
306
307 function dispatch() {
308 if (empty ($_GET['step']))
309 $step = 0;
310 else
311 $step = (int) $_GET['step'];
312
313 switch ($step) {
314 case 0 :
315 $this->greet();
316 break;
317 case 1:
318 check_admin_referer('import-greymatter');
319 $result = $this->import();
320 if ( is_wp_error( $result ) )
321 echo $result->get_error_message();
322 break;
323 }
324 }
325
326 function GM_Import() {
327 // Nothing.
328 }
329}
330
331$gm_import = new GM_Import();
332
333register_importer('greymatter', __('GreyMatter'), __('Import users, posts, and comments from a Greymatter blog.'), array ($gm_import, 'dispatch'));
334?>
Note: See TracBrowser for help on using the repository browser.