root/tags/1.3/wp-admin/import/greymatter.php

Revision 1069, 10.5 kB (checked in by donncha, 1 year ago)

Merge with WP 2.3 - testing use only!
Move pluggable functions out of wpmu-functions and into pluggable.php, fixes #439

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