From: <elm...@us...> - 2007-12-30 13:52:24
|
Revision: 730 http://vbdrupal.svn.sourceforge.net/vbdrupal/?rev=730&view=rev Author: elmuerte Date: 2007-12-30 05:52:28 -0800 (Sun, 30 Dec 2007) Log Message: ----------- new conversion script Modified Paths: -------------- trunk/vbdrupal-ng/conversion/readme.txt Added Paths: ----------- trunk/vbdrupal-ng/conversion/phase1.php trunk/vbdrupal-ng/conversion/phase2.php trunk/vbdrupal-ng/conversion/phase3.php Removed Paths: ------------- trunk/vbdrupal-ng/conversion/drupalimport.php trunk/vbdrupal-ng/conversion/index.php Deleted: trunk/vbdrupal-ng/conversion/drupalimport.php =================================================================== --- trunk/vbdrupal-ng/conversion/drupalimport.php 2007-12-28 15:07:54 UTC (rev 729) +++ trunk/vbdrupal-ng/conversion/drupalimport.php 2007-12-30 13:52:28 UTC (rev 730) @@ -1,679 +0,0 @@ -<?php - -/** - * The second part of the Drupal to vbDrupal conversion - */ - -// $Id$ - -define('FAKE_VERSION', '4.7.3.3'); - -error_reporting(E_ALL & ~E_NOTICE); - -define('THIS_SCRIPT', 'drupalimport'); - -define('IMPORT_IDFIELD', '__vbdr_importid'); - -$phrasegroups = array(); -$specialtemplates = array(); -$globaltemplates = array(); -$actiontemplates = array(); - -require_once('./global.php'); - -function set_title($title) -{ - global $pagetitle; - $pagetitle = $title; -} - -function refresh_page($url, $timeout = 1) -{ - if (is_browser('mozilla')) - { - $metarefresh = "\n<script type=\"text/javascript\">\n"; - $metarefresh .= "myvar = \"\";\ntimeout = " . ($timeout * 10) . "; -function exec_refresh() -{ - timerID = setTimeout(\"exec_refresh();\", 100); - if (timeout > 0) - { timeout -= 1; } - else { clearTimeout(timerID); window.location=\"" . $url . "\"; } -} -exec_refresh();"; - - $metarefresh .= "\n</script>\n"; - } - else - { - $metarefresh = "<meta http-equiv=\"refresh\" content=\"" . $timeout . "; url=" . $url . "\" /> "; - } - global $headinclude; - $headinclude .= $metarefresh; -} - -function page_info_page() -{ - set_title('Drupal to vbDrupal conversion'); - $output = '<h2>Part 2</h2><p>In you have not completed Part 1 you should do that first.</p><p>Complete the following steps to complete the Drupal to vbDrupal conversion.</p>'; - $output .= '<ol>'; - $output .= '<li><a href="?step=preparedb">Prepare database</a></li>'; - $output .= '<li>Set registration defauls (optional)<br />Log in on the vBulletin AdminCP and set the registration defaults under: vBulletin Options > User Registration Options</li>'; - $output .= '<li>Import data.<br />If you do not want to import the forum and threads from Drupal you can simply skip the steps identifier with: <sup>1</sup><ol>'; - $output .= '<li><a href="?step=assocusers">Associate users</a></li>'; - $output .= '<li><a href="?step=importusers">Import users</a></li>'; - $output .= '<li><a href="?step=importforums">Import forums</a> <sup>1</sup></li>'; - $output .= '<li><a href="?step=importthreads">Import threads</a> <sup>1</sup></li>'; - $output .= '<li><a href="?step=importreplies">Import replies</a> <sup>1</sup></li>'; - $output .= '<li><a href="?step=updatedusers">Update Drupal users</a></li>'; - $output .= '</ol></li>'; - $output .= '<li>Update counters<br />Log in on the vBulletin AdminCP and update user, forum, thread and post related counters under "Maintenance > Update Counters".<br />Forum, thread and post details will now show up correctly until you update all the counters. You need to rebuild the search index for the new threads and posts to show up in the search results.</li>'; - $output .= '<li><a href="?step=fixture">Prepare vbDrupal installation</a></li>'; - $output .= '<li><a href="?step=final">Install vbDrupal</a></li>'; - $output .= '</ol>'; - - /* - $output .= '<h3>Cleanup</h3><p>Here are a couple of actions you can use to clean up data created by these update steps in case you want to start over.</p>'; - $output .= '<ul>'; - $output .= '<li><a href="?step=cleanup_users">Drop imported users</li>'; - $output .= '<li><a href="?step=cleanup_forums">Drop imported forums</li>'; - $output .= '<li><a href="?step=cleanup_threads">Drop imported threads and posts</li>'; - $output .= '<li><a href="?step=cleanup_db">Remove import ID fields from the tables</li>'; - $output .= '</ul>'; - */ - return $output; -} - -function page_final() -{ - set_title('Install vbDrupal'); - return '<p>The final step is to install vbDrupal as explained in the README.html file included with the distribution. You should follow the <b>update</b> steps.</p><p>Do not forget to set the <code>$vb_dir</code> variable in the <code>settings.php</code> file. The value should be the system path to the vBulletin directory:<br /><input type="text" value="'.dirname(__FILE__).'" readonly="readonly" size="100" /></p><p><b>Important!</b> delete the <code>drupalimport.php</code> from the vBulletin directory and the <code>conversion</code> directory from the Drupal directory.</p>'; -} - -function page_preparedb() -{ - set_title('Prepare Database'); - $tables = array( - TABLE_PREFIX.'user', - TABLE_PREFIX.'drupal_users', - TABLE_PREFIX.'forum', - TABLE_PREFIX.'thread', - TABLE_PREFIX.'post', - ); - if (isset($_REQUEST['action'])) - { - global $vbulletin; - $vbulletin->db->hide_errors(); - $output .= '<ul>'; - foreach ($tables as $table) - { - $output .= "<li>Updating table: $table</li>"; - $vbulletin->db->query("ALTER TABLE ".$table." ADD ".IMPORT_IDFIELD." INT UNSIGNED NOT NULL;"); - $vbulletin->db->query("ALTER TABLE ".$table." ADD ".IMPORT_IDFIELD."_old INT UNSIGNED NOT NULL;"); - } - $output .= '</ul>'; - $vbulletin->db->show_errors(); - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - return $output; - } - else { - $output = '<p>This will modify the following database and add an "'.IMPORT_IDFIELD.'" field:</p><ul>'; - foreach ($tables as $table) - { - $output .= '<li>'.$table.'</li>'; - } - $output .= '</ul><p>This field will be to store the IDs used in the Drupal tables for the given records.</p><p>This operation might take a while depending on the size of the tables.</p><form action="?" method="post"><input type="hidden" name="step" value="preparedb" /><input type="hidden" name="action" value="execute" /><button type="submit">Prepare the database</button></form>'; - return $output; - } -} - -function set_drupal_user_importid($d_uid, $v_uid) -{ - global $vbulletin; - /* - $user = $vbulletin->db->query_first("SELECT data FROM " . TABLE_PREFIX . "drupal_users WHERE uid = ".$d_uid); - $data = unserialize($user['data']); - if ($v_uid > 0) - { - $data['__vbdr_importid'] = $v_uid; - } - else { - unset($data['__vbdr_importid']); - } - $vbulletin->db->query("UPDATE " . TABLE_PREFIX . "drupal_users SET data = '".$vbulletin->db->escape_string(serialize($data))."' WHERE uid = ".$d_uid); - */ - $vbulletin->db->query("UPDATE " . TABLE_PREFIX . "drupal_users SET ".IMPORT_IDFIELD." = ".$v_uid." WHERE uid = ".$d_uid); -} - -function get_imported_userid($oldid) -{ - global $vbulletin; - static $ids = array(); - if (isset($ids[$oldid])) return $ids[$oldid]; - $forum = $vbulletin->db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE ".IMPORT_IDFIELD." = " . $oldid); - if ($forum == false) - { - // an associated user - $forum = $vbulletin->db->query_first("SELECT userid FROM " . TABLE_PREFIX . "user WHERE userid = ". $oldid ." AND ".IMPORT_IDFIELD." = 0"); - } - $ids[$oldid] = $forum['userid']; - return $ids[$oldid]; -} - -function get_imported_forumid($oldid) -{ - global $vbulletin; - static $ids = array(); - if (isset($ids[$oldid])) return $ids[$oldid]; - $forum = $vbulletin->db->query_first("SELECT forumid FROM " . TABLE_PREFIX . "forum WHERE ".IMPORT_IDFIELD." = " . $oldid); - $ids[$oldid] = $forum['forumid']; - return $ids[$oldid]; -} - -function get_imported_threadid($oldid) -{ - global $vbulletin; - static $ids = array(); - if (isset($ids[$oldid])) return $ids[$oldid]; - $forum = $vbulletin->db->query_first("SELECT threadid FROM " . TABLE_PREFIX . "thread WHERE ".IMPORT_IDFIELD." = " . $oldid); - $ids[$oldid] = $forum['threadid']; - return $ids[$oldid]; -} - -function get_imported_postid($oldid) -{ - global $vbulletin; - static $ids = array(); - if (isset($ids[$oldid])) return $ids[$oldid]; - $forum = $vbulletin->db->query_first("SELECT postid FROM " . TABLE_PREFIX . "post WHERE ".IMPORT_IDFIELD." = " . $oldid); - $ids[$oldid] = $forum['postid']; - return $ids[$oldid]; -} - -function page_assocusers() -{ - set_title('Associate users'); - if (isset($_REQUEST['offset'])) - { - define('SET_SIZE', 50); - global $vbulletin; - - if (is_array($_POST['assocwith'])) - { - foreach ($_POST['assocwith'] as $d_uid => $v_uid) - { - $d_uid = intval($d_uid); - $v_uid = intval(trim($v_uid)); - set_drupal_user_importid($d_uid, $v_uid); - } - } - - $res = $vbulletin->db->query("SELECT * FROM " . TABLE_PREFIX . "drupal_users WHERE NOT uid = 0 ORDER BY uid LIMIT ".intval($_REQUEST['offset']).", ".SET_SIZE); - $output = '<form action="?" method="POST"><input type="hidden" name="step" value="assocusers" /><input type="hidden" name="offset" value="'.(intval($_REQUEST['offset'])+SET_SIZE).'" />'; - if ($vbulletin->db->num_rows($res) > 0) - { - $output .= '<p>Enter the userid of the vBulletin user you want to associate the drupal user with. Some users might have been automatically assigned. Enter an empty field or "0" to not associate a user.</p>'; - $output .= '<p>To find the userid you can either use the vBulletin admincp or use the member listing (check the urls to the profiles for the id).</p>'; - $output .= '<button type="submit">Associate users and go to the next set</button>'; - $output .= '<table border="1"><tr><th></th><th>Drupal user</th><th>Associate with</th></tr>'; - while ($user = $vbulletin->db->fetch_array($res)) - { - $output .= '<tr><td align="right">'.$user['uid'].'</td><td>'.$user['name'].'</td>'; - $uid = ''; - $name = ''; - $preselectid = -1; - - $data = unserialize($user['data']); - if (isset($data['__vbdr_importid'])) $preselectid = intval($data['__vbdr_importid']); - - $found = $vbulletin->db->query_first("SELECT userid, username FROM " . TABLE_PREFIX . "user WHERE LOWER(username) = LOWER('".$vbulletin->db->escape_string($user['name'])."') OR LOWER(email) = LOWER('".$vbulletin->db->escape_string($user['mail'])."') OR userid = ".$preselectid); - if ($found) - { - $uid = $found['userid']; - $name = $found['username']; - if ($preselectid > 0) $name .= ' <i>(previously selected)</i>'; - else $name .= ' <i>(autoassigned)</i>'; - } - - $output .= '<td><input type="text" name="assocwith['.$user['uid'].']" value="'.$uid.'" size="4" /> '.$name.'</td>'; - $output .= '</tr>'; - } - $output .= '</table><button type="submit">Associate users and go to the next set</button></form>'; - } - $output .= '<p>Or <a href="?"><b>Next step</b></a></p>'; - return $output; - } - else { - $output = '<p>This step will let you associate drupal users with existing vBulletin users. If you have a clean vBulletin install you could skip this step. Associated users will, eventually, get the username and the ID of the vBulletin user. It is vital that you associate users with equal names.</p>'; - $output .= '<form action="?" method="POST"><input type="hidden" name="step" value="assocusers" /><input type="hidden" name="offset" value="0" /><button type="submit">Associate users</button></form>'; - $output .= '<p>Or <a href="?"><b>Next step</b></a></p>'; - return $output; - } -} - -function page_importusers() -{ - global $vbulletin; - set_title('Import users'); - if (isset($_REQUEST['offset'])) - { - define('SET_SIZE', 100); - $vbulletin->options['maxuserlength'] = 60; - - $res = $vbulletin->db->query("SELECT * FROM " . TABLE_PREFIX . "drupal_users WHERE NOT uid = 0 ORDER BY uid LIMIT ".intval($_REQUEST['offset']).", ".SET_SIZE); - $output .= '<p>Importing users ...</p><ul>'; - $cnt = $vbulletin->db->num_rows($res); - $errors = 0; - while ($user = $vbulletin->db->fetch_array($res)) - { - //$user['name'] = substr($user['name'], 0, 25); - - $user_data = unserialize($user['data']); - if (isset($user_data['__vbdr_importid'])) continue; - - $output .= '<li>User #'.$user['uid'].': '.$user['name']; - - // add the actual user data - $vbuser =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY); - $vbuser->set_registration_defaults(); - $vbuser->set('username', $user['name']); - $vbuser->set('email', $user['mail']); - $vbuser->set('password', $user['pass']); - $vbuser->set('usertitle', ''); - $vbuser->set('customtitle', 0); - $vbuser->set_info('coppauser', false); - $vbuser->set_bitfield('options', 'coppauser', false); - - if (intval($user['uid']) == 1) - { - $vbuser->set('usergroupid', 6); // admin - } - else if (intval($user['status']) == 0) - { - $vbuser->set('usergroupid', 8); // banned - } - else { - $vbuser->set('usergroupid', 2); // registered - } - $vbuser->set('joindate', $user['created']); - $vbuser->set('lastactivity', $user['access']); - - $vbuserid = $vbuser->save(); - if ($vbuserid > 0) - { - if (intval($user['uid']) == 1) - { - $vbulletin->db->query_write("REPLACE INTO " . TABLE_PREFIX . "administrator (userid, adminpermissions) VALUES (".intval($user['uid']).", " . (array_sum($vbulletin->bf_ugp_adminpermissions)-3) . ")"); - } - $vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET ".IMPORT_IDFIELD." = ".$user['uid']." WHERE userid = ".$vbuserid); - set_drupal_user_importid($user['uid'], $vbuserid); - - } - else { - $output .= '<br /><b>Errors:</b><br />'.implode('<br />'.$vbuser->errors); - $errors++; - } - $output .= '</li>'; - } - $output .= '</ul>'; - - if ($cnt == 0) - { - $output .= '<p>Done!</p>'; - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - } - else { - $output .= '<p><a href="?step=importusers&offset='.intval($_REQUEST['offset']+SET_SIZE).'">Import next '.SET_SIZE.' users</a></p>'; - if ($errors == 0) - { - refresh_page('?step=importusers&offset='.intval($_REQUEST['offset']+SET_SIZE)); - } - } - } - else { - $output = '<p>You are about to import the users registered in Drupal in vBulletin. The user with ID 1 will be made an administrator, all other users will be added to the "Registered Users" user group (gid = 2). Blocked users will be added to "Banned Users" (gid = 8).</p>'; - $res = $vbulletin->db->query_first("SELECT COUNT(*) AS count FROM ".TABLE_PREFIX."drupal_users WHERE NOT uid = 0"); - $output .= '<p>~'.$res['count'].' users will be imported.</p>'; - $output .= '<p><form action="?" method="post"><input type="hidden" name="step" value="importusers" /><input type="hidden" name="offset" value="0" /><button type="submit">Import users</button></p>'; - } - return $output; -} - -function _create_forums($lst) -{ - global $vbulletin; - $output = "<ul>"; - foreach ($lst as $forum_data) - { - $output .= "<li>Creating forum: ".$forum_data['name']; - - $old_forum = $vbulletin->db->query_first("SELECT forumid FROM " . TABLE_PREFIX . "forum WHERE ".IMPORT_IDFIELD." = " . $forum_data['tid']); - if ($old_forum) { - $forum_info = fetch_foruminfo($old_forum['forumid']); - $forum =& datamanager_init('Forum', $vbulletin, ERRTYPE_ARRAY); - $forum->set_existing($forum_info); - $forum->delete(); - unset($forum); - unset($forum_info); - } - - $forum =& datamanager_init('Forum', $vbulletin, ERRTYPE_ARRAY); - $forum->set('title', $forum_data['name']); - $forum->set('description', $forum_data['description']); - $forum->set('displayorder', max(1, $forum_data['weight'])); - if ($forum_data['parent'] > 0) - { - $forum->set('parentid', get_imported_forumid($forum_data['parent'])); - } - else $forum->set('parentid', -1); - $forum->set_bitfield('options', 'indexposts', true); - $forum->set_bitfield('options', 'countposts', true); - $forum->set_bitfield('options', 'allowicons', true); - $forum->set_bitfield('options', 'active', true); - if (count($forum_data['children']) == 0) $forum->set_bitfield('options', 'cancontainthreads', true); - $forum->set_bitfield('options', 'allowposting', true); - $forum->set_bitfield('options', 'showonforumjump', true); - $forum->set_bitfield('options', 'allowbbcode', true); - $forum->set_bitfield('options', 'allowimages', true); - $forum->set_bitfield('options', 'allowsmilies', true); - $forum->set_bitfield('options', 'allowratings', true); - - $forumid = $forum->save(); - if ($forumid > 0) - { - $vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "forum SET ".IMPORT_IDFIELD." = ".$forum_data['tid']." WHERE forumid = ".$forumid); - fetch_foruminfo($forumid, false); - if (isset($forum_data['children'])) - { - $output .= _create_forums($forum_data['children']); - } - } - else { - $output .= '<br /><b>Errors:</b><br />'.implode('<br />'.$forum->errors); - $errors++; - } - $output .= "</li>"; - } - $output .= "</ul>"; - return $output; -} - -function page_importforums() -{ - global $vbulletin; - set_title('Import forums'); - - if (isset($_POST['doimport'])) - { - $drupal_vocab = $vbulletin->db->query_first("SELECT * FROM " . TABLE_PREFIX . "drupal_vocabulary WHERE module = 'forum'"); - $res = $vbulletin->db->query("SELECT * FROM " . TABLE_PREFIX . "drupal_term_data AS data, " . TABLE_PREFIX . "drupal_term_hierarchy AS hierarchy WHERE data.tid = hierarchy.tid AND data.vid = '".$drupal_vocab['vid']."' ORDER BY hierarchy.parent, data.weight"); - - $forums = array(); - $forum_order = array(); - while ($forum = $vbulletin->db->fetch_array($res)) - { - $forums[$forum['tid']] = $forum; - $forums[$forum['parent']]['children'][] =& $forums[$forum['tid']]; - } - - $output .= _create_forums($forums[0]['children']); - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - } - else { - $output = '<p>You are about to import the forums registered in Drupal in vBulletin.</p>'; - $output .= '<p><form action="?" method="post"><input type="hidden" name="step" value="importforums" /><input type="hidden" name="doimport" value="true" /><button type="submit">Import forums</button></p>'; - } - - return $output; -} - -function page_importthreads() -{ - global $vbulletin, $vbphrase; - - set_title('Import threads'); - - if (isset($_REQUEST['offset'])) - { - define('SET_SIZE', 100); - - $res = $vbulletin->db->query("SELECT *, node.uid AS uid FROM " . TABLE_PREFIX . "drupal_node AS node, " . TABLE_PREFIX . "drupal_node_revisions AS revision, " . TABLE_PREFIX . "drupal_term_node AS term_node WHERE node.type = 'forum' AND node.nid = revision.nid AND node.vid = revision.vid AND term_node.nid = node.nid ORDER BY node.nid LIMIT ".intval($_REQUEST['offset']).", ".SET_SIZE); - $output .= '<p>Importing threads ...</p><ul>'; - $cnt = $vbulletin->db->num_rows($res); - $errors = 0; - while ($thread = $vbulletin->db->fetch_array($res)) - { - $output .= '<li>Thread #'.$thread['nid'].': '.$thread['title']; - - $old_thread = $vbulletin->db->query_first("SELECT threadid FROM " . TABLE_PREFIX . "thread WHERE ".IMPORT_IDFIELD." = " . $thread['nid']); - if ($old_thread) { - $vbthread_info = fetch_threadinfo($old_thread['threadid']); - $vbthread =& datamanager_init('Thread', $vbulletin, ERRTYPE_ARRAY, 'threadpost'); - $vbthread->set_existing($old_thread); - $vbthread->delete(); - unset($vbthread); - unset($vbthread_info); - } - - $vbthread =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost'); - $vbthread->set('forumid', get_imported_forumid($thread['tid'])); - $vbthread->set('open', $thread['comment'] == 2); - $vbthread->set('sticky', $thread['sticky']); - $vbthread->set('title', $thread['title']); - if ($thread['uid'] == 0) - { - $vbthread->set('username', $vbphrase['guest']); - } - else { - $vbthread->set('userid', get_imported_userid($thread['uid'])); - } - $vbthread->set('dateline', $thread['created']); - $vbthread->set('visible', $thread['status']); - $vbthread->set('notes', 'Imported from Drupal at '.date("r")); - require_once DIR.'/includes/functions_wysiwyg.php'; - $vbthread->set('pagetext', convert_wysiwyg_html_to_bbcode($thread['body'])); - $vbthread->set('allowsmilie', true); - - $threadid = $vbthread->save(); - if ($threadid > 0) - { - $vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "thread SET ".IMPORT_IDFIELD." = ".$thread['nid']." WHERE threadid = ".$threadid); - build_thread_rating(0, fetch_foruminfo($vbthread->fetch_field('forumid')), $vbthread->thread); - } - else { - $output .= '<br /><b>Errors:</b><br />'.implode('<br />'.$vbthread->errors); - $errors++; - } - $output .= '</li>'; - } - $output .= '</ul>'; - - if ($cnt == 0) - { - $output .= '<p>Done!</p>'; - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - } - else { - $output .= '<p><a href="?step=importthreads&offset='.intval($_REQUEST['offset']+SET_SIZE).'">Import next '.SET_SIZE.' users</a></p>'; - if ($errors == 0) - { - refresh_page('?step=importthreads&offset='.intval($_REQUEST['offset']+SET_SIZE)); - } - } - } - else { - $output = '<p>You are about to import the forum treads from in Drupal in vBulletin.</p>'; - $output .= '<p><form action="?" method="post"><input type="hidden" name="step" value="importthreads" /><input type="hidden" name="offset" value="0" /><button type="submit">Import threads</button></p>'; - } - - return $output; -} - -function page_importreplies() -{ - global $vbulletin, $vbphrase; - - set_title('Import replies'); - - if (isset($_REQUEST['offset'])) - { - define('SET_SIZE', 100); - - $res = $vbulletin->db->query("SELECT comments.* FROM " . TABLE_PREFIX . "drupal_comments AS comments, " . TABLE_PREFIX . "drupal_node AS node WHERE node.type = 'forum' AND node.nid = comments.nid ORDER BY comments.cid LIMIT ".intval($_REQUEST['offset']).", ".SET_SIZE); - $output .= '<p>Importing posts ...</p><ul>'; - $cnt = $vbulletin->db->num_rows($res); - $errors = 0; - while ($post = $vbulletin->db->fetch_array($res)) - { - $output .= '<li>Post #'.$post['cid']; - - $old_post = $vbulletin->db->query_first("SELECT postid FROM " . TABLE_PREFIX . "post WHERE ".IMPORT_IDFIELD." = " . $post['cid']); - if ($old_post) { - $vbpost_info = fetch_postinfo($old_post['postid']); - $vbpost =& datamanager_init('Post', $vbulletin, ERRTYPE_ARRAY, 'threadpost'); - $vbpost->set_existing($vbpost_info); - $vbpost->delete(); - unset($vbpost); - unset($vbpost_info); - } - - $vbpost =& datamanager_init('Post', $vbulletin, ERRTYPE_ARRAY, 'threadpost'); - $vbpost->set('threadid', get_imported_threadid($post['nid'])); - if ($post['uid'] == 0) - { - $vbpost->set('username', isset($post['name'])?$post['name']:$vbphrase['guest']); - } - else { - $vbpost->set('userid', get_imported_userid($post['uid'])); - } - if ($post['pid'] > 0) $vbpost->set('parentid', get_imported_postid($post['pid'])); - $vbpost->set('title', $post['subject']); - $vbpost->set('dateline', $post['timestamp']); - require_once DIR.'/includes/functions_wysiwyg.php'; - $vbpost->set('pagetext', convert_wysiwyg_html_to_bbcode($post['comment'])); - $vbpost->set('allowsmilie', true); - $vbpost->set('visible', $post['subject'] == 0); - - print_r($vbpost->errors); - - $postid = $vbpost->save(); - if ($postid > 0) - { - $vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "post SET ".IMPORT_IDFIELD." = ".$post['cid']." WHERE postid = ".$postid); - } - else { - $output .= '<br /><b>Errors:</b><br />'.implode('<br />'.$vbpost->errors); - $errors++; - } - $output .= '</li>'; - } - $output .= '</ul>'; - - if ($cnt == 0) - { - $output .= '<p>Done!</p>'; - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - } - else { - $output .= '<p><a href="?step=importreplies&offset='.intval($_REQUEST['offset']+SET_SIZE).'">Import next '.SET_SIZE.' users</a></p>'; - if ($errors == 0) - { - refresh_page('?step=importreplies&offset='.intval($_REQUEST['offset']+SET_SIZE)); - } - } - } - else { - $output = '<p>You are about to import the treads replies from in Drupal in vBulletin. In order to prevent import errors it is adviced to reduce the minimum reply length to 1 character.</p>'; - $output .= '<p><form action="?" method="post"><input type="hidden" name="step" value="importreplies" /><input type="hidden" name="offset" value="0" /><button type="submit">Import replies</button></p>'; - } - - return $output; -} - -function page_updatedusers() -{ - set_title('Update Drupal Users'); - return '<p>Go back to the Drupal conversion script (Part 1) and complete the "Update user table" step. This step will update the Drupal user table to match their vBulletin counterparts..</p>'.'<p><a href="?"><b>Next step</b></a></p>'; -} - -function page_fixture() -{ - global $vbulletin, $vbphrase; - - set_title('Prepare vbDrupal installation'); - - $output = '<p>Registering a fake installation of vbDrupal version '.FAKE_VERSION.'.<br />This way the initial installation steps of vbDrupal will be skipped (e.g. database table creation and preparation).</p>'; - $vbulletin->db->query_write("REPLACE INTO " . TABLE_PREFIX . "product (productid, title, description, version, active) VALUES ('drupal', 'vbDrupal', 'dummy product', '".FAKE_VERSION."', 1)"); - - $output .= '<p>Registering vbCode filter format</p>'; - $vbulletin->db->query_write("REPLACE INTO " . TABLE_PREFIX . "drupal_filter_formats (name, roles, cache) VALUES ('vbCode', ',1,2,', 1)"); - $filtid = $vbulletin->db->insert_id(); - $vbulletin->db->query_write("REPLACE INTO " . TABLE_PREFIX . "drupal_filters VALUES (".$filtid.", 'vbcore', 0, 0)"); - - $output .= '<p>Creating additional tables</p>'; - $vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "drupal_vbnodes ( - nid int(10) unsigned NOT NULL default '0', - pid int(10) unsigned NOT NULL default '0', - UNIQUE KEY nid (nid,pid) - )"); - - $vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "drupal_forum_blocks ( - bid tinyint(4) unsigned NOT NULL default '0', - title varchar(64) NOT NULL default '', - info varchar(128) NOT NULL default '', - forumids varchar(64) NOT NULL default '', - options tinytext NOT NULL, - UNIQUE KEY bid (bid) - )"); - - $vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS " . TABLE_PREFIX . "drupal_vbthreads ( - nid int(10) unsigned NOT NULL default '0', - threadid int(10) unsigned NOT NULL default '0', - UNIQUE KEY bid (nid) - )"); - - $output .= '<p>Altering role table to include `vbgroupids` field</p>'; - $vbulletin->db->hide_errors(); - $vbulletin->db->query_write("ALTER TABLE " . TABLE_PREFIX . "drupal_role ADD vbgroupids VARCHAR( 50 ) NOT NULL ;"); - - - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - return $output; -} - -switch ($_REQUEST['step']) { - case 'preparedb': - $HTML = page_preparedb(); - break; - case 'assocusers': - $HTML = page_assocusers(); - break; - case 'importusers': - $HTML = page_importusers(); - break; - case 'importforums': - $HTML = page_importforums(); - break; - case 'importthreads': - $HTML = page_importthreads(); - break; - case 'importreplies': - $HTML = page_importreplies(); - break; - case 'updatedusers': - $HTML = page_updatedusers(); - break; - case 'fixture': - $HTML = page_fixture(); - break; - case 'final': - $HTML = page_final(); - break; - default: - $HTML = page_info_page(); -} - -$navbar = '<br />'; -$HTML = '<h1>'.$pagetitle.'</h1>'.$HTML; - -eval('print_output("' . fetch_template('GENERIC_SHELL') . '");'); Deleted: trunk/vbdrupal-ng/conversion/index.php =================================================================== --- trunk/vbdrupal-ng/conversion/index.php 2007-12-28 15:07:54 UTC (rev 729) +++ trunk/vbdrupal-ng/conversion/index.php 2007-12-30 13:52:28 UTC (rev 730) @@ -1,424 +0,0 @@ -<?php - -/** - * Drupal to vbDrupal conversion script - */ - -// $Id$ - -/** - * Set this to false to disable authentication checking for this script. - */ -$do_auth_check = true; - -// the vBulletin table prefix -define('TABLE_PREFIX', ''); - -//////////////////////// DO NOT EDIT ANYTHING BELOW THIS /////////////////////// - - -chdir('../'); -$_SERVER['SCRIPT_NAME'] = dirname(dirname($_SERVER['SCRIPT_NAME'])).'/'.basename($_SERVER['SCRIPT_NAME']); - -require_once './includes/bootstrap.inc'; -drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); - -$vbtables = array( - 'access', - 'adminhelp', - 'administrator', - 'adminlog', - 'adminutil', - 'announcement', - 'attachment', - 'attachmenttype', - 'attachmentviews', - 'avatar', - 'bbcode', - 'calendar', - 'calendarcustomfield', - 'calendarmoderator', - 'calendarpermission', - 'cpsession', - 'cron', - 'cronlog', - 'customavatar', - 'customprofilepic', - 'datastore', - 'deletionlog', - 'editlog', - 'event', - 'faq', - 'forum', - 'forumread', - 'forumpermission', - 'holiday', - 'icon', - 'imagecategory', - 'imagecategorypermission', - 'language', - 'mailqueue', - 'moderation', - 'moderator', - 'moderatorlog', - 'passwordhistory', - 'paymentapi', - 'paymentinfo', - 'paymenttransaction', - 'phrase', - 'phrasetype', - 'plugin', - 'pm', - 'pmreceipt', - 'pmtext', - 'poll', - 'pollvote', - 'post', - 'post_parsed', - 'posthash', - 'product', - 'productcode', - 'profilefield', - 'ranks', - 'regimage', - 'reminder', - 'reputation', - 'reputationlevel', - 'search', - 'postindex', - 'session', - 'setting', - 'settinggroup', - 'smilie', - 'stats', - 'strikes', - 'style', - 'subscribeevent', - 'subscribeforum', - 'subscribethread', - 'subscription', - 'subscriptionlog', - 'tachyforumpost', - 'tachythreadpost', - 'template', - 'templatehistory', - 'thread', - 'threadrate', - 'threadread', - 'threadviews', - 'upgradelog', - 'user', - 'useractivation', - 'userban', - 'userfield', - 'usergroup', - 'usergroupleader', - 'usergrouprequest', - 'usernote', - 'userpromotion', - 'usertextfield', - 'usertitle', - 'word', -); - -$reqtables = array( - 'comments', - 'node', - 'node_revisions', - 'term_data', - 'term_hierarchy', - 'term_node', - 'users', - 'vocabulary', -); - -define('IMPORT_IDFIELD', '__vbdr_importid'); - -function page_info_page() { - drupal_set_title('vbDrupal import script'); - $output = "<p>This script will aid you in the conversion of your drupal installation to a vbDrupal installation.</p><p>It's best to perform this procedure on a mirror of the site first before performing it on the real site. This way you can catch problems without messing up the real site.</p><p>Please follow the following steps:</p>"; - - $output .= "<h2>Part 1</h2>"; - $output .= "<ol>"; - $output .= "<li>Backup the database<br />Just in case something goes wrong you won't lose all your data.</li>"; - $output .= "<li>Upgrade your Drupal installation to the newest version that matches the vbDrupal version.<br />vbDrupal uses the same versions as Drupal with an extra field at the end for the patch level of vbDrupal. So vbDrupal 4.7.3.3 uses Drupal 4.7.3</li>"; - $output .= "<li>Turn off Drupal by setting it in maintenance mode (<em>admin>settings>site maintenance</em>).</li>"; - $output .= "<li><a href=\"?step=prefix\">Prefix database tables</a></li>"; - $output .= "<li><a href=\"?step=convertcontent\">Convert forum content to HTML</a></li>"; - $output .= "<li>vBulletin<ul>"; - $output .= "<li>Install vBulletin<br />Simply follow the vBulletin installation procedure. When you are done with the whole installation procedure return to this page and continue with the next step.</li>"; - $output .= "<li><b>or</b> If you already have a working vBulletin installation you only have to make sure the Drupal tables are in the same database as the vBulletin tables.</li>"; - $output .= "</ul></li>"; - $output .= "<li><a href=\"?step=vbimport\">Import data in vBulletin</a></li>"; - $output .= "<li><a href=\"?step=updateusers\">Update user table</a><br />Perform this step after you have imported the user data in vBulletin.</li>"; - $output .= "</ol>"; - return $output; -} - -function do_prefix() { - global $vbtables, $reqtables; - - drupal_set_title('Prefix database tables'); - $output = '<p>The tables for vbDrupal always have the prefix: <vbulletin prefix>drupal_</p>'; - $output .= '<p>This step will let you prefix all drupal tables with the correct prefix. If you are going to use a table prefix for vBulletin please enter it below so all tables will be correctly renamed.</p>'; - $output .= '<p>It is strongly adviced to rename all the drupal tables. Some tables must be renamed because of a naming collision with vBulletin or because it is required in further steps of the upgrade process.</p>'; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="performprefix" />'; - $output .= '<label for="vbprefix" title="Enter the prefix you are going to use as the prefix for all vBulletin tables">vBulletin prefix:</label> <input type="text" id="vbprefix" name="vbprefix" value="" />'; - $output .= '<table><tr><th colspan="2">Select the drupal tables</th></tr>'; - $res = db_query("SHOW TABLE STATUS"); - $reqs = 0; - $pfixed = 0; - while ($t = db_fetch_object($res)) { - if (in_array($t->Name, $vbtables)) $reqs++; - if (preg_match("#^drupal_#", $t->Name)) $pfixed++; - $output .= '<tr><td><input type="'.(in_array($t->Name, $vbtables) || in_array($t->Name, $reqtables)?'hidden':'checkbox').'" name="table['.$t->Name.']" id="table-'.$t->Name.'" value="1" checked="checked"/></td><td><label for="table-'.$t->Name.'">'.$t->Name.'</label>'.(in_array($t->Name, $vbtables) || in_array($t->Name, $reqtables)?' <em>(required)</em>':'').'</td></tr>'; - } - $output .= '<tr><td colspan="2"><button type="button" onclick="setChecked(\'checked\');">check all</button><button type="button" onclick="setChecked(\'\');">check none</button></td></tr></table>'; - - $output .= '<script type="text/javascript"> - function setChecked(val) { - lst = document.getElementsByTagName("input"); - for (i = 0; i < lst.length; i++) { - if (lst[i].type == "checkbox") { - if (lst[i].disabled) continue; - lst[i].checked = val; - } - } - } - </script>'; - $output .= '<br /><button type="submit">Set prefix for selected tables</button></form>'; - if ($reqs >= count($vbtables)) { - $output .= '<p><b>Warning:</b> it looks like vbulletin is already installed. It is not adviced to run this step.</p>'; - } - else if ($pfixed > 0) { - $output .= '<p><b>Warning:</b> it looks like the tables have already been prefixed. You should not run this stip more than once.</p>'; - } - $output .= '<p><a href="?">Go back</a></p>'; - return $output; -} - -function prefix_table($name, $oldprefix, $newprefix) { - if (empty($oldprefix)) return $newprefix.$name; - return preg_replace("#^(".preg_quote($oldprefix).")(.*)$#", $newprefix.'\2', $name); -} - -function do_performprefix() { - global $db_prefix; - $old_prefix = $db_prefix; - drupal_set_title('Prefixing database tables'); - $prefix = $_POST['vbprefix'].'drupal_'; - foreach ($_POST['table'] as $table => $val) { - db_query('RENAME TABLE %s TO %s', $table, prefix_table($table, $old_prefix, $prefix)); - } - $db_prefix = $prefix; - $res = db_query('SELECT * FROM {sequences}'); - while ($row = db_fetch_array($res)) { - $found = false; - foreach ($_POST['table'] as $table => $val) { - if (preg_match('#^'.preg_quote($table).'#', $row['name'])) { - $found = true; - break; - } - } - if (!$found) continue; - $newName = prefix_table($row['name'], $old_prefix, $prefix); - db_query('UPDATE {sequences} SET name = "%s" WHERE name = "%s"', $newName, $row['name']); - } - $output .= '<p>All selected tables have been prefixed. You should set the <code>$db_prefix</code> variable in your <code>settings.php</code> to <code>'.$prefix.'</code></p>'; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="checkprefix" /><input type="hidden" name="prefix" value="'.$prefix.'" />'; - $output .= '<button type="submit">Next step</button></form>'; - return $output; -} - -function refresh_page($url, $timeout = 1) -{ - $metarefresh = "<meta http-equiv=\"refresh\" content=\"" . $timeout . "; url=" . $url . "\" /> "; - drupal_set_html_head($metarefresh); -} - -function do_checkprefix() { - global $db_prefix; - drupal_set_title('Prefixing database tables'); - $output = ''; - if ($db_prefix != $_POST['prefix']) { - $output = '<p>Please set the <code>$db_prefix</code> variable in your <code>settings.php</code> to <code>'.$_POST['prefix'].'</code></p>'; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="checkprefix" /><input type="hidden" name="prefix" value="'.$_POST['prefix'].'" />'; - $output .= '<button type="submit">Check again</button></form>'; - } - else { - $output = page_info_page(); - } - return $output; -} - -function do_convertcontent() { - global $db_prefix; - drupal_set_title('Convert forum content to HTML'); - define('SET_SIZE', 100); - - if (isset($_REQUEST['offset']) && ($_REQUEST['phase'] == 1)) { - $res = db_query('SELECT revision.* FROM {node} AS node, {node_revisions} AS revision WHERE node.type = "forum" AND node.nid = revision.nid AND node.vid = revision.vid ORDER BY node.nid LIMIT %d, %d', $_REQUEST['offset'], SET_SIZE); - $output = '<ul>'; - $cnt = db_num_rows($res); - while ($node = db_fetch_array($res)) { - if ($node['log'] == 'converted to html') continue; - $output .= '<li>Node #'.$node['nid'].' revision #'.$node['vid'].'</li>'; - $node['body'] = check_markup($node['body'], $node['format'], FALSE); - $node['log'] = 'converted to html'; - - db_query('UPDATE {node_revisions} SET body = \'%s\', log = \'%s\' WHERE vid = %d', $node['body'], $node['log'], $node['vid']); - } - $output .= '</ul>'; - - if ($cnt == 0) - { - $output .= '<p>Done!</p>'; - $output .= '<p><a href="?step=convertcontent&phase=2&offset=0"><b>Convert comments</b></a></p>'; - } - else { - $output .= '<p><a href="?step=convertcontent&phase=1&offset='.intval($_REQUEST['offset']+SET_SIZE).'">Convert next '.SET_SIZE.' nodes</a></p>'; - refresh_page('?step=convertcontent&phase=1&offset='.intval($_REQUEST['offset']+SET_SIZE)); - } - } - else if (isset($_REQUEST['offset']) && ($_REQUEST['phase'] == 2)) { - $res = db_query('SELECT comments.* FROM {node} AS node, {comments} AS comments WHERE node.type = "forum" AND node.nid = comments.nid ORDER BY node.nid LIMIT %d, %d', $_REQUEST['offset'], SET_SIZE); - $output = '<ul>'; - $cnt = db_num_rows($res); - while ($node = db_fetch_array($res)) { - if ($node['hostname'] == 'converted.to.html') continue; - $output .= '<li>Comment #'.$node['cid'].'</li>'; - $node['comment'] = check_markup($node['comment'], $node['format'], FALSE); - $node['hostname'] = 'converted.to.html'; - - db_query('UPDATE {comments} SET comment = \'%s\', hostname = \'%s\' WHERE cid = %d', $node['comment'], $node['hostname'], $node['cid']); - } - $output .= '</ul>'; - - if ($cnt == 0) - { - $output .= '<p>Done!</p>'; - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - } - else { - $output .= '<p><a href="?step=convertcontent&phase=2&offset='.intval($_REQUEST['offset']+SET_SIZE).'">Convert next '.SET_SIZE.' comments</a></p>'; - refresh_page('?step=convertcontent&phase=2&offset='.intval($_REQUEST['offset']+SET_SIZE)); - } - } - else { - $output = '<p>For proper conversion of the forum threads and post to vbCode markup all forum content must be converted to raw HTML.</p>'; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="convertcontent" /><input type="hidden" name="phase" value="1" /><input type="hidden" name="offset" value="0" />'; - $output .= '<button type="submit">Convert content</button></form>'; - } - return $output; -} - -function do_vbimport() { - drupal_set_title('Import data in vBulletin'); - $output .= '<p>The next couple of steps should be performed through a vBulletin interface.</p>'; - $output .= '<p>Move the file <code>drupalimport.php</code> from the conversion directory to the vBulletin root direction (the directory containing files like <code>showthread.php</code> and <code>newthread.php</code>).</p>'; - $output .= '<p>Now visit this script in your browser and follow the instructions.</p>'; - $output .= '<p><a href="?"><b>Next step</b></a></p>'; - return $output; -} - -function do_updateusers() { - drupal_set_title('Update user table'); - $phase = intval($_REQUEST['phase']); - if ($phase == 1) - { - db_query("CREATE TEMPORARY TABLE {users_temp} SELECT * FROM {users}"); // also copies the data - db_query("UPDATE {users_temp} SET ".IMPORT_IDFIELD."_old = uid, uid = ".IMPORT_IDFIELD.", ".IMPORT_IDFIELD." = 0 WHERE ".IMPORT_IDFIELD." > 0 AND ".IMPORT_IDFIELD." != uid"); - db_query("REPLACE INTO {users} SELECT * FROM {users_temp}"); - $output = "<p>Updated users table</p>"; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="updateusers" /><input type="hidden" name="phase" value="2" /><input type="hidden" name="offset" value="0" />'; - $output .= '<button type="submit">Update other tables</button></form>'; - } - else if ($phase == 2) - { - drupal_set_title('Update user IDs in other tables'); - $output = "<p>DO NOT RELOAD THIS PAGE! It will screw up the existing data since user ids will be rewritten multiple times.</p><ul>"; - $res = db_query("SHOW TABLE STATUS LIKE '{%}'"); - while ($row = db_fetch_object($res)) - { - if (preg_match('#drupal_users$#', $row->Name)) continue; - $res2 = db_query("SHOW COLUMNS FROM %s LIKE 'uid'", $row->Name); - $row2 = db_fetch_object($res2); - if ($row2 /*&& ($row2->Type == 'int(10)')*/) - { - $output .= "<li>Updated ".$row->Name.".uid</li>"; - //var_dump($row); - //var_dump($row2); - //$_time = microtime(true); - db_query("CREATE TEMPORARY TABLE %s_temp SELECT * FROM %s", $row->Name, $row->Name); - db_query("UPDATE %s_temp, {users} SET %s_temp.uid = {users}.uid WHERE %s_temp.uid = {users}.".IMPORT_IDFIELD."_old", $row->Name, $row->Name, $row->Name); - db_query("REPLACE INTO %s SELECT * FROM %s_temp", $row->Name, $row->Name); - //$output .= "<li> ".(microtime(true)-$_time)."</li>"; - } - } - $output .= "</ul>"; - //$output .= '<p><a href="?s"><b>Done!</b></a></p>'; - $output .= '<p><a href="?step=updateusers&phase=3"><b>Next step</b></a></p>'; - refresh_page('?step=updateusers&phase=3'); - } - else if ($phase == 3) - { - drupal_set_title('Importing missing users'); - $res = db_query("SELECT u.* FROM " . TABLE_PREFIX . "user u LEFT JOIN {users} du ON u.userid = du.uid WHERE du.uid IS NULL"); - $output .= db_num_rows($res)." missing users"; - - $output .= "<p>Sorry, not implemented yet. Use the sync_users.php script.</p>"; - } - else { - $output = '<p>In part 2 (the vBulletin part) you may have associated Drupal users with vBulletin users additionally new users have been created in vBulletin that are associated with Drupal users. Because of this the Drupal user tables have to be update. Drupal users and vBulletin users need to share the user ID. Additionally the Drupal users will be updated to get the same name as the vBulletin users. And finally missing vBulletin users will be created in Drupal.</p>'; - $output .= '<form action="?" method="post"><input type="hidden" name="step" value="updateusers" /><input type="hidden" name="phase" value="1" /><input type="hidden" name="offset" value="0" />'; - $output .= '<button type="submit">Update users table</button></form>'; - } - return $output; -} - -$secretfile = 'auth-'.StrToLower(md5(md5($_SERVER['REMOTE_ADDR']).'vbdrupal')).'.txt'; -function do_secret_file() -{ - global $secretfile; - drupal_set_title('Authentication'); - $output = '<p>Please create a file with the following name in the conversion directory:<br /><input value="'.$secretfile.'" readonly="readonly" size="100" /></p>'; - $output .= '<p>This will be used to authenticate you as maintainer of the website. For this to work correctly you <b>must</b> disable the usage of a webproxy.</p>'; - $output .= '<p>Alternatively edit the file <code>conversion/index.php</code> and set <code>$do_auth_check = false;</code></p>'; - return $output; -} - -if (!file_exists(dirname(__FILE__).DIRECTORY_SEPARATOR.$secretfile) || !$do_auth_check) -{ - $_REQUEST['step'] = 'secretfile'; -} - -switch ($_REQUEST['step']) { - case 'prefix': - $output = do_prefix(); - break; - case 'performprefix': - $output = do_performprefix(); - break; - case 'checkprefix': - $output = do_checkprefix(); - break; - case 'impex': - $output = do_impex(); - break; - case 'vbimport': - $output = do_vbimport(); - break; - case 'convertcontent': - $output = do_convertcontent(); - break; - case 'updateusers': - $output = do_updateusers(); - break; - case 'secretfile': - $output = do_secret_file(); - break; - default: - $output = page_info_page(); -} - -print theme('maintenance_page', $output); Added: trunk/vbdrupal-ng/conversion/phase1.php =================================================================== --- trunk/vbdrupal-ng/conversion/phase1.php (rev 0) +++ trunk/vbdrupal-ng/conversion/phase1.php 2007-12-30 13:52:28 UTC (rev 730) @@ -0,0 +1,346 @@ +<?php + +/** + * Drupal to vbDrupal conversion script + */ + +// $Id: index.php,v 1.2 2006/09/11 20:44:02 elmuerte Exp $ + +// Disable authentication check +$do_auth_check = true; + +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// // +// DO NOT CHANGE ANYTHING BELOW THIS // +// // +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +$paths[] = dirname(__FILE__); +$paths[] = dirname(dirname(__FILE__)); +$paths[] = dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'drupal'; + +$found = false; +foreach ($paths as $drupaldir) { + if (file_exists($drupaldir.'/includes/bootstrap.inc')) { + $found = true; + break; + } +} +if (!$found) { + die("Unable to find the vbDrupal base directory. Please move this script to the drupal base directory and run it again."); +} + +chdir($drupaldir); + +$_SERVER['SCRIPT_NAME'] = dirname(dirname($_SERVER['SCRIPT_NAME'])).'/'.basename($_SERVER['SCRIPT_NAME']); + +require_once './includes/bootstrap.inc'; +drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); + +$vbtables = array( + 'access', + 'adminhelp', + 'administrator', + 'adminlog', + 'adminutil', + 'announcement', + 'attachment', + 'attachmenttype', + 'attachmentviews', + 'avatar', + 'bbcode', + 'calendar', + 'calendarcustomfield', + 'calendarmoderator', + 'calendarpermission', + 'cpsession', + 'cron', + 'cronlog', + 'customavatar', + 'customprofilepic', + 'datastore', + 'deletionlog', + 'editlog', + 'event', + 'faq', + 'forum', + 'forumread', + 'forumpermission', + 'holiday', + 'icon', + 'imagecategory', + 'imagecategorypermission', + 'language', + 'mailqueue', + 'moderation', + 'moderator', + 'moderatorlog', + 'passwordhistory', + 'paymentapi', + 'paymentinfo', + 'paymenttransaction', + 'phrase', + 'phrasetype', + 'plugin', + 'pm', + 'pmreceipt', + 'pmtext', + 'poll', + 'pollvote', + 'post', + 'post_parsed', + 'posthash', + 'product', + 'productcode', + 'profilefield', + 'ranks', + 'regimage', + 'reminder', + 'reputation', + 'reputationlevel', + 'search', + 'postindex', + 'session', + 'setting', + 'settinggroup', + 'smilie', + 'stats', + 'strikes', + 'style', + 'subscribeevent', + 'subscribeforum', + 'subscribethread', + 'subscription', + 'subscriptionlog', + 'tachyforumpost', + 'tachythreadpost', + 'template', + 'templatehistory', + 'thread', + 'threadrate', + 'threadread', + 'threadviews', + 'upgradelog', + 'user', + 'useractivation', + 'userban', + 'userfield', + 'usergroup', + 'usergroupleader', + 'usergrouprequest', + 'usernote', + 'userpromotion', + 'usertextfield', + 'usertitle', + 'word', +); + +function page_info_page() { + drupal_set_title('vbDrupal import script'); + $output = "<p>This script will aid you in the conversion of your drupal installation to a vbDrupal installation.</p><p>It's best to perform this procedure on a mirror of the site first before performing it on the real site. This way you can catch problems without messing up the real site.</p><p>Please follow the following steps:</p>"; + + $output .= "<h2>Phase 1</h2>"; + $output .= "<ol>"; + $output .= "<li>Backup the database<br />Just in case something goes wrong you won't lose all your data.</li>"; + $output .= "<li>Upgrade your Drupal installation to the newest version that matches the vbDrupal version.<br />vbDrupal uses the same versions as Drupal with an extra field at the end for the patch level of vbDrupal. So vbDrupal 5.5.1 uses Drupal 5.5</li>"; + $output .= "<li>Turn off Drupal by setting it in maintenance mode (<em>administer > site configuration > site maintenance</em>).</li>"; + $output .= "<li><a href=\"phase1.php?step=prefix\">Prefix database tables</a></li>"; + $output .= "<li><a href=\"phase1.php?step=convertcontent\">Convert forum content to HTML</a></li>"; + $output .= "<li>Install vBulletin<br />Simply follow the vBulletin installation procedure. <br /><b>Note:</b> it is strongly adviced to install vBulletin in UTF8 mode. To do this add the following to the <code>config.php</code> of vBulletin: <code>\$config['Mysqli']['charset'] = 'utf8';</code>.<br />During installation you are asked to set the cookie path and cookie domain, be sure that these settings are correct so that the cookies are also available from the drupal location. <br />At a certain point you will be asked to create the first user, you can enter anything you want because all vBulletin users will be deleted in phase 2. When you are done with the whole installation procedure return to this page and continue with the next step.</li>"; + $output .= "<li><a href=\"phase1.php?step=vbimport\">Import data in vBulletin</a></li>"; + $output .= "</ol>"; + return $output; +} + +function do_prefix() { + global $vbtables; + + drupal_set_title('Prefix database tables'); + $output = '<p>The tables for vbDrupal always have the prefix: <code><vbulletin prefix>drupal_</code></p>'; + $output .= '<p>This step will let you prefix all drupal tables with the correct prefix. If you are going to use a table prefix for vBulletin please enter it below so all tables will be correctly renamed.</p>'; + $output .= '<p>It is strongly adviced to rename all the drupal tables.</p>'; + $output .= '<form action="phase1.php" method="post"><input type="hidden" name="step" value="performprefix" />'; + $output .= '<label for="vbprefix" title="Enter the prefix you are going to use as the prefix for all vBulletin tables">vBulletin prefix:</label> <input type="text" id="vbprefix" name="vbprefix" value="" />'; + $output .= '<table><tr><th colspan="2">Select the drupal tables</th></tr>'; + $res = db_query("SHOW TABLE STATUS"); + $reqs = 0; + $pfixed = 0; + while ($t = db_fetch_object($res)) { + if (in_array($t->Name, $vbtables)) $reqs++; + if (preg_match("#^drupal_#", $t->Name)) $pfixed++; + $output .= '<tr><td><input type="'.(in_array($t->Name, $vbtables)?'hidden':'checkbox').'" name="table['.$t->Name.']" id="table-'.$t->Name.'" value="1" checked="checked"/></td><td><label for="table-'.$t->Name.'">'.$t->Name.'</label>'.(in_array($t->Name, $vbtables)?' <em>(required because of a naming collision with vBulletin)</em>':'').'</td></tr>'; + } + $output .= '<tr><td colspan="2"><button type="button" onclick="setChecked(\'checked\');">check all</button><button type="button" onclick="setChecked(\'\');">check none</button></td></tr></table>'; + + $output .= '<script type="text/javascript"> + function setChecked(val) { + lst = document.getElementsByTagName("input"); + for (i = 0; i < lst.length; i++) { + if (lst[i].type == "checkbox") { + if (lst[i].disabled) continue; + lst[i].checked = val; + } + } + } + </script>'; + $output .= '<br /><button type="submit">Set prefix for selected tables</button></form>'; + if ($reqs >= count($vbtables)) { + $output .= '<p><b>Warning:</b> it looks like vbulletin is already installed. It is not adviced to run this step.</p>'; + } + else if ($pfixed > 0) { + $output .= '<p><b>Warning:</b> it looks like the tables have already been prefixed. You should not run this stip more than once.</p>'; + } + $output .= '<p><a href="phase1.php">Go back</a></p>'; + return $output; +} + +function do_performprefix() { + global $db_prefix; + drupal_set_title('Prefixing database tables'); + $prefix = $_POST['vbprefix'].'drupal_'; + foreach ($_POST['table'] as $table => $val) { + db_query('RENAME TABLE %s TO %s', $table, $prefix.$table); + } + $output .= '<p>All selected tables have been prefixed. You should set the <code>$db_prefix</code> variable in your <code>settings.php</code> to <code>'.$prefix.'</code>. If you do not do this right now you will get errors on the next page.</p>'; + $output .= '<form action="phase1.php" method="post"><input type="hidden" name="step" value="checkprefix" /><input type="hidden" name="prefix" value="'.$prefix.'" />'; + $output .= '<button type="submit">Next step</button></form>'; + $db_prefix = $prefix; + return $output; +} + +function refresh_page($url, $timeout = 1) +{ + $metarefresh = "<meta http-equiv=\"refresh\" content=\"" . $timeout . "; url=" . $url . "\" /> "; + drupal_set_html_head($metarefresh); +} + +function do_checkprefix() { + global $db_prefix; + drupal_set_title('Prefixing database tables'); + $output = ''; + if ($db_prefix != $_POST['prefix']) { + $output = '<p>Please set the <code>$db_prefix</code> variable in your <code>settings.php</code> to <code>'.$_POST['prefix'].'</code></p>'; + $output .= '<form action="phase1.php" method="post"><input type="hidden" name="step" value="checkprefix" /><input type="hidden" name="prefix" value="'.$_POST['prefix'].'" />'; + $output .= '<button type="submit">Check again</button></form>'; + } + else { + $output = page_info_page(); + } + return $output; +} + +function do_convertcontent() { + global $db_prefix; + drupal_set_title('Convert forum content to HTML'); + define('SET_SIZE', 100); + + if (isset($_REQUEST['offset']) && ($_REQUEST['phase'] == 1)) { + $res = db_query('SELECT revision.* FROM {node} AS node, {node_revisions} AS revision WHERE node.type = "forum" AND node.nid = revision.nid AND node.vid = revision.vid ORDER BY node.nid LIMIT %d, %d', $_REQUEST['offset'], SET_SIZE); + $output = '<ul>'; + $cnt = db_num_rows($res); + while ($node = db_fetch_array($res)) { + if ($node['log'] == 'converted to html') continue; + $output .= '<li>Node #'.$node['nid'].' revi... [truncated message content] |