WordPress.org

Make WordPress Core

Ticket #2464: greymatter.diff

File greymatter.diff, 12.1 KB (added by bungeman, 14 years ago)

this file should be used instead of the other two, it has about 3 lines difference, mostly adding 'published' status instead of 'draft'.

  • wp-admin/import/greymatter.php

     
     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?>