--- /dev/null
+<?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