]> git.mjollnir.org Git - s9y.git/commitdiff
Add phpnuke importer
authorgarvinhicking <garvinhicking>
Wed, 6 Feb 2008 14:50:31 +0000 (14:50 +0000)
committergarvinhicking <garvinhicking>
Wed, 6 Feb 2008 14:50:31 +0000 (14:50 +0000)
docs/NEWS
include/admin/importers/nuke.inc.php [new file with mode: 0644]

index fab38df4982ad0e09ecc7ab49a18ce24e1fbc2ea..b9f17b6cda71c48ad14e1d6dfc6491706073f37e 100644 (file)
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,8 @@
 Version 1.3 ()
 ------------------------------------------------------------------------
 
+    * Added phpNuke importer (garvinhicking)
+
     * Add ability to plugins to check uploaded media files for invalid
       file extensions. Added more escaping to user- and groupnames
       for untrusted author environments, thanks to Hanno Boeck.
diff --git a/include/admin/importers/nuke.inc.php b/include/admin/importers/nuke.inc.php
new file mode 100644 (file)
index 0000000..c9c98d3
--- /dev/null
@@ -0,0 +1,319 @@
+<?php # $Id: b2evolution.inc.php 1093 2006-04-13 10:49:52Z garvinhicking $\r
+# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)\r
+# All rights reserved.  See LICENSE file for licensing details\r
+\r
+/*****************************************************************\r
+ *  lifetype  Importer,   by Garvin Hicking *\r
+ * ****************************************************************/\r
+\r
+class Serendipity_Import_nuke extends Serendipity_Import {\r
+    var $info        = array('software' => 'phpNuke');\r
+    var $data        = array();\r
+    var $inputFields = array();\r
+    var $categories  = array();\r
+\r
+    function getImportNotes() {\r
+        return '';\r
+    }\r
+\r
+    function Serendipity_Import_nuke($data) {\r
+        $this->data = $data;\r
+        $this->inputFields = array(array('text' => INSTALL_DBHOST,\r
+                                         'type' => 'input',\r
+                                         'name' => 'host'),\r
+\r
+                                   array('text' => INSTALL_DBUSER,\r
+                                         'type' => 'input',\r
+                                         'name' => 'user'),\r
+\r
+                                   array('text' => INSTALL_DBPASS,\r
+                                         'type' => 'protected',\r
+                                         'name' => 'pass'),\r
+\r
+                                   array('text' => INSTALL_DBNAME,\r
+                                         'type' => 'input',\r
+                                         'name' => 'name'),\r
+\r
+                                   array('text'    => CHARSET,\r
+                                         'type'    => 'list',\r
+                                         'name'    => 'charset',\r
+                                         'value'   => 'UTF-8',\r
+                                         'default' => $this->getCharsets(true)),\r
+\r
+                                   array('text'    => CONVERT_HTMLENTITIES,\r
+                                         'type'    => 'bool',\r
+                                         'name'    => 'use_strtr',\r
+                                         'default' => 'false'),\r
+\r
+                                   array('text'    => ACTIVATE_AUTODISCOVERY,\r
+                                         'type'    => 'bool',\r
+                                         'name'    => 'autodiscovery',\r
+                                         'default' => 'false')\r
+                            );\r
+    }\r
+\r
+    function validateData() {\r
+        return sizeof($this->data);\r
+    }\r
+\r
+    function getInputFields() {\r
+        return $this->inputFields;\r
+    }\r
+\r
+    function import() {\r
+        global $serendipity;\r
+\r
+        // Save this so we can return it to its original value at the end of this method.\r
+        $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false;\r
+\r
+        if ($this->data['autodiscovery'] == 'false') {\r
+            $serendipity['noautodiscovery'] = 1;\r
+        }\r
+\r
+        $this->getTransTable();\r
+\r
+        $users = array();\r
+        $entries = array();\r
+\r
+        if (!extension_loaded('mysql')) {\r
+            return MYSQL_REQUIRED;\r
+        }\r
+\r
+        $nukedb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']);\r
+        if (!$nukedb) {\r
+            return sprintf(COULDNT_CONNECT, $this->data['host']);\r
+        }\r
+\r
+        if (!@mysql_select_db($this->data['name'])) {\r
+            return sprintf(COULDNT_SELECT_DB, mysql_error($nukedb));\r
+        }\r
+\r
+        /* Users: Authors */\r
+        $res = @$this->nativeQuery("SELECT\r
+                                            aid         AS user_login,\r
+                                            `pwd`       AS user_pass,\r
+                                            email       AS user_email,\r
+                                            name        AS user_name,\r
+                                            radminsuper AS user_level,\r
+                                            aid         AS ID\r
+                                       FROM nuke_authors", $nukedb);\r
+        if (!$res) {\r
+            return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($nukedb));\r
+        }\r
+\r
+        for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) {\r
+            $users[$x] = mysql_fetch_assoc($res);\r
+\r
+            $data = array('right_publish' => true,\r
+                          'realname'      => $users[$x]['user_name'],\r
+                          'username'      => $users[$x]['user_login'],\r
+                          'userlevel'     => ($users[$x]['user_level'] > 0 ? USERLEVEL_ADMIN : USERLEVEL_EDITOR),\r
+                          'email'         => $users[$x]['user_email'],\r
+                          'password'      => md5($users[$x]['user_pass']));\r
+\r
+            if ($serendipity['serendipityUserlevel'] < $data['userlevel']) {\r
+                $data['userlevel'] = $serendipity['serendipityUserlevel'];\r
+            }\r
+\r
+            serendipity_db_insert('authors', $this->strtrRecursive($data));\r
+            $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid');\r
+        }\r
+\r
+        /* Users: Users */\r
+        $res = @$this->nativeQuery("SELECT\r
+                                            u.uname      AS user_login,\r
+                                            u.pass       AS user_pass,\r
+                                            u.email      AS user_email,\r
+                                            u.name       AS user_name,\r
+                                            s.user_level AS user_level,\r
+                                            uname        AS ID\r
+                                       FROM nuke_users AS u\r
+                                       JOIN nuke_users_status AS s\r
+                                         ON u.uid = s.user_id\r
+                                       ", $nukedb);\r
+        if (!$res) {\r
+            return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($nukedb));\r
+        }\r
+\r
+        for ($x=$x, $max_x = $x + mysql_num_rows($res); $x < $max_x ; $x++ ) {\r
+            $users[$x] = mysql_fetch_assoc($res);\r
+            if (empty($users[$x]['user_name'])) {\r
+                $users[$x]['user_name'] = $users[$x]['user_login'];\r
+            }\r
+\r
+            $data = array('right_publish' => true,\r
+                          'realname'      => $users[$x]['user_name'],\r
+                          'username'      => $users[$x]['user_login'],\r
+                          'userlevel'     => ($users[$x]['user_level'] > 1 ? USERLEVEL_ADMIN : USERLEVEL_EDITOR),\r
+                          'email'         => $users[$x]['user_email'],\r
+                          'password'      => md5($users[$x]['user_pass']));\r
+\r
+            if ($serendipity['serendipityUserlevel'] < $data['userlevel']) {\r
+                $data['userlevel'] = $serendipity['serendipityUserlevel'];\r
+            }\r
+\r
+            serendipity_db_insert('authors', $this->strtrRecursive($data));\r
+            $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid');\r
+        }\r
+\r
+        /* Categories */\r
+        if (!$this->importCategories($nukedb)) {\r
+            return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($nukedb));\r
+        }\r
+        serendipity_rebuildCategoryTree();\r
+\r
+        /* Entries */\r
+        $res = @$this->nativeQuery("SELECT\r
+                                           sid                    AS ID,\r
+                                           UNIX_TIMESTAMP(`time`) AS tstamp,\r
+                                           aid                    AS post_author,\r
+                                           informant              AS informant,\r
+                                           \r
+                                           title                  AS post_title,\r
+                                           hometext               AS post_content,\r
+                                           bodytext               AS extended\r
+                                      FROM nuke_stories", $nukedb);\r
+        if (!$res) {\r
+            return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($nukedb));\r
+        }\r
+\r
+        for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) {\r
+            $entries[$x] = mysql_fetch_assoc($res);\r
+            \r
+            if (!empty($entries[$x]['informant'])) {\r
+                $entries[$x]['post_author'] = $entries[$x]['informant'];\r
+            }\r
+\r
+            $entry = array('title'          => $this->decode($entries[$x]['post_title']),\r
+                           'isdraft'        => 'false',\r
+                           'allow_comments' => 'true',\r
+                           'timestamp'      => $entries[$x]['tstamp'],\r
+                           'body'           => $this->strtr($entries[$x]['post_content']),\r
+                           'extended'       => $this->strtr($entries[$x]['extended']),\r
+                           );\r
+\r
+            $entry['authorid'] = '';\r
+            $entry['author']   = '';\r
+            foreach ($users as $user) {\r
+                if ($user['ID'] == $entries[$x]['post_author']) {\r
+                    $entry['authorid'] = $user['authorid'];\r
+                    $entry['author']   = $user['user_login'];\r
+                    break;\r
+                }\r
+            }\r
+\r
+            if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) {\r
+                return $entries[$x]['entryid'];\r
+            }\r
+        }\r
+\r
+        /* Even more category stuff */\r
+        $res = @$this->nativeQuery("SELECT sid AS postcat_post_ID,\r
+                                           topic AS postcat_cat_ID\r
+                                      FROM nuke_stories", $nukedb);\r
+        if (!$res) {\r
+            return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($nukedb));\r
+        }\r
+\r
+        for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) {\r
+            $entrycat = mysql_fetch_assoc($res);\r
+\r
+            $entryid = 0;\r
+            $categoryid = 0;\r
+            foreach($entries AS $entry) {\r
+                if ($entry['ID'] == $entrycat['postcat_post_ID']) {\r
+                    $entryid = $entry['entryid'];\r
+                    break;\r
+                }\r
+            }\r
+\r
+            foreach($this->categories AS $category) {\r
+                if ($category['cat_ID'] == $entrycat['postcat_cat_ID']) {\r
+                    $categoryid = $category['categoryid'];\r
+                }\r
+            }\r
+\r
+            if ($entryid > 0 && $categoryid > 0) {\r
+                $data = array('entryid'    => $entryid,\r
+                              'categoryid' => $categoryid);\r
+                serendipity_db_insert('entrycat', $this->strtrRecursive($data));\r
+            }\r
+        }\r
+\r
+        /* Comments */\r
+        $res = @$this->nativeQuery("SELECT sid AS comment_post_ID,\r
+                                           subject AS title,\r
+                                           comment AS comment_content,\r
+                                           email AS comment_author_email,\r
+                                           url AS comment_author_url,\r
+                                           name AS comment_author,\r
+                                           UNIX_TIMESTAMP(`date`) AS tstamp\r
+                                      FROM nuke_comments", $nukedb);\r
+        if (!$res) {\r
+            return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($nukedb));\r
+        }\r
+\r
+        while ($a = mysql_fetch_assoc($res)) {\r
+            foreach ($entries as $entry) {\r
+                if ($entry['ID'] == $a['comment_post_ID'] ) {\r
+                    $author = $a['comment_author'];\r
+                    $mail = $a['comment_author_email'];\r
+                    $url = $a['comment_author_url'];\r
+\r
+                    $comment = array('entry_id ' => $entry['entryid'],\r
+                                     'parent_id' => 0,\r
+                                     'timestamp' => $a['tstamp'],\r
+                                     'author'    => $author,\r
+                                     'email'     => $mail,\r
+                                     'url'       => $url,\r
+                                     'title'     => $a['title'],\r
+                                     'ip'        => '',\r
+                                     'status'    => 'approved',\r
+                                     'body'      => $a['comment_content'],\r
+                                     'subscribed'=> 'false',\r
+                                     'type'      => 'NORMAL');\r
+\r
+                    serendipity_db_insert('comments', $this->strtrRecursive($comment));\r
+                    $cid = serendipity_db_insert_id('comments', 'id');\r
+                    serendipity_approveComment($cid, $entry['entryid'], true);\r
+                }\r
+            }\r
+        }\r
+\r
+        $serendipity['noautodiscovery'] = $noautodiscovery;\r
+\r
+        // That was fun.\r
+        return true;\r
+    }\r
+\r
+    function importCategories($nukedb) {\r
+        $res = $this->nativeQuery("SELECT topicname   AS cat_name,\r
+                                          topictext   AS cat_description,\r
+                                          topicid     AS cat_ID\r
+                                     FROM nuke_topics", $nukedb);\r
+        if (!$res) {\r
+            echo mysql_error();\r
+            return false;\r
+        }\r
+\r
+        // Get all the info we need\r
+        for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) {\r
+            $row = mysql_fetch_assoc($res);\r
+            $cat = array('category_name'        => $row['cat_name'],\r
+                         'category_description' => $row['cat_description'],\r
+                         'parentid'             => 0,\r
+                         'category_left'        => 0,\r
+                         'category_right'       => 0);\r
+\r
+            serendipity_db_insert('category', $this->strtrRecursive($cat));\r
+            $row['categoryid']  = serendipity_db_insert_id('category', 'categoryid');\r
+            $this->categories[] = $row;\r
+        }\r
+\r
+        return true;\r
+    }\r
+}\r
+\r
+return 'Serendipity_Import_nuke';\r
+\r
+/* vim: set sts=4 ts=4 expandtab : */\r