WordPress.org

Make WordPress Core

Ticket #2464: greymatter.2.php

File greymatter.2.php, 11.5 KB (added by bungeman, 15 years ago)

I'm putting this (final) version here so people can just use it if they wish.

Line 
1<?php
2
3class GM_Import {
4
5        var $gmnames = array ();
6
7        function header() {
8                echo '<div class="wrap">';
9                echo '<h2>'.__('Import Graymatter').'</h2>';
10        }
11
12        function footer() {
13                echo '</div>';
14        }
15
16        function greet() {
17                $this->header();
18?>
19<html>
20<head>
21<title>GM 2 b2 importer utility</title>
22<link rel="stylesheet" href="wp-admin/b2.css" type="text/css">
23<style type="text/css">
24<!--
25<?php
26if (!preg_match("/Nav/",$HTTP_USER_AGENT)) {
27?>
28textarea,input,select {
29        background-color: #f0f0f0;
30        border-width: 1px;
31        border-color: #cccccc;
32        border-style: solid;
33        padding: 2px;
34        margin: 1px;
35}
36<?php
37}
38?>
39-->
40</style>
41</head>
42<body style="margin: 20px;">
43<p><font face="times new roman" style="font-size: 39px;">gm 2 <img src="../wp-images/wpminilogo.png" width="50" height="50" border="0" alt="WP" align="top" /></font></p>
44<p>This is a basic GreyMatter to WordPress import script.</p>
45<p>What it does:</p>
46<ul>
47<li>parses gm-authors.cgi to import authors: everyone is imported at level 1</li>
48<li>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>
49</ul>
50<p>What it does not:</p>
51<ul>
52<li>parse gm-counter.cgi (what's the use of that file ?), 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>
53<li>import gm-templates. you'll start with the basic template wp.php</li>
54<li>doesn't keep entries on top</li>
55</ul>
56<p>&nbsp;</p>
57
58<h3>First step: install WordPress</h3>
59<p>Install the WordPress blog as explained in the <a href="../readme.html" target="_blank">ReadMe</a>, then immediately come back here.</p>
60
61<form name="stepOne" method="get">
62<input type="hidden" name="import" value="greymatter" />
63<input type="hidden" name="step" value="1" />
64<h3>Second step: GreyMatter details:</h3>
65<p><table cellpadding="0">
66<tr>
67<td>Path to GM files:</td>
68<td><input type="text" style="width:300px" name="gmpath" value="/home/my/site/cgi-bin/greymatter/" /></td>
69</tr>
70<tr>
71<td>Path to GM entries:</td>
72<td><input type="text" style="width:300px" name="archivespath" value="/home/my/site/cgi-bin/greymatter/archives/" /></td>
73</tr>
74<tr>
75<td colspan="2"><br />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>
76</tr>
77<tr>
78<td>Last entry's number:</td>
79<td><input type="text" name="lastentry" value="00000001" /></td>
80</tr>
81</table>
82</p>
83<p>When you're ready, click OK to start importing: <input type="submit" name="submit" value="OK" class="search" /></p>
84</form>
85
86</body>
87</html>
88<?php
89                $this->footer();
90        }
91
92
93
94        function gm2autobr($string) { // transforms GM's |*| into b2's <br />\n
95                $string = str_replace("|*|","<br />\n",$string);
96                return($string);
97        }
98       
99        function import() {
100                global $wpdb;
101       
102                $wpvarstoreset = array('gmpath', 'archivespath', 'lastentry');
103                for ($i=0; $i<count($wpvarstoreset); $i += 1) {
104                        $wpvar = $wpvarstoreset[$i];
105                        if (!isset($$wpvar)) {
106                                if (empty($_POST["$wpvar"])) {
107                                        if (empty($_GET["$wpvar"])) {
108                                                $$wpvar = '';
109                                        } else {
110                                                $$wpvar = $_GET["$wpvar"];
111                                        }
112                                } else {
113                                        $$wpvar = $_POST["$wpvar"];
114                                }
115                        }
116                }
117
118                if (!chdir($archivespath))
119                        die("Wrong path, $archivespath\ndoesn't exist\non the server");
120
121                if (!chdir($gmpath))
122                        die("Wrong path, $gmpath\ndoesn't exist\non the server");
123?>
124<html>
125<head>
126<title>GM 2 b2 - converting...</title>
127<link rel="stylesheet" href="wp-admin/b2.css" type="text/css">
128<style type="text/css">
129<!--
130<?php
131if (!preg_match("/Nav/",$HTTP_USER_AGENT)) {
132?>
133textarea,input,select {
134        background-color: #f0f0f0;
135        border-width: 1px;
136        border-color: #cccccc;
137        border-style: solid;
138        padding: 2px;
139        margin: 1px;
140}
141<?php
142}
143?>
144-->
145</style>
146</head>
147<body style="margin: 20px;">
148<p><font face="times new roman" style="font-size: 39px;">gm 2 <img src="../wp-images/wpminilogo.png" width="50" height="50" border="0" alt="WP" align="top" /></font></p>
149<p>The importer is running...</p>
150<ul>
151<li>importing users... <ul><?php
152
153        chdir($gmpath);
154        $userbase = file("gm-authors.cgi");
155
156        //$connexion = mysql_connect($server,$loginsql,$passsql) or die ("Oops, MySQL connection error ! Couldn't connect to $server with the username $loginsql"); 
157        //$bdd = mysql_select_db(DB_NAME,$connexion) or die ("Oops, can't find any database named DB_NAME here !");
158
159        foreach($userbase as $user) {
160                $userdata=explode("|", $user);
161
162                $user_ip="127.0.0.1";
163                $user_domain="localhost";
164                $user_browser="server";
165
166                $s=$userdata[4];
167                $user_joindate=substr($s,6,4)."-".substr($s,0,2)."-".substr($s,3,2)." 00:00:00";
168
169                $user_login=addslashes($userdata[0]);
170                $pass1=addslashes($userdata[1]);
171                $user_nickname=addslashes($userdata[0]);
172                $user_email=addslashes($userdata[2]);
173                $user_url=addslashes($userdata[3]);
174                $user_joindate=addslashes($user_joindate);
175
176                $loginID = $wpdb->get_var("SELECT ID FROM $wpdb->users WHERE user_login = '$user_login'");
177                if ($loginID) {
178                        echo "<li>user <i>$user_login</i>... <b>Already exists</b></li>";
179                        $this->gmnames[$userdata[0]] = $loginID;
180                        continue;
181                }
182
183                $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");
184                $user_id = wp_insert_user($user_info);
185                $this->gmnames[$userdata[0]] = $user_id;
186               
187                echo "<li>user <i>$user_login</i>... <b>Done</b></li>";
188
189        }
190
191?></ul><b>Done</b></li>
192<li>importing posts, comments, and karma...<br /><ul><?php
193
194        chdir($archivespath);
195       
196        for($i = 0; $i <= $lastentry; $i = $i + 1) {
197               
198                $entryfile = "";
199               
200                if ($i<10000000) {
201                        $entryfile .= "0";
202                        if ($i<1000000) {
203                                $entryfile .= "0";
204                                if ($i<100000) {
205                                        $entryfile .= "0";
206                                        if ($i<10000) {
207                                                $entryfile .= "0";
208                                                if ($i<1000) {
209                                                        $entryfile .= "0";
210                                                        if ($i<100) {
211                                                                $entryfile .= "0";
212                                                                if ($i<10) {
213                                                                        $entryfile .= "0";
214                }}}}}}}
215
216                $entryfile .= "$i";
217
218                if (is_file($entryfile.".cgi")) {
219
220                        $entry=file($entryfile.".cgi");
221                        echo "<li>entry # $entryfile ";
222                        $postinfo=explode("|",$entry[0]);
223                        $postmaincontent=$this->gm2autobr($entry[2]);
224                        $postmorecontent=$this->gm2autobr($entry[3]);
225
226                        $post_author=trim(addslashes($postinfo[1]));
227                       
228                        // we'll check the author is registered, or if it's a deleted author
229                        $sql = "SELECT * FROM $wpdb->users WHERE user_login = '$post_author'";
230                        $result = mysql_query($sql);
231                        if (!mysql_num_rows($result)) { // if deleted from GM, we register the author as a level 0 user in b2
232                                $user_ip="127.0.0.1";
233                                $user_domain="localhost";
234                                $user_browser="server";
235                                $user_joindate="1979-06-06 00:41:00";
236                                $user_login=addslashes($post_author);
237                                $pass1=addslashes("password");
238                                $user_nickname=addslashes($post_author);
239                                $user_email=addslashes("user@deleted.com");
240                                $user_url=addslashes("");
241                                $user_joindate=addslashes($user_joindate);
242                               
243                                $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");
244                                wp_insert_user($user_info);
245                                echo ": registered deleted user <i>$user_login</i> at level 0 ";
246                        }
247
248                        $sql = "SELECT * FROM $wpdb->users WHERE user_login = '$post_author'";
249                        $result = mysql_query($sql);
250                        $myrow = mysql_fetch_array($result);
251                        $post_author_ID=$myrow[0];
252
253                        $post_title=$this->gm2autobr($postinfo[2]);
254                        echo " : $post_title : by $postinfo[1]";
255                        $post_title=addslashes($post_title);
256
257                        $postyear=$postinfo[6];
258                        $postmonth=zeroise($postinfo[4],2);
259                        $postday=zeroise($postinfo[5],2);
260                        $posthour=zeroise($postinfo[7],2);
261                        $postminute=zeroise($postinfo[8],2);
262                        $postsecond=zeroise($postinfo[9],2);
263
264                        if (($postinfo[10]=="PM") && ($posthour!="12"))
265                                $posthour=$posthour+12;
266
267                        $post_date="$postyear-$postmonth-$postday $posthour:$postminute:$postsecond";
268
269                        $post_content=$postmaincontent;
270                        if (strlen($postmorecontent)>3)
271                                $post_content .= "<!--more--><br /><br />".$postmorecontent;
272                        $post_content=addslashes($post_content);
273
274                        $post_karma=$postinfo[12];
275                       
276                        if (array_key_exists($post_author, $this->gmnames)) {
277                                $post_author = $this->gmnames[$post_author];
278                        } else {
279                                $post_author = '';
280                        }
281
282                        $post_status = 'publish'; //in greymatter, there are no drafts
283                        $comment_status = 'open';
284                        $ping_status = 'closed';
285                       
286                        $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');
287                        $post_id = wp_insert_post($postdata);
288                       
289                        $sql2 = "SELECT * FROM $wpdb->posts ORDER BY ID DESC LIMIT 1";
290                        $result2 = mysql_query($sql2);
291                        $myrow2 = mysql_fetch_array($result2);
292                        $post_ID=$myrow2[0];
293
294                        // Grab a default category.
295                        //$post_category = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories LIMIT 1");
296
297                        // Update the post2cat table.
298                        //$exists = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = $post_ID AND category_id = $post_category");
299                         
300                        //if (!$exists) {
301                        //      wp_create_categories($post_categories, $post_id);
302                        //  $wpdb->query("
303                        //              INSERT INTO $wpdb->post2cat
304                        //              (post_id, category_id)
305                        //              VALUES
306                        //              ($post_ID, $post_category)
307                        //              ");
308                        //}
309
310                        $c=count($entry);
311                        if ($c>4) {
312                                for ($j=4;$j<$c;$j++) {
313                                        $entry[$j]=$this->gm2autobr($entry[$j]);
314                                        $commentinfo=explode("|",$entry[$j]);
315                                        $comment_post_ID=$post_ID;
316                                        $comment_author=addslashes($commentinfo[0]);
317                                        $comment_author_email=addslashes($commentinfo[2]);
318                                        $comment_author_url=addslashes($commentinfo[3]);
319                                        $comment_author_IP=addslashes($commentinfo[1]);
320
321                                        $commentyear=$commentinfo[7];
322                                        $commentmonth=zeroise($commentinfo[5],2);
323                                        $commentday=zeroise($commentinfo[6],2);
324                                        $commenthour=zeroise($commentinfo[8],2);
325                                        $commentminute=zeroise($commentinfo[9],2);
326                                        $commentsecond=zeroise($commentinfo[10],2);
327                                        if (($commentinfo[11]=="PM") && ($commenthour!="12"))
328                                                $commenthour=$commenthour+12;
329                                        $comment_date="$commentyear-$commentmonth-$commentday $commenthour:$commentminute:$commentsecond";
330
331                                        $comment_content=addslashes($commentinfo[12]);
332
333                                        $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email', 'comment_author_IP', 'comment_date', 'comment_content', 'comment_approved');
334                                        $commentdata = wp_filter_comment($commentdata);
335                                        wp_insert_comment($commentdata);
336                                }
337                                $comments=$c-4;
338                                echo ": imported $comments comment";
339                                if ($comments>1)
340                                        echo "s";
341                        }
342                        echo "... <b>Done</b></li>";
343                }
344        } 
345        upgrade_all();
346        ?>
347</ul><b>Done</b></li></ul>
348<p>&nbsp;</p>
349<p>Completed GM 2 b2 import !</p>
350<p>Now you can go and <a href="wp-login.php">log in</a>, have fun !</p>
351<?php
352        }
353
354        function dispatch() {
355                if (empty ($_GET['step']))
356                        $step = 0;
357                else
358                        $step = (int) $_GET['step'];
359
360                switch ($step) {
361                        case 0 :
362                                $this->greet();
363                                break;
364                        case 1:
365                       
366                                $this->import();
367                                break;
368                }
369        }
370
371        function GM_Import() {
372                // Nothing.     
373        }
374}
375
376$gm_import = new GM_Import();
377
378register_importer('greymatter', 'Greymatter', __('Import posts and comments from your Greymatter blog'), array ($gm_import, 'dispatch'));
379?>