xpath("/account/firm|/account/clients/client");
for ($i = 0; $i < sizeof($company); $i++) {
$out = "INSERT INTO ${dbprefix}companies (client_of_id, name, homepage, address, address2, city, state, zipcode, country, phone_number, fax_number, timezone, created_on, created_by_id, updated_on, updated_by_id) VALUES (";
if ($i == 0) {
$out .= "0,";
} else {
$out .= "1,";
}
$out .= sqlT($company[$i]->{'name'}[0]) . ", ";
$out .= sqlT($company[$i]->{'web-address'}) . ", ";
$out .= sqlT($company[$i]->{'address-one'}) . ", ";
$out .= sqlT($company[$i]->{'address-two'}) . ", ";
$out .= sqlT($company[$i]->{'city'}) . ", ";
$out .= sqlT($company[$i]->{'state'}) . ", ";
$out .= sqlT($company[$i]->{'zip'}) . ", ";
$out .= sqlT($company[$i]->{'country'}) . ", ";
$out .= sqlT($company[$i]->{'phone-number-office'}) . ", ";
$out .= sqlT($company[$i]->{'phone-number-fax'}) . ", ";
$out .= lookupTZ($company[$i]->{'time-zone-id'}) . ", ";
$out .= sqlT($date_created_on) . ", ";
$out .= "1, ";
$out .= sqlT($date_created_on) . ", ";
if ($i == 0) {
$out .= "0";
} else {
$out .= "1";
}
$out .= ");\n";
$sql[] = $out;
$companies[(integer)$company[$i]->{'id'}] = $i + 1;
$companytz[(integer)$company[$i]->{'id'}] = lookupTZ($company[$i]->{'time-zone-id'});
}
echo '
Usernames and Passwords
';
$sql[] = "DELETE FROM ${dbprefix}users;\n";
$sql[] = "ALTER TABLE ${dbprefix}users AUTO_INCREMENT = 1;\n";
$users = $bc->xpath("/account/firm/people/person|/account/clients/client/people/person");
for ($i = 0; $i < sizeof($users); $i++) {
$out = "INSERT INTO ${dbprefix}users (company_id, username, email, token, salt, twister, display_name, title, office_number, fax_number, mobile_number, home_number, timezone, created_on, created_by_id, updated_on, last_activity, is_admin, auto_assign) VALUES (";
$out .= $companies[(integer)$users[$i]->{'client-id'}] . ", ";
$indomain = strpos($users[$i]->{'email-address'}, $user_domain);
if ($indomain != '') {
$username = substr($users[$i]->{'email-address'}, 0, $indomain);
} else {
$username = $users[$i]->{'email-address'};
}
if (array_search($username, $usernames)) {
$username = $username . '_' . $users[$i]->{'id'};
$out .= sqlT($username) . ", ";
$email = $users[$i]->{'email-address'} . '_' . $users[$i]->{'id'};
$out .= sqlT($email) . ", ";
echo 'Duplicate user "' . $users[$i]->{'id'} . '" created with username as "' . $username . '" and email address as "' . $email . '"
';
} else {
$out .= sqlT($username) . ", ";
$out .= sqlT($users[$i]->{'email-address'}) . ", ";
}
if ($i == 0) {
echo "Admin user is: $username
";
echo "Admin pass is: admin
";
$out .= sqlT($admin_token) . ", ";
$out .= sqlT($admin_salt) . ", ";
$out .= "'', ";
} else {
$pass = substr(sha1(uniqid(rand(), true)), rand(0, 25), 8);
echo "$username:$pass
";
$salt = substr(sha1(uniqid(rand(), true)), rand(0, 25), 13);
$token = sha1($salt . $pass);
$out .= sqlT($token) . ", ";
$out .= sqlT($salt) . ", ";
$out .= "'', ";
}
$out .= sqlT($users[$i]->{'name'}) . ", ";
$out .= sqlT($users[$i]->{'title'}) . ", ";
$phone = $users[$i]->{'phone-number-office'};
if ($users[$i]->{'phone-number-office'} != '') {
$phone .= " x" . $users[$i]->{'phone-number-office-ext'};
}
$out .= sqlT($phone) . ", ";
$out .= sqlT($users[$i]->{'phone-number-fax'}) . ", ";
$out .= sqlT($users[$i]->{'phone-number-mobile'}) . ", ";
$out .= sqlT($users[$i]->{'phone-number-home'}) . ", ";
$out .= $companytz[(integer)$users[$i]->{'client-id'}] . ", ";
$out .= sqlD($users[$i]->{'created-at'}) . ", ";
$out .= "0, ";
$out .= sqlD($users[$i]->{'updated-at'}) . ", ";
$out .= sqlT(date('Y-m-d H:i:s')) . ", ";
if ($users[$i]->{'administrator'}) {
$out .= $users[$i]->{'administrator'} . ", ";
} else {
$out .= "false, ";
}
$out .= $users[$i]->{'has-access-to-new-projects'};
$out .= ");\n";
$sql[] = $out;
$people[(integer)$users[$i]->{'id'}] = $i + 1;
$people_company[(integer)$users[$i]->{'id'}] = $companies[(integer)$users[$i]->{'client-id'}];
$usernames[sizeof($usernames)] = $username;
}
$sql[] = "DELETE FROM ${dbprefix}user_im_values;\n";
for ($i = 0; $i < sizeof($users); $i++) {
if ($users[$i]->{'im-handle'} != '') {
$out = "INSERT INTO ${dbprefix}user_im_values (user_id, im_type_id, value, is_default) VALUES (";
$out .= $people[(integer)$users[$i]->{'id'}] . ", ";
$out .= lookupIM($users[$i]->{'im-service'}) . ", ";
$out .= sqlT($users[$i]->{'im-handle'}) . ", ";
$out .= "1";
$out .= ");\n";
$sql[] = $out;
}
}
$sql[] = "DELETE FROM ${dbprefix}projects;\n";
$sql[] = "ALTER TABLE ${dbprefix}projects AUTO_INCREMENT = 1;\n";
$sql[] = "DELETE FROM ${dbprefix}project_companies;\n";
$sql[] = "DELETE FROM ${dbprefix}project_users;\n";
$project = $bc->xpath("/account/projects/project");
for ($i = 0; $i < sizeof($project); $i++) {
$out = "INSERT INTO ${dbprefix}projects (name, completed_on, completed_by_id, created_on, created_by_id, updated_on, updated_by_id) VALUES (";
$out .= sqlT($project[$i]->{'name'}[0]) . ", ";
if ($project[$i]->{'status'} == 'archived') {
$out .= sqlD($project[$i]->{'last-changed-on'}) . ", ";
$out .= "1,";
} else {
$out .= "DEFAULT, ";
$out .= "0, ";
}
$out .= sqlT($project[$i]->{'created-on'}) . ", ";
$out .= "1, ";
$out .= sqlD($project[$i]->{'last-changed-on'}) . ", ";
$out .= "1";
$out .= ");\n";
$sql[] = $out;
$projects[(integer)$project[$i]->{'id'}] = $i + 1;
}
$sql[] = "DELETE FROM ${dbprefix}project_companies;\n";
for ($i = 0; $i < sizeof($project); $i++) {
$out = "INSERT INTO ${dbprefix}project_companies (project_id, company_id) VALUES (";
$out .= $i + 1 . ", ";
$out .= $companies[(integer)$project[$i]->{'company'}->{'id'}];
$out .= ");\n";
$sql[] = $out;
}
$sql[] = "DELETE FROM ${dbprefix}project_users;\n";
for ($i = 0; $i < sizeof($project); $i++) {
$project_person = $project[$i]->xpath("participants/person");
for ($j = 0; $j < sizeof($project_person); $j++) {
$out = "INSERT INTO ${dbprefix}project_users (project_id, user_id) VALUES (";
$out .= $i + 1 . ", ";
$out .= $people[(integer)$project_person[$j]];
$out .= ");\n";
$sql[] = $out;
}
}
$sql[] = "DELETE FROM ${dbprefix}project_milestones;\n";
$sql[] = "ALTER TABLE ${dbprefix}project_milestones AUTO_INCREMENT = 1;\n";
$project_milestone = $bc->xpath("/account/projects/project/milestones/milestone");
for ($i = 0; $i < sizeof($project_milestone); $i++) {
$out = "INSERT INTO ${dbprefix}project_milestones (project_id, name, due_date, assigned_to_user_id, completed_on, completed_by_id, created_on, created_by_id) VALUES (";
$out .= $projects[(integer)$project_milestone[$i]->{'project-id'}] . ", ";
$out .= sqlT($project_milestone[$i]->{'title'}) . ", ";
$out .= sqlD($project_milestone[$i]->{'deadline'}) . ", ";
if ($project_milestone[$i]->{'responsible-party-type'} == 'Person') {
$out .= $people[(integer)$project_milestone[$i]->{'responsible-party-id'}] . ", ";
} else if ($project_milestone[$i]->{'responsible-party-type'} == 'Company') {
$out .= $companies[(integer)$project_milestone[$i]->{'responsible-party-id'}] . ", ";
} else {
$out .= "DEFAULT, ";
}
if ($project_milestone[$i]->{'completed'} == 'true') {
$out .= sqlD($project_milestone[$i]->{'completed-on'}) . ", ";
$out .= $people[(integer)$project_milestone[$i]->{'completer-id'}] . ", ";
} else {
$out .= "DEFAULT, ";
$out .= "DEFAULT, ";
}
$out .= sqlD($project_milestone[$i]->{'created-on'}) . ", ";
$out .= $people[(integer)$project_milestone[$i]->{'creator-id'}];
$out .= ");\n";
$sql[] = $out;
$milestones[(integer)$project_milestone[$i]->{'id'}] = $i + 1;
}
$sql[] = "DELETE FROM ${dbprefix}project_task_lists;\n";
$sql[] = "ALTER TABLE ${dbprefix}project_task_lists AUTO_INCREMENT = 1;\n";
$project_todo = $bc->xpath("/account/projects/project/todo-lists/todo-list");
for ($i = 0; $i < sizeof($project_todo); $i++) {
$out = "INSERT INTO ${dbprefix}project_task_lists (milestone_id, project_id, name, completed_on, completed_by_id) VALUES (";
if ((integer)$project_todo[$i]->{'milestone-id'} === 0) {
$out .= "DEFAULT, ";
} elseif (array_key_exists((integer)$project_todo[$i]->{'milestone-id'}, $milestones)) {
$out .= $milestones[(integer)$project_todo[$i]->{'milestone-id'}] . ", ";
} else {
$out .= "DEFAULT, ";
}
$out .= $projects[(integer)$project_todo[$i]->{'project-id'}] . ", ";
$out .= sqlT($project_todo[$i]->{'name'}[0]) . ", ";
if ((integer)$project_todo[$i]->{'uncompleted-count'} == 0) {
$completed = $project_todo[$i]->xpath("todo-items/todo-item[completed-at|completer-id]");
$completed_at = '';
for ($j = 0; $j < sizeof($completed); $j++) {
if ($completed_at <= $completed[$j]->{'completed-at'}) {
$completed_at = $completed[$j]->{'completed-at'};
$completer_id = (integer)$completed[$j]->{'completer-id'};
}
}
$out .= sqlD($completed_at) . ", ";
$out .= $people[$completer_id];
} else {
$out .= "DEFAULT, ";
$out .= "DEFAULT";
}
$out .= ");\n";
$sql[] = $out;
$tasklists[(integer)$project_todo[$i]->{'id'}] = $i + 1;
}
$sql[] = "DELETE FROM ${dbprefix}project_tasks;\n";
$sql[] = "ALTER TABLE ${dbprefix}project_tasks AUTO_INCREMENT = 1;\n";
$project_todoitem = $bc->xpath("/account/projects/project/todo-lists/todo-list/todo-items/todo-item");
for ($i = 0; $i < sizeof($project_todoitem); $i++) {
$out = "INSERT INTO ${dbprefix}project_tasks (task_list_id, text, assigned_to_company_id, assigned_to_user_id, completed_on, completed_by_id, created_on, created_by_id, `order`) VALUES (";
$out .= $tasklists[(integer)$project_todoitem[$i]->{'todo-list-id'}] . ", ";
$out .= sqlT($project_todoitem[$i]->{'content'}) . ", ";
if ($project_todoitem[$i]->{'responsible-party-type'} == 'Person') {
$out .= $people_company[(integer)$project_todoitem[$i]->{'responsible-party-id'}] . ", ";
$out .= $people[(integer)$project_todoitem[$i]->{'responsible-party-id'}] . ", ";
} else if ($project_todoitem[$i]->{'responsible-party-type'} == 'Company') {
$out .= $companies[(integer)$project_todoitem[$i]->{'responsible-party-id'}] . ", ";
$out .= "0, ";
} else {
$out .= "DEFAULT, ";
$out .= "DEFAULT, ";
}
if ($project_todoitem[$i]->{'completed'} == 'true') {
$out .= sqlD($project_todoitem[$i]->{'completed-at'}) . ", ";
$out .= $people[(integer)$project_todoitem[$i]->{'completer-id'}] . ", ";
} else {
$out .= "DEFAULT, ";
$out .= "DEFAULT, ";
}
$out .= sqlD($project_todoitem[$i]->{'created-at'}) . ", ";
$out .= $people[(integer)$project_todoitem[$i]->{'creator-id'}] . ", ";
$out .= (integer)$project_todoitem[$i]->{'position'};
$out .= ");\n";
$sql[] = $out;
}
$post_category = $bc->xpath("/account/projects/project/post-categories/post-category");
for ($i = 0; $i < sizeof($post_category); $i++) {
$categories[(integer)$post_category[$i]->{'id'}] = (string)$post_category[$i]->{'name'}[0];
}
$sql[] = "DELETE FROM ${dbprefix}project_messages;\n";
$sql[] = "ALTER TABLE ${dbprefix}project_messages AUTO_INCREMENT = 1;\n";
$project_post = $bc->xpath("/account/projects/project/posts/post");
for ($i = 0; $i < sizeof($project_post); $i++) {
$out = "INSERT INTO ${dbprefix}project_messages (milestone_id, project_id, title, text, additional_text, comments_enabled, created_on, created_by_id) VALUES (";
if ((integer)$project_post[$i]->{'milestone-id'} === 0) {
$out .= "DEFAULT, ";
} elseif (array_key_exists((integer)$project_post[$i]->{'milestone-id'}, $milestones)) {
$out .= $milestones[(integer)$project_post[$i]->{'milestone-id'}] . ", ";
} else {
$out .= "DEFAULT, ";
}
$out .= $projects[(integer)$project_post[$i]->{'project-id'}] . ", ";
$out .= sqlT($project_post[$i]->{'title'}) . ", ";
$out .= sqlT($project_post[$i]->{'body'}) . ", ";
$out .= sqlT($project_post[$i]->{'extended-body'}) . ", ";
$out .= "1, ";
$out .= sqlD($project_post[$i]->{'posted-on'}) . ", ";
if (array_key_exists((integer)$project_post[$i]->{'author-id'}, $people)) {
$out .= $people[(integer)$project_post[$i]->{'author-id'}];
} else {
$out .= "DEFAULT";
}
$out .= ");\n";
$sql[] = $out;
$posts[(integer)$project_post[$i]->{'id'}] = $i + 1;
}
$sql[] = "DELETE FROM ${dbprefix}tags;\n";
$sql[] = "ALTER TABLE ${dbprefix}tags AUTO_INCREMENT = 1;\n";
for ($i = 0; $i < sizeof($project_post); $i++) {
$out = "INSERT INTO ${dbprefix}tags (project_id, tag, rel_object_id, rel_object_manager, created_on, created_by_id) VALUES (";
$out .= $projects[(integer)$project_post[$i]->{'project-id'}] . ", ";
$out .= sqlT($categories[(integer)$project_post[$i]->{'category-id'}]) . ", ";
$out .= $posts[(integer)$project_post[$i]->{'id'}] . ", ";
$out .= sqlT('ProjectMessages') . ", ";
$out .= sqlD($project_post[$i]->{'posted-on'}) . ", ";
if (array_key_exists((integer)$project_post[$i]->{'author-id'}, $people)) {
$out .= $people[(integer)$project_post[$i]->{'author-id'}];
} else {
$out .= "DEFAULT";
}
$out .= ");\n";
$sql[] = $out;
}
$sql[] = "DELETE FROM ${dbprefix}comments;\n";
$sql[] = "ALTER TABLE ${dbprefix}comments AUTO_INCREMENT = 1;\n";
$post_comment = $bc->xpath("/account/projects/project/posts/post/comments/comment");
for ($i = 0; $i < sizeof($post_comment); $i++) {
$out = "INSERT INTO ${dbprefix}comments (rel_object_id, rel_object_manager, text, created_on, created_by_id) VALUES (";
$out .= $posts[(integer)$post_comment[$i]->{'commentable-id'}] . ", ";
$out .= sqlT('ProjectMessages') . ", ";
$out .= sqlT($post_comment[$i]->{'body'}) . ", ";
$out .= sqlD($post_comment[$i]->{'created-at'}) . ", ";
if (array_key_exists((integer)$post_comment[$i]->{'author-id'}, $people)) {
$out .= $people[(integer)$post_comment[$i]->{'author-id'}];
} else {
$out .= "DEFAULT";
}
$out .= ");\n";
$sql[] = $out;
}
$sql[] = "DELETE FROM ${dbprefix}message_subscriptions;\n";
$subscriptions = Array();
for ($i = 0; $i < sizeof($post_comment); $i++) {
if (array_key_exists((integer)$post_comment[$i]->{'author-id'}, $people)) {
if (!array_key_exists((integer)$post_comment[$i]->{'commentable-id'}, $subscriptions)) {
$subscriptions[(integer)$post_comment[$i]->{'commentable-id'}] = Array();
}
if (!array_key_exists((integer)$post_comment[$i]->{'author-id'}, $subscriptions[(integer)$post_comment[$i]->{'commentable-id'}])) {
$subscriptions[(integer)$post_comment[$i]->{'commentable-id'}][(integer)$post_comment[$i]->{'author-id'}] = true;
}
}
}
foreach ($subscriptions as $message=>$users) {
foreach ($users as $user=>$value) {
$out = "INSERT INTO ${dbprefix}message_subscriptions (message_id, user_id) VALUES (";
$out .= $posts[$message] . ", ";
$out .= $people[$user];
$out .= ");\n";
$sql[] = $out;
}
}
$sql[] = "DELETE FROM ${dbprefix}application_logs;\n";
$sql[] = "ALTER TABLE ${dbprefix}application_logs AUTO_INCREMENT = 1;\n";
$sql[] = "COMMIT WORK;\n";
echo 'SQL
';
echo '';
foreach ($sql as $line) {
echo $line;
// WARNING THIS WILL DESTROY YOUR DATA
// Uncomment the lines below if you are sure you want this script to update your database.
/*
$result = mysql_query($line, $conn);
if (!$result) {
echo $line . "\n";
echo 'Could not execute: ' . mysql_error();
$result = mysql_query("ROLLBACK WORK", $conn);
die('Rolled back');
}
*/
}
echo '';
mysql_close($conn);
echo 'Script Completed';
function sqlT($input) {
global $conn;
return "'" . mysql_real_escape_string($input, $conn) . "'";
}
function sqlD($input) {
$input = str_replace('T', ' ', $input);
$input = str_replace('Z', '', $input);
return "'" . $input . "'";
}
function lookupTZ($tz) {
switch ($tz) {
case 'Eastern Time (US & Canada)':
return -5;
case 'Central Time (US & Canada)';
return -6;
default:
return 0;
}
}
function lookupIM($im) {
switch ($im) {
case 'ICQ':
return 1;
case 'AOL':
return 2;
case 'MSN':
return 3;
case 'Yahoo':
return 4;
case 'Skype':
return 5;
case 'Jabber':
return 6;
case 'Google':
return 6;
default:
return 0;
}
}
?>