5 var $gmnames = array ();
8 echo '<div class="wrap">';
9 echo '<h2>'.__('Import GreyMatter').'</h2>';
19 <p><?php _e('This is a basic GreyMatter to WordPress import script.') ?></p>
20 <p><?php _e('What it does:') ?></p>
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>
26 <p><?php _e('What it does not:') ?></p>
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>
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">
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>
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>
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>
52 <td><?php _e("Last entry's number:") ?></td>
53 <td><input type="text" name="lastentry" value="00000001" /></td>
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>
66 function gm2autobr($string) { // transforms GM's |*| into b2's <br />\n
67 $string = str_replace("|*|","<br />\n",$string);
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"])) {
82 $$wpvar = $_GET["$wpvar"];
85 $$wpvar = $_POST["$wpvar"];
90 if (!chdir($archivespath))
91 wp_die(__("Wrong path, the path to the GM entries does not exist on the server"));
94 wp_die(__("Wrong path, the path to the GM files does not exist on the server"));
96 $lastentry = (int) $lastentry;
100 <p><?php _e('The importer is running...') ?></p>
102 <li><?php _e('importing users...') ?><ul><?php
105 $userbase = file("gm-authors.cgi");
107 foreach($userbase as $user) {
108 $userdata=explode("|", $user);
110 $user_ip="127.0.0.1";
111 $user_domain="localhost";
112 $user_browser="server";
115 $user_joindate=substr($s,6,4)."-".substr($s,0,2)."-".substr($s,3,2)." 00:00:00";
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);
124 $user_id = username_exists($user_login);
126 printf('<li>'.__('user %s').'<strong>'.__('Already exists').'</strong></li>', "<em>$user_login</em>");
127 $this->gmnames[$userdata[0]] = $user_id;
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;
135 printf('<li>'.__('user %s...').' <strong>'.__('Done').'</strong></li>', "<em>$user_login</em>");
138 ?></ul><strong><?php _e('Done') ?></strong></li>
139 <li><?php _e('importing posts, comments, and karma...') ?><br /><ul><?php
141 chdir($archivespath);
143 for($i = 0; $i <= $lastentry; $i = $i + 1) {
165 if (is_file($entryfile.".cgi")) {
167 $entry=file($entryfile.".cgi");
168 $postinfo=explode("|",$entry[0]);
169 $postmaincontent=$this->gm2autobr($entry[2]);
170 $postmorecontent=$this->gm2autobr($entry[3]);
172 $post_author=trim($wpdb->escape($postinfo[1]));
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);
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);
185 if (($postinfo[10]=="PM") && ($posthour!="12"))
186 $posthour=$posthour+12;
188 $post_date="$postyear-$postmonth-$postday $posthour:$postminute:$postsecond";
190 $post_content=$postmaincontent;
191 if (strlen($postmorecontent)>3)
192 $post_content .= "<!--more--><br /><br />".$postmorecontent;
193 $post_content=$wpdb->escape($post_content);
195 $post_karma=$postinfo[12];
197 $post_status = 'publish'; //in greymatter, there are no drafts
198 $comment_status = 'open';
199 $ping_status = 'closed';
201 if ($post_ID = post_exists($post_title, '', $post_date)) {
203 _e('(already exists)');
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);
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;
225 printf(__('registered deleted user %s at level 0 '), "<em>$user_login</em>");
228 if (array_key_exists($postinfo[1], $this->gmnames)) {
229 $post_author = $this->gmnames[$postinfo[1]];
231 $post_author = $user_id;
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 ) )
242 $numAddedComments = 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]);
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";
263 $comment_content=$wpdb->escape($commentinfo[12]);
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);
273 if ($numAddedComments > 0) {
275 printf(__('imported %d comment(s)'), $numAddedComments);
277 $preExisting = $numComments - numAddedComments;
278 if ($preExisting > 0) {
280 printf(__('ignored %d pre-existing comments'), $preExisting);
283 echo '... <strong>'.__('Done').'</strong></li>';
287 </ul><strong><?php _e('Done') ?></strong></li></ul>
289 <p><?php _e('Completed GreyMatter import!') ?></p>
295 function dispatch() {
296 if (empty ($_GET['step']))
299 $step = (int) $_GET['step'];
306 check_admin_referer('import-greymatter');
307 $result = $this->import();
308 if ( is_wp_error( $result ) )
309 echo $result->get_error_message();
314 function GM_Import() {
319 $gm_import = new GM_Import();
321 register_importer('greymatter', __('GreyMatter'), __('Import users, posts, and comments from a Greymatter blog'), array ($gm_import, 'dispatch'));