Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
<?php
/*
* dcforumintegration.module
* From: DCForum+ User Accounts and Forum
* To Drupal forum and flatforum module.
* Passwords are migrated by modifying user.module
* Remember to search and replace "$my_dcf_dbase" with the name of the dcforum+ mysql database.
*/
function dcforumintegration_menu($may_cache)
{
global $user;
$items = array();
$admin_access = user_access('administer site configuration');
$items[] = array('path' => 'dcf', 'title' => t('migrate dcf'),
'callback' => 'actions', 'access' => $admin_access);
$items[] = array('path' => 'dcf/users', 'title' => t('migrate dcf users'),
'callback' => 'actions', 'access' => $admin_access);
$items[] = array('path' => 'dcf/forums', 'title' => t('migrate dcf forums'),
'callback' => 'actions', 'access' => $admin_access, weight=> '1');
return $items;
}
//------------HELPER FUNCTIONS------------------//
function actions()
{
switch(arg(1))
{
case 'users':
$output = migrate_users();
break;
case 'forums':
{
if(arg(2) == "toplevel")
{
$output = migrate_containers();
$output.= migrate_forums();
}
else if(arg(2) == "undotoplevel")
{
$output = unmigrate_containers();
$output.= unmigrate_forums();
}
else if(arg(2) == "topposts")
$output = migrate_topposts();
else if(arg(2) == "undotopposts")
$output = unmigrate_topposts();
}
break;
default:
$output = "<li>".l('Migrate Users', 'dcf/users')."</li><br/><b>Note that all users except the root user will be deleted from the database</b>";
$output .= "<li>".l('Migrate Forums', 'dcf/forums')."</li><br/><b>Perform the following in order
<br/>Remember to augment the node, comment tables with the two fields from $my_dcf_dbase</b>";
$output .= "<ul><li>".l('Migrate Top Level Forums', 'dcf/forums/toplevel')." [".l('Undo', 'dcf/forums/undotoplevel')."]</li>";
$output .= "<ul><li>".l('Migrate Top Level Posts + comments/responses)', 'dcf/forums/topposts')." [".l('Undo', 'dcf/forums/undotopposts')."]</li>";
break;
}
print theme('page',$output);
}
function migrate_users()
{
# Step 1: Migrate Users
db_query("DELETE FROM {users} WHERE uid!=1");
db_query("INSERT INTO {users} (uid) VALUES(0);");
db_query('INSERT INTO {users} (uid, name, pass, mail, signature, mode, status, init, data, created, changed) SELECT id, username, password, email, pk, 0, 1, email, "N;", reg_date, last_date FROM $my_dcf_dbase.dcuser WHERE id!=1;');
db_query("DELETE FROM {users_roles};");
db_query("INSERT INTO {users_roles}(uid, rid) VALUES(0, 1);");
db_query("INSERT INTO {users_roles}(uid, rid) VALUES(1, 2);");
db_query("INSERT INTO {users_roles} (uid, rid) SELECT uid, 2 FROM {users} WHERE uid != 1 AND uid !=0;");
# Set the user sequence!
db_next_id("user");
watchdog('dcfmigration', "All users deleted, populated with dcuser entries", 1);
return "All users deleted, populated with dcuser entries".l('View Imported Users', 'admin/user');
}
function migrate_containers()
{
# number of vocabulary groups I already have
$numvocgroups = db_fetch_object(db_query("SELECT id FROM {sequences} WHERE name = 'vocabulary_vid'"));
$numvocgroups = $numvocgroups->id;
# Step 3: Migrate toplevel containers
# Remember to clear forum* variables from the variables table
db_query("DELETE FROM {variable} WHERE name LIKE 'forum%'");
db_query("INSERT INTO {term_data} (tid, vid, name, description, weight)
SELECT id, %d, name, description, forum_order FROM $my_dcf_dbase.dcforum WHERE parent_id='0';",$numvocgroups );
$res = db_query("SELECT id FROM $my_dcf_dbase.dcforum WHERE parent_id='0'");
#Make them containers
$containers = variable_get('forum_containers', array());
while($tid = db_fetch_object($res))
{
$containers[] = $tid->id;
}
variable_set('forum_containers', $containers);
db_query("INSERT INTO {term_hierarchy} (tid, parent)
SELECT tid, 0 FROM {term_data;}");
db_query("REPLACE INTO {sequences} (id, name) SELECT max(tid), 'term_data_tid' FROM {term_data}"); # Set the term_data_id sequence!
return "Top level containers ".l('View forums', 'forum');
}
function unmigrate_containers()
{
$tids = db_query("SELECT id, name FROM $my_dcf_dbase.dcforum WHERE parent_id='0'");
while($tid = db_fetch_array($tids))
{
db_query("DELETE FROM {term_data} WHERE tid = %d ", $tid);
db_query("DELETE FROM {term_hierarchy} WHERE tid = %d ", $tid);
$output.= "<li>".$tid['name'];
}
variable_set('forum_containers', array());
db_query("REPLACE INTO {sequences} (id, name) SELECT max(tid), 'term_data_tid' FROM {term_data}"); # Set the term_data_id sequence!
return $output."<br><b>Top Level Containers Deleted</b>";
}
function migrate_forums()
{
# number of vocabulary groups I already have
$numvocgroups = db_fetch_object(db_query("SELECT id FROM {sequences} WHERE name = 'vocabulary_vid'"));
$numvocgroups = $numvocgroups->id;
# Step 3: Migrate forums (these have parent_id's > 0)
db_query("INSERT INTO {term_data} (tid, vid, name, description, weight)
SELECT id, %d, name, description, forum_order FROM $my_dcf_dbase.dcforum WHERE parent_id >0 ;",$numvocgroups );
db_queryd("INSERT INTO {term_hierarchy} (tid, parent)
SELECT id, parent_id FROM $my_dcf_dbase.dcforum WHERE parent_id > 0");
db_query("REPLACE INTO {sequences} (id, name) SELECT max(tid), 'term_data_tid' FROM {term_data}"); # Set the term_data_id sequence!
return "Migrated Forums ";
}
function unmigrate_forums()
{
$tids = db_query("SELECT id, name FROM $my_dcf_dbase.dcforum WHERE parent_id > 0");
while($tid = db_fetch_array($tids))
{
db_query("DELETE FROM {term_data} WHERE tid = %d ", $tid);
db_query("DELETE FROM {term_hierarchy} WHERE tid = %d ", $tid);
$output.= "<li>".$tid['name'];
}
db_query("REPLACE INTO {sequences} (id, name) SELECT max(tid), 'term_data_tid' FROM {term_data}"); # Set the term_data_id sequence!
return $output."<br><b>Forums Deleted</b>";
}
function migrate_topposts()
{
//Need to update 5 main tables: forum, node, node_comment_statistics, term_node, flat_forum
db_query("INSERT INTO {flatforum} (posts, uid) SELECT num_topics, uid FROM $my_dcf_dbase.dcforum, {users} WHERE {users}.name = last_author;");
# number of toplevel posts I have
$initnodeoffset = db_fetch_object(db_query("SELECT id FROM {sequences} WHERE name = 'node_nid';"));
$initnodeoffset = $initnodeoffset->id;
# add all the forum topics (posts become comments to these topics)
$allforums = db_query("SELECT id FROM $my_dcf_dbase.dcforum WHERE parent_id > 0");
//$allforums = db_query("SELECT id FROM $my_dcf_dbase.dcforum WHERE id = 5");
while($eachforum = db_fetch_object($allforums))
{
db_query('INSERT INTO {node} (forum_id, topic_id, type, title, uid, status, created, comment, promote, moderate, teaser, body, changed, revisions)
SELECT %d, t.id,
"forum",
t.subject,
t.author_id,
1,
unix_timestamp(t.mesg_date),
2,
0,
0,
t.subject,
t.message ,
unix_timestamp(t.last_date) ,
""
FROM $my_dcf_dbase.%d_mesg t WHERE parent_id = 0', $eachforum->id, $eachforum->id);
#Update the forum table
db_query("INSERT INTO {forum} (nid, tid)
SELECT nid, %d FROM $my_dcf_dbase.%d_mesg t, {node} n WHERE n.topic_id = t.id", $eachforum->id, $eachforum->id, $initnodeoffset, $eachforum->id);
#Update the term_node table
db_query("INSERT INTO {term_node} (nid, tid)
SELECT nid, %d FROM $my_dcf_dbase.%d_mesg t, {node} n WHERE n.topic_id = t.id", $eachforum->id, $eachforum->id, $initnodeoffset, $eachforum->id);
#insert responses to posts as comments
db_query("INSERT INTO {comments}
(forum_id, topic_id, pid, nid, uid, subject, comment, hostname, timestamp)
SELECT %d, t.id, n.topic_id, n.nid,
t.author_id,
t.subject,
t.message,
'unknown',
unix_timestamp(t.mesg_date)
FROM {node} n, $my_dcf_dbase.%d_mesg t WHERE t.parent_id > 0 AND t.top_id = (n.topic_id)", $eachforum->id, $eachforum->id);
#update node_comment_statistics
db_query("REPLACE INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_uid)
SELECT nid, changed, uid FROM {node}");
/*
db_query("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid)
SELECT DISTINCT(nid), unix_timestamp(t.last_date), last_author, n.uid FROM $my_dcf_dbase.%d_mesg t, {node} n WHERE n.topic_id = t.id", $eachforum->id, $initnodeoffset, $eachforum->id);
*/
}
#Update node_comment_statistics comment_count
$allnodes = db_query("SELECT DISTINCT(nid) FROM {comments}");// WHERE nid=c.nid");
while($eachnode = db_fetch_object($allnodes))
{
$no = db_result(db_query("SELECT COUNT(cid) FROM {comments} WHERE nid = $eachnode->nid"));
db_query("UPDATE {node_comment_statistics} SET comment_count = $no WHERE nid = %d", $eachnode->nid);
}
$node_seq = (array) db_fetch_object(db_query("SELECT max(nid) FROM {node}"));
db_query("UPDATE {sequences} SET id = %d WHERE name = 'node_nid'", $node_seq['max(nid)']); # Set the node sequence!
$comments_seq = db_result(db_query("SELECT max(cid) FROM {comments}"));
db_query("UPDATE {sequences} SET id = %d WHERE name = 'comments_cid'", $comments_seq); # Set the comments sequence!
//update flatforums with users who have made posts
$all_users = db_query("SELECT uid FROM {users}");
while($uid = db_fetch_object($all_users))
{
$uid = $uid_>uid;
$posts = db_result(db_query("SELECT COUNT(nid) FROM {node} n WHERE uid = %d", $uid));
$posts += db_result(db_query("SELECT COUNT(cid) FROM {comments} c WHERE uid = %d", $uid));
db_query('REPLACE INTO {flatforum} (uid, posts) VALUES (%d, %d) ', $uid, $posts);
}
}
function unmigrate_topposts()
{
$res = db_query("SELECT uid FROM {users} INNER JOIN $my_dcf_dbase.dcforum WHERE {users}.name = last_author");
while($uid = db_fetch_object($res))
{
db_query("DELETE FROM {flatforum} WHERE uid = %d", $uid->uid);
}
# number of toplevel posts I have
$initnodeoffset = db_fetch_object(db_query("SELECT id FROM {sequences} WHERE name = 'node_nid';"));
$initnodeoffset = $initnodeoffset->id;
# remove the forum topics (posts become comments to these topics)
db_query('DELETE FROM {node} WHERE type="forum"');
#Update the forum table
db_query("DELETE FROM {forum}");
#Update the term_node table
db_query("DELETE FROM {term_node}");
#update comments
db_query("DELETE FROM {comments} WHERE forum_id!=0");
#update the node_comment_statistics
db_query("DELETE FROM {node_comment_statistics}");
//update flatforums with users who have made posts
$all_users = db_query("SELECT uid FROM {users}");
while($uid = db_fetch_object($all_users))
{
$uid = $uid->uid;
$posts = db_result(db_query("SELECT COUNT(nid) FROM {node} n WHERE uid = %d", $uid));
$posts += db_result(db_query("SELECT COUNT(cid) FROM {comments} c WHERE uid = %d", $uid));
db_query('REPLACE INTO {flatforum} (uid, posts) VALUES (%d, %d) ', $uid, $posts);
}
$comments_seq = db_result(db_query("SELECT max(cid) FROM {comments}"));
db_query("UPDATE {sequences} SET id = %d WHERE name = 'comments_cid'", $comments_seq); # Set the comments sequence!
$node_seq = (array) db_fetch_object(db_query("SELECT max(nid) FROM {node}"));
db_query("UPDATE {sequences} SET id = %d WHERE name = 'node_nid'", $node_seq['max(nid)']); # Set the node sequence!
}
?>