WordPress.org

Make WordPress Core

Ticket #2464: greymatter.3.diff

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

really, last time, replaced addslashes with $wpdb->escape

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