From: garvinhicking Date: Wed, 28 Nov 2007 14:23:16 +0000 (+0000) Subject: Add lifetype importer X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=f9a7da8825fc5e4f3575f545a9bafad16b1409f4;p=s9y.git Add lifetype importer --- diff --git a/docs/NEWS b/docs/NEWS index d7aeb6b..b04b5db 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,6 +3,8 @@ Version 1.3 () ------------------------------------------------------------------------ + * Added LifeType importer (garvinhicking) + * Updated Textile library to 2.0, by Lars Strojny * Allow the "send mail" plugin to send mails to all registered diff --git a/include/admin/importers/lifetype.inc.php b/include/admin/importers/lifetype.inc.php new file mode 100644 index 0000000..a011eb9 --- /dev/null +++ b/include/admin/importers/lifetype.inc.php @@ -0,0 +1,306 @@ + 'lifetype'); + var $data = array(); + var $inputFields = array(); + var $categories = array(); + + function getImportNotes() { + return ''; + } + + function Serendipity_Import_lifetype($data) { + $this->data = $data; + $this->inputFields = array(array('text' => INSTALL_DBHOST, + 'type' => 'input', + 'name' => 'host'), + + array('text' => INSTALL_DBUSER, + 'type' => 'input', + 'name' => 'user'), + + array('text' => INSTALL_DBPASS, + 'type' => 'protected', + 'name' => 'pass'), + + array('text' => INSTALL_DBNAME, + 'type' => 'input', + 'name' => 'name'), + + array('text' => CHARSET, + 'type' => 'list', + 'name' => 'charset', + 'value' => 'UTF-8', + 'default' => $this->getCharsets(true)), + + array('text' => CONVERT_HTMLENTITIES, + 'type' => 'bool', + 'name' => 'use_strtr', + 'default' => 'false'), + + array('text' => ACTIVATE_AUTODISCOVERY, + 'type' => 'bool', + 'name' => 'autodiscovery', + 'default' => 'false') + ); + } + + function validateData() { + return sizeof($this->data); + } + + function getInputFields() { + return $this->inputFields; + } + + function import() { + global $serendipity; + + // Save this so we can return it to its original value at the end of this method. + $noautodiscovery = isset($serendipity['noautodiscovery']) ? $serendipity['noautodiscovery'] : false; + + if ($this->data['autodiscovery'] == 'false') { + $serendipity['noautodiscovery'] = 1; + } + + $this->getTransTable(); + + $users = array(); + $entries = array(); + + if (!extension_loaded('mysql')) { + return MYSQL_REQUIRED; + } + + $ltdb = @mysql_connect($this->data['host'], $this->data['user'], $this->data['pass']); + if (!$ltdb) { + return sprintf(COULDNT_CONNECT, $this->data['host']); + } + + if (!@mysql_select_db($this->data['name'])) { + return sprintf(COULDNT_SELECT_DB, mysql_error($ltdb)); + } + + /* Users */ + $res = @$this->nativeQuery("SELECT + user AS user_login, + `password` AS user_pass, + email AS user_email, + full_name AS user_name, + site_admin AS user_level, + id AS ID + FROM lt_users", $ltdb); + if (!$res) { + return sprintf(COULDNT_SELECT_USER_INFO, mysql_error($ltdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res); $x < $max_x ; $x++ ) { + $users[$x] = mysql_fetch_assoc($res); + + $data = array('right_publish' => true, + 'realname' => $users[$x]['user_name'], + 'username' => $users[$x]['user_login'], + 'userlevel' => ($users[$x]['user_level'] > 0 ? USERLEVEL_ADMIN : USERLEVEL_EDITOR), + 'email' => $users[$x]['user_email'], + 'password' => $users[$x]['user_pass']); // MD5 compatible + + if ($serendipity['serendipityUserlevel'] < $data['userlevel']) { + $data['userlevel'] = $serendipity['serendipityUserlevel']; + } + + serendipity_db_insert('authors', $this->strtrRecursive($data)); + $users[$x]['authorid'] = serendipity_db_insert_id('authors', 'authorid'); + } + + /* Categories */ + if (!$this->importCategories(null, 0, $ltdb)) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($ltdb)); + } + serendipity_rebuildCategoryTree(); + + /* Entries */ + $res = @$this->nativeQuery("SELECT + article_id AS ID, + UNIX_TIMESTAMP(`date`) AS tstamp, + user_id AS post_author, + status AS post_status, + text AS post_content, + topic AS post_title + FROM lt_articles + JOIN lt_articles_text + ON lt_articles_text.article_id = lt_articles.id + ORDER BY ID;", $ltdb); + if (!$res) { + return sprintf(COULDNT_SELECT_ENTRY_INFO, mysql_error($ltdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entries[$x] = mysql_fetch_assoc($res); + + $entry = array('title' => $this->decode($entries[$x]['post_title']), + 'isdraft' => ($entries[$x]['post_status'] == '1') ? 'false' : 'true', + 'allow_comments' => 'true', + 'timestamp' => $entries[$x]['tstamp'], + 'body' => $this->strtr($entries[$x]['post_content'])); + + $entry['authorid'] = ''; + $entry['author'] = ''; + foreach ($users as $user) { + if ($user['ID'] == $entries[$x]['post_author']) { + $entry['authorid'] = $user['authorid']; + $entry['author'] = $user['user_login']; + break; + } + } + + if (!is_int($entries[$x]['entryid'] = serendipity_updertEntry($entry))) { + return $entries[$x]['entryid']; + } + } + + /* Even more category stuff */ + $res = @$this->nativeQuery("SELECT article_id AS postcat_post_ID, + category_id AS postcat_cat_ID + FROM lt_article_categories_link", $ltdb); + if (!$res) { + return sprintf(COULDNT_SELECT_CATEGORY_INFO, mysql_error($ltdb)); + } + + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++ ) { + $entrycat = mysql_fetch_assoc($res); + + $entryid = 0; + $categoryid = 0; + foreach($entries AS $entry) { + if ($entry['ID'] == $entrycat['postcat_post_ID']) { + $entryid = $entry['entryid']; + break; + } + } + + foreach($this->categories AS $category) { + if ($category['cat_ID'] == $entrycat['postcat_cat_ID']) { + $categoryid = $category['categoryid']; + } + } + + if ($entryid > 0 && $categoryid > 0) { + $data = array('entryid' => $entryid, + 'categoryid' => $categoryid); + serendipity_db_insert('entrycat', $this->strtrRecursive($data)); + } + } + + /* Comments */ + $res = @$this->nativeQuery("SELECT article_id AS comment_post_ID, + topic AS title, + text AS comment_content, + user_email AS comment_author_email, + user_url AS comment_author_url, + user_name AS comment_author, + user_id AS comment_author_ID, + UNIX_TIMESTAMP(`date`) AS tstamp, + client_ip AS comment_author_IP, + status AS comment_status + FROM lt_articles_comments;", $ltdb); + if (!$res) { + return sprintf(COULDNT_SELECT_COMMENT_INFO, mysql_error($ltdb)); + } + + while ($a = mysql_fetch_assoc($res)) { + foreach ($entries as $entry) { + if ($entry['ID'] == $a['comment_post_ID'] ) { + $author = ''; + $mail = ''; + $url = ''; + if (!empty($a['comment_author_ID']) && $a['comment_author_ID'] > 0) { + foreach($users AS $user) { + if ($user['ID'] == $a['comment_author_ID']) { + $author = $user['user_login']; + $mail = $user['user_email']; + $url = $user['user_url']; + break; + } + } + } + + if (empty($author) && empty($mail)) { + $author = $a['comment_author']; + $mail = $a['comment_author_email']; + $url = $a['comment_author_url']; + } + + $comment = array('entry_id ' => $entry['entryid'], + 'parent_id' => 0, + 'timestamp' => $a['tstamp'], + 'author' => $author, + 'email' => $mail, + 'url' => $url, + 'title' => $a['title'], + 'ip' => $a['comment_author_IP'], + 'status' => ($a['comment_status'] == '1' ? 'pending' : 'approved'), + 'body' => $a['comment_content'], + 'subscribed'=> 'false', + 'type' => 'NORMAL'); + + serendipity_db_insert('comments', $this->strtrRecursive($comment)); + if ($a['comment_status'] != '1') { + $cid = serendipity_db_insert_id('comments', 'id'); + serendipity_approveComment($cid, $entry['entryid'], true); + } + } + } + } + + $serendipity['noautodiscovery'] = $noautodiscovery; + + // That was fun. + return true; + } + + function importCategories($parentid = 0, $new_parentid = 0, $ltdb) { + if (is_null($parentid)) { + $where = 'WHERE parent_id = 0'; + } else { + $where = "WHERE parent_id = '" . mysql_escape_string($parentid) . "'"; + } + + $res = $this->nativeQuery("SELECT name AS cat_name, + description AS cat_description, + id AS cat_ID + FROM lt_articles_categories + " . $where, $ltdb); + if (!$res) { + echo mysql_error(); + return false; + } + + // Get all the info we need + for ($x=0, $max_x = mysql_num_rows($res) ; $x < $max_x ; $x++) { + $row = mysql_fetch_assoc($res); + $cat = array('category_name' => $row['cat_name'], + 'category_description' => $row['cat_description'], + 'parentid' => (int)$new_parentid, + 'category_left' => 0, + 'category_right' => 0); + + serendipity_db_insert('category', $this->strtrRecursive($cat)); + $row['categoryid'] = serendipity_db_insert_id('category', 'categoryid'); + $this->categories[] = $row; + $this->importCategories($row['cat_ID'], $row['categoryid'], $ltdb); + } + + return true; + } +} + +return 'Serendipity_Import_lifetype'; + +/* vim: set sts=4 ts=4 expandtab : */