]> git.mjollnir.org Git - s9y.git/commitdiff
Add lifetype importer
authorgarvinhicking <garvinhicking>
Wed, 28 Nov 2007 14:23:16 +0000 (14:23 +0000)
committergarvinhicking <garvinhicking>
Wed, 28 Nov 2007 14:23:16 +0000 (14:23 +0000)
docs/NEWS
include/admin/importers/lifetype.inc.php [new file with mode: 0644]

index d7aeb6bb621ce29ff29d072b4e4d1689c3926422..b04b5db200bc8c1ed616024942e4c94bba240556 100644 (file)
--- 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 (file)
index 0000000..a011eb9
--- /dev/null
@@ -0,0 +1,306 @@
+<?php # $Id: b2evolution.inc.php 1093 2006-04-13 10:49:52Z garvinhicking $
+# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
+# All rights reserved.  See LICENSE file for licensing details
+
+/*****************************************************************
+ *  lifetype  Importer,   by Garvin Hicking *
+ * ****************************************************************/
+
+class Serendipity_Import_lifetype extends Serendipity_Import {
+    var $info        = array('software' => '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 : */