vtigerossez/modules/Migration/MigrationCheck.php

423 lines
13 KiB
PHP

<?php
/*********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*
********************************************************************************/
global $current_user;
if($current_user->is_admin != 'on')
{
die("<br><br><center>".$app_strings['LBL_PERMISSION']." <a href='javascript:window.history.back()'>".$app_strings['LBL_GO_BACK'].".</a></center>");
}
include("config.inc.php");
$migration_log = '';
//Added for Migration Log
$migrationlog =& LoggerManager::getLogger('MIGRATION');
//new database values get from the current vtigerCRM's config.php
global $dbconfig;
$new_host_name = $dbconfig['db_hostname'];
$new_mysql_username = $dbconfig['db_username'];
$new_mysql_password = $dbconfig['db_password'];
$new_dbname = $dbconfig['db_name'];
//this is to check whether the user_privileges folder has write permission
if(!is_writable($root_directory."user_privileges/"))
{
echo "<br><font color='red'><b>Please give read/write permission to user_privileges folder.</b></font>";
include("modules/Migration/MigrationStep1.php");
exit;
}
//this is to check whether the mysql path is needed and has been entered or not
if($_REQUEST['getmysqlpath'] == 1 && $_REQUEST['server_mysql_path'] != '')
{
$mysql_path_found = false;
$server_mysql_path = $_REQUEST['server_mysql_path'];
if(is_file($server_mysql_path."/mysqldump"))
{
$mysql_path_found = true;
@session_unregister('set_server_mysql_path');
$_SESSION['set_server_mysql_path'] = $server_mysql_path;
$migration_log .='MySQL Dump file has found in ==> '.$server_mysql_path;
}
elseif(substr($_ENV["OS"],0,3) == "Win" && is_file($server_mysql_path."\mysqldump.exe"))
{
$mysql_path_found = true;
@session_unregister('set_server_mysql_path');
$_SESSION['set_server_mysql_path'] = $server_mysql_path;
$migration_log .='MySQL Dump file has found in ==> '.$server_mysql_path;
}
if(!$mysql_path_found && $_REQUEST['migration_option'] != 'alter_db_details')
{
//header("Location: index.php?module=Migration&action=MigrationStep1&parenttab=Settings");
echo '<br><font color="red"><b>MySQL dump file is not exist in the specified MySQL Server Path</b></font>';
include("modules/Migration/MigrationStep1.php");
exit;
}
}
$migrationlog->debug("$migration_log");
//echo '<br>Proceed with migration';
$migrationlog->debug("Migration Option - ".$_REQUEST['migration_option']);
include("modules/Migration/Migration.php");
if($_REQUEST['migration_option'] == 'db_details')
{
//Source MySQL database details have been given.
//old database values
$old_host_name = $_REQUEST['old_host_name'];
$old_mysql_port = $_REQUEST['old_port_no'];
$old_mysql_username = $_REQUEST['old_mysql_username'];
$old_mysql_password = $_REQUEST['old_mysql_password'];
$old_dbname = $_REQUEST['old_dbname'];
$migrationlog->debug("old host name = ".$old_host_name);
$migrationlog->debug("old MySQL port = ".$old_mysql_port);
$migrationlog->debug("old MySQL username = ".$old_mysql_username);
$migrationlog->debug("old MySQL password = ".$old_mysql_password);
$migrationlog->debug("old db name = ".$old_dbname);
//make a connection with the old database
$oldconn = @mysql_connect($old_host_name.":".$old_mysql_port,$old_mysql_username,$old_mysql_password);
//make a connection with the new database
$newconn = @mysql_connect($new_host_name,$new_mysql_username,$new_mysql_password);
if(!$oldconn)
{
echo '<br><font color="red"><b> Source Database Server cannot be connected</b></font>';
$continue1 = 0;
}
elseif(!$newconn)
{
echo '<br><font color="red"><b> Current working Database Server cannot be connected</b></font>';
$continue1 = 0;
}
else
{
$migration_log .= ' Database Servers can be connected. Can proceed with migration';
$migrationlog->debug("Database Servers can be connected. continue1 = 1");
$continue1 = 1;
}
if($continue1 == 1)
{
//check whether the specified databases are exist or not
$olddb_exist = @mysql_select_db($old_dbname,$oldconn);
//$newdb_exist = @mysql_select_db($new_dbname,$oldconn);
if(!$olddb_exist)
{
echo '<br><font color="red"><b> Source Database does not exist</b></font>';
$continue2 = 0;
}
//elseif(!$newdb_exist)
//{
// echo '<br> New Database is not exist';
// $continue2 = 0;
//}
else
{
$migration_log .= '<br> Required databases exist';
$migrationlog->debug("Required databases exist. continue2 = 1");
$continue2 = 1;
}
}
if($continue2 == 1)
{
//Check whether the vtiger_table are exist in the databases or not
$old_tables = @mysql_num_rows(mysql_list_tables($old_dbname,$oldconn));
//$new_tables = @mysql_num_rows(mysql_list_tables($new_dbname));
if(!$old_tables)
{
echo '<br><font color="red"><b> Tables do not exist in the Source Database</b></font>';
$continue3 = 0;
}
/* if(!$new_tables)
{
echo '<br> Tables are not exist in New Database';
$continue3 = 0;
}
*/
else
{
$migration_log .= '<br> Tables exist in both the Databases';
$migrationlog->debug("Tables exist in the database. continue3 = 1");
$continue3 = 1;
}
}
//To check whether the two databases are same
if($continue3 == 1)
{
$new_host = explode(":",$new_host_name);
if($old_host_name == $new_host[0] && $old_mysql_port == $new_host[1] && $old_mysql_username == $new_mysql_username && $old_mysql_password == $new_mysql_password && $old_dbname == $new_dbname)
{
echo '<br> Both the databases are the same.';
$continue4 = 1;//change the value to 0 if you don't want to proceed with the same database
$same_databases = 1;
}
else
{
$continue4 = 1;
$same_databases = 0;
}
}
//$continue1 -- Database servers can be connected
//$continue2 -- Database exists in the servers
//$continue3 -- Tables are exist in the databases
//$continue4 -- Two databases are not same
if($continue1 == 1 && $continue2 == 1 && $continue3 == 1 && $continue4 == 1)
{
$migrationlog->debug("Going to migrate...");
$new_host = explode(":",$new_host_name);
$conn = new PearDatabase("mysql",$new_host_name,$new_dbname,$new_mysql_username,$new_mysql_password);
$conn->connect();
$migrationlog->debug("MICKIE ==> Option = DB details. From the given DB details we will migrate.");
@session_unregister('migration_log');
$_SESSION['migration_log'] = $migration_log;
if($conn)
{
$migrationlog->debug("Pear Database object created. Going to create migration object.");
$obj = new Migration('',$conn);
$obj->setOldDatabaseParams($old_host_name,$old_mysql_port,$old_mysql_username,$old_mysql_password,$old_dbname);
$obj->setNewDatabaseParams($new_host[0],$new_host[1],$new_mysql_username,$new_mysql_password,$new_dbname);
$obj->migrate($same_databases,'dbsource');
}
else
{
echo '<br><font color="red"><b> Cannot make a connection with the current database setup.</b></font>';
include("modules/Migration/MigrationStep1.php");
}
}
else
{
echo '<br><font color="red"><b>ERROR!!!!!!Please check the input values, unable to proceed.</b></font>';
include("modules/Migration/MigrationStep1.php");
}
}
elseif($_REQUEST['migration_option'] == 'dump_details')
{
$old_dump_details = $_FILES['old_dump_filename'];
$old_dump_filename = $old_dump_details['name'];
$migrationlog->debug("Dump file name ==> $old_dump_filename");
//MySQL Dump file details has given
if($old_dump_details['size'] != 0 && is_file($old_dump_details['tmp_name']))
{
$gotostep1 = 0;
//apply this dump file to the new database
$checkDumpFileAndApply = 1;
}
else
{
$gotostep1 = 1;
if($old_dump_details['error'] == 2 || $old_dump_details['error'] == 1)
{
$invalid_dump = 1;
$errormessage = "Sorry, the uploaded file exceeds the maximum filesize limit. Try other option.";
}
elseif($old_dump_details['error'] == 4 || $old_dump_details['size'] == 0 || !is_file($old_dump_details['tmp_name']))
{
$invalid_dump = 1;
$errormessage = "Please enter a valid Dump file.";
}
$migrationlog->debug("Dump file error no = ".$old_dump_details['error']);
}
if($gotostep1 == 1)
{
if($invalid_dump == 1)
{
echo "<br><font color='red'><b> $errormessage</b></font>";
}
include("modules/Migration/MigrationStep1.php");
exit;
}
if($checkDumpFileAndApply == 1)
{
//TODO - Check whether the given file is Dump file and then apply to the new database
$migration_log .= '<br> Going to apply the Dump file to the new database.';
//If the dump is valid and going to migrate then we should move the browsed dump file to root directory
global $root_directory;
move_uploaded_file($old_dump_details['tmp_name'],$root_directory.$old_dump_details['name']);
include("config.inc.php");
global $dbconfig;
$new_host_name = $dbconfig['db_hostname'];
$new_dbname = $dbconfig['db_name'];
$new_mysql_username = $dbconfig['db_username'];
$new_mysql_password = $dbconfig['db_password'];
$conn = new PearDatabase("mysql",$new_host_name,$new_dbname,$new_mysql_username,$new_mysql_password);
$conn->connect();
$migrationlog->debug("MICKIE ==> Option = Dump File. Selected Dump File will be applied to the new database");
@session_unregister('migration_log');
$_SESSION['migration_log'] = $migration_log;
if($conn)
{
$migrationlog->debug("Pear Database object created. Going to create migration object.");
$obj = new Migration('',$conn);
$new_host = explode(":",$new_host_name);
$temp_new_host_name = $new_host[0];
$new_mysql_port = $new_host[1];
$obj->setNewDatabaseParams($new_host[0],$new_host[1],$new_mysql_username,$new_mysql_password,$new_dbname);
$obj->migrate(0,'dumpsource',$old_dump_filename);
}
}
}
elseif($_REQUEST['migration_option'] == 'alter_db_details')
{
//old database values
$old_host_name = $_REQUEST['alter_old_host_name'];
$old_mysql_port = $_REQUEST['alter_old_port_no'];
$old_mysql_username = $_REQUEST['alter_old_mysql_username'];
$old_mysql_password = $_REQUEST['alter_old_mysql_password'];
$old_dbname = $_REQUEST['alter_old_dbname'];
$migrationlog->debug("old host name = ".$old_host_name);
$migrationlog->debug("old MySQL port = ".$old_mysql_port);
$migrationlog->debug("old MySQL username = ".$old_mysql_username);
$migrationlog->debug("old MySQL password = ".$old_mysql_password);
$migrationlog->debug("old db name = ".$old_dbname);
//make a connection with the old database
$oldconn = @mysql_connect($old_host_name.":".$old_mysql_port,$old_mysql_username,$old_mysql_password);
if(!$oldconn)
{
echo '<br><font color="red"><b> Source Database Server cannot be connected</b></font>';
$continue1 = 0;
}
else
{
$migration_log .= ' Database Server can be connected. Can proceed with migration';
$migrationlog->debug("Database server connected. continue1 = 1");
$continue1 = 1;
}
if($continue1 == 1)
{
//check whether the specified databases are exist or not
$olddb_exist = @mysql_select_db($old_dbname,$oldconn);
if(!$olddb_exist)
{
echo '<br><font color="red"><b> Source Database does not exist</b></font>';
$continue2 = 0;
}
else
{
$migration_log .= '<br> Required database exist';
$migrationlog->debug("Database exist. continue2 = 1");
$continue2 = 1;
}
}
if($continue2 == 1)
{
//Check whether the vtiger_table are exist in the databases or not
$old_tables = @mysql_num_rows(mysql_list_tables($old_dbname,$oldconn));
if(!$old_tables)
{
echo '<br><font color="red"><b> Tables do not exist in the Source Database</b></font>';
$continue3 = 0;
}
else
{
$migration_log .= '<br> Tables exist in the Database';
$migrationlog->debug("Tables exist. continue3 = 1");
$continue3 = 1;
}
}
//$continue1 -- Database server can be connected
//$continue2 -- Database exists in the server
//$continue3 -- Tables are exist in the database
if($continue1 == 1 && $continue2 == 1 && $continue3 == 1)
{
$conn = new PearDatabase("mysql",$old_host_name.":".$old_mysql_port,$old_dbname,$old_mysql_username,$old_mysql_password);
$conn->connect();
$migrationlog->debug("MICKIE ==> Option = Alter DB details. From the given DB details we will migrate.");
@session_unregister('migration_log');
$_SESSION['migration_log'] = $migration_log;
if($conn)
{
$migrationlog->debug("Database object created. Going to create Migration object");
$obj = new Migration('',$conn);
$obj->setOldDatabaseParams($old_host_name,$old_mysql_port,$old_mysql_username,$old_mysql_password,$old_dbname);
//$obj->migrate($same_databases,'dbsource');
$obj->modifyDatabase($conn);
}
else
{
echo '<br><font color="red"><b> Cannot make a connection with the current database setup</b></font>';
include("modules/Migration/MigrationStep1.php");
}
}
else
{
echo '<br><font color="red"><b>ERROR!!!!!!Please check the input values, unable to proceed.</b></font>';
include("modules/Migration/MigrationStep1.php");
}
}
else
{
//Return to the MigrationStep1
include("modules/Migration/MigrationStep1.php");
exit;
}
?>
<script>
function displayMigrationSuccess()
{
document.getElementById("migration_image").style.display = "block";
document.getElementById("migration_message1").innerHTML = "Migration has been completed";
document.getElementById("migration_message2").innerHTML = "Your old data is now moved into new vtigerCRM";
}
</script>
<script>
displayMigrationSuccess();
</script>
<?php
?>