|
|
|
@ -48,7 +48,7 @@ class Migration { |
|
|
|
|
/** |
|
|
|
|
* Temporary handler for SQL result |
|
|
|
|
*/ |
|
|
|
|
public $odbrows = null; |
|
|
|
|
public $odbrows = null; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Temporary holder for the list of users, courses and sessions and their |
|
|
|
@ -63,6 +63,9 @@ class Migration { |
|
|
|
|
'boost_sessions' => false, |
|
|
|
|
'sessions' => array(), |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
public $web_service_connection_info = array(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The constructor assigns all database connection details to the migration |
|
|
|
|
* object |
|
|
|
@ -73,10 +76,10 @@ class Migration { |
|
|
|
|
* @param string The original database's name |
|
|
|
|
* @return boolean False on error. Void on success. |
|
|
|
|
*/ |
|
|
|
|
public function __construct($dbhost, $dbport, $dbuser, $dbpass, $dbname, $boost=false) { |
|
|
|
|
public function __construct($dbhost = null, $dbport = null, $dbuser = null, $dbpass = null, $dbname = null, $boost = false) { |
|
|
|
|
if (empty($dbhost) || empty($dbport) || empty($dbuser) || empty($dbpass) || empty($dbname)) { |
|
|
|
|
$this->errors_stack[] = 'All origin database params must be given. Received ' . print_r(func_get_args(), 1); |
|
|
|
|
return false; |
|
|
|
|
//return false; |
|
|
|
|
} |
|
|
|
|
//$this->odbtype = $dbtype; |
|
|
|
|
$this->odbhost = $dbhost; |
|
|
|
@ -84,6 +87,7 @@ class Migration { |
|
|
|
|
$this->odbuser = $dbuser; |
|
|
|
|
$this->odbpass = $dbpass; |
|
|
|
|
$this->odbname = $dbname; |
|
|
|
|
|
|
|
|
|
// Set the boost level if set in config.php |
|
|
|
|
if (!empty($boost) && is_array($boost)) { |
|
|
|
|
foreach ($boost as $item => $val) { |
|
|
|
@ -100,6 +104,10 @@ class Migration { |
|
|
|
|
public function connect() { |
|
|
|
|
//extend in child class |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function set_web_service_connection_info($matches) { |
|
|
|
|
$this->web_service_connection_info = $matches['web_service_calls']; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The migrate method launches the migration process based on an array of |
|
|
|
@ -165,6 +173,7 @@ class Migration { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Call the SOAP web service as detailed in the parameters |
|
|
|
|
* @param array Settings for the WS call |
|
|
|
@ -172,7 +181,9 @@ class Migration { |
|
|
|
|
* @param array Variables to be passed as params to the function |
|
|
|
|
* @return array Results as returned by the SOAP call |
|
|
|
|
*/ |
|
|
|
|
static function soap_call($web_service_params, $function_name, $params = array()) { |
|
|
|
|
function soap_call($function_name, $params = array()) { |
|
|
|
|
$web_service_params = $this->web_service_connection_info; |
|
|
|
|
|
|
|
|
|
// Create the client instance |
|
|
|
|
$url = $web_service_params['url']; |
|
|
|
|
try { |
|
|
|
@ -213,7 +224,7 @@ class Migration { |
|
|
|
|
* @param bool Whether to truncate the transaction table before the test or not |
|
|
|
|
* @return void |
|
|
|
|
*/ |
|
|
|
|
function test_transactions($web_service_params, $truncate = false) { |
|
|
|
|
function test_transactions($truncate = false) { |
|
|
|
|
error_log('test_transactions'); |
|
|
|
|
//Just for tests |
|
|
|
|
|
|
|
|
@ -648,29 +659,31 @@ class Migration { |
|
|
|
|
* @param int An optional transaction ID to start from. If none provided, fetches the latest transaction available and add + 1 |
|
|
|
|
* @return The operation results |
|
|
|
|
*/ |
|
|
|
|
function search_transactions($web_service_params, $t_id = null) { |
|
|
|
|
error_log('search_transactions'); |
|
|
|
|
function search_transactions($t_id = null) { |
|
|
|
|
error_log('search_transactions'); |
|
|
|
|
|
|
|
|
|
//Testing transactions |
|
|
|
|
$web_service_params = $this->web_service_connection_info; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*$result = self::soap_call($web_service_params, 'usuarioDetalles', array('uididpersona' => 'D236776B-D7A5-47FF-8328-55EBE9A59015')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'programaDetalles', array('uididprograma' => 'C3671999-095E-4018-9826-678BAFF595DF')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'cursoDetalles', array('uididcurso' => 'E2334974-9D55-4BB4-8B57-FCEFBE2510DC')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'faseDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'frecuenciaDetalles', array('uididfrecuencia' => '0091CD3B-F042-11D7-B338-0050DAB14015')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'intensidadDetalles', array('uididintensidad' => '0091CD3C-F042-11D7-B338-0050DAB14015')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'mesesDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'sedeDetalles', array('uididsede' => '7379A7D3-6DC5-42CA-9ED4-97367519F1D9')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'horarioDetalles', array('uididhorario' => 'E395895A-B480-456F-87F2-36B3A1EBB81C')); |
|
|
|
|
$result = self::soap_call($web_service_params, 'transacciones', array('ultimo' => 354911, 'cantidad' => 2)); |
|
|
|
|
/*$result = $this->soap_call('usuarioDetalles', array('uididpersona' => 'D236776B-D7A5-47FF-8328-55EBE9A59015')); |
|
|
|
|
$result = $this->soap_call('programaDetalles', array('uididprograma' => 'C3671999-095E-4018-9826-678BAFF595DF')); |
|
|
|
|
$result = $this->soap_call('cursoDetalles', array('uididcurso' => 'E2334974-9D55-4BB4-8B57-FCEFBE2510DC')); |
|
|
|
|
$result = $this->soap_call('faseDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929')); |
|
|
|
|
$result = $this->soap_call('frecuenciaDetalles', array('uididfrecuencia' => '0091CD3B-F042-11D7-B338-0050DAB14015')); |
|
|
|
|
$result = $this->soap_call('intensidadDetalles', array('uididintensidad' => '0091CD3C-F042-11D7-B338-0050DAB14015')); |
|
|
|
|
$result = $this->soap_call('mesesDetalles', array('uididfase' => 'EBF63F1C-FBD7-46A5-B039-80B5AF064929')); |
|
|
|
|
$result = $this->soap_call('sedeDetalles', array('uididsede' => '7379A7D3-6DC5-42CA-9ED4-97367519F1D9')); |
|
|
|
|
$result = $this->soap_call('horarioDetalles', array('uididhorario' => 'E395895A-B480-456F-87F2-36B3A1EBB81C')); |
|
|
|
|
$result = $this->soap_call('transacciones', array('ultimo' => 354911, 'cantidad' => 2)); |
|
|
|
|
*/ |
|
|
|
|
$branches = self::get_branches(); |
|
|
|
|
foreach ($branches as $branch) { |
|
|
|
|
error_log('Treating transactions for branch '.$branch['branch_id']); |
|
|
|
|
$last = self::get_latest_transaction_by_branch($branch['branch_id']); |
|
|
|
|
$result = self::soap_call($web_service_params, 'transacciones', array('ultimo' => $last, 'cantidad' => 1)); |
|
|
|
|
$result = self::soap_call('transacciones', array('ultimo' => $last, 'cantidad' => 1)); |
|
|
|
|
//Calling a process to save transactions |
|
|
|
|
MigrationCustom::process_transactions($web_service_params, array('ultimo' => $last, 'cantidad' => 1)); |
|
|
|
|
MigrationCustom::process_transactions(array('ultimo' => $last, 'cantidad' => 1)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -680,9 +693,7 @@ class Migration { |
|
|
|
|
* @param int Optional limit of transactions to execute |
|
|
|
|
* @return void |
|
|
|
|
*/ |
|
|
|
|
function load_transactions($matches) { |
|
|
|
|
$actions = $matches['actions']; |
|
|
|
|
|
|
|
|
|
function load_transactions() { |
|
|
|
|
//Getting transactions of the migration_transaction table |
|
|
|
|
$branches = self::get_branches(); |
|
|
|
|
|
|
|
|
@ -728,22 +739,8 @@ class Migration { |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Loading function. The action is now numeric, so we call a transaction_1() function, for example |
|
|
|
|
$function_to_call = "transaction_" . $transaction['action']; |
|
|
|
|
if (method_exists('MigrationCustom', $function_to_call)) { |
|
|
|
|
error_log("\n-----------------------------------------------------------------------"); |
|
|
|
|
error_log("\nCalling function MigrationCustom::$function_to_call"); |
|
|
|
|
|
|
|
|
|
$result = MigrationCustom::$function_to_call($transaction, $matches['web_service_calls']); |
|
|
|
|
error_log('Reponse: '.$result['message']); |
|
|
|
|
|
|
|
|
|
self::update_transaction(array('id' => $transaction['id'] , 'status_id' => $result['status_id'])); |
|
|
|
|
} else { |
|
|
|
|
// method does not exist |
|
|
|
|
error_log("Function does $function_to_call not exists"); |
|
|
|
|
//Failed |
|
|
|
|
self::update_transaction(array('id' => $transaction['id'] , 'status_id' => MigrationCustom::TRANSACTION_STATUS_FAILED)); |
|
|
|
|
} |
|
|
|
|
self::execute_transaction($transaction_info); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
error_log('No transactions to load'); |
|
|
|
@ -761,6 +758,91 @@ class Migration { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function execute_transaction($transaction_info) { |
|
|
|
|
//Loading function. The action is now numeric, so we call a transaction_1() function, for example |
|
|
|
|
$function_to_call = "transaction_" . $transaction_info['action']; |
|
|
|
|
if (method_exists('MigrationCustom', $function_to_call)) { |
|
|
|
|
error_log("\n-----------------------------------------------------------------------"); |
|
|
|
|
error_log("\nCalling function MigrationCustom::$function_to_call"); |
|
|
|
|
|
|
|
|
|
$result = MigrationCustom::$function_to_call($transaction_info, $this->web_service_connection_info); |
|
|
|
|
error_log('Reponse: '.$result['message']); |
|
|
|
|
|
|
|
|
|
if (!empty($transaction_info['id'])) { |
|
|
|
|
self::update_transaction(array('id' => $transaction_info['id'] , 'status_id' => $result['status_id'])); |
|
|
|
|
} |
|
|
|
|
return $result; |
|
|
|
|
} else { |
|
|
|
|
// method does not exist |
|
|
|
|
$error_message = "Function does $function_to_call not exists"; |
|
|
|
|
error_log($error_message); |
|
|
|
|
|
|
|
|
|
//Failed |
|
|
|
|
if (!empty($transaction_info['id'])) { |
|
|
|
|
self::update_transaction(array('id' => $transaction_info['id'] , 'status_id' => MigrationCustom::TRANSACTION_STATUS_FAILED)); |
|
|
|
|
} |
|
|
|
|
return array('message' => $error_message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @param int Transaction id of the third party |
|
|
|
|
* |
|
|
|
|
*/ |
|
|
|
|
function load_transaction_by_third_party_id($transaction_external_id) { |
|
|
|
|
$result = self::soap_call('transacciones', array('ultimo' => $transaction_external_id, 'cantidad' => 2)); |
|
|
|
|
if ($result && isset($result[0])) { |
|
|
|
|
//Getting 1 transaction |
|
|
|
|
$result = $result[0]; |
|
|
|
|
//Hacking webservice |
|
|
|
|
$transaction_external_id++; |
|
|
|
|
if ($result['idt'] == $transaction_external_id) { |
|
|
|
|
$message = Display::return_message('Transaction id found in third party', 'success'); |
|
|
|
|
|
|
|
|
|
//Adding third party transaction to Chamilo not sure about this |
|
|
|
|
$chamilo_transaction_id = MigrationCustom::process_transaction($result); |
|
|
|
|
$chamilo_transaction_id = null; |
|
|
|
|
|
|
|
|
|
if ($chamilo_transaction_id) { |
|
|
|
|
$message .= "<br /> Transaction added to Chamilo with Id #$chamilo_transaction_id <br />"; |
|
|
|
|
$transaction_chamilo_info = self::get_transaction_by_params(array('Where' => array('id = ?' => $chamilo_transaction_id), 'first')); |
|
|
|
|
if (isset($transaction_chamilo_info) && isset($transaction_chamilo_info[$chamilo_transaction_id])) { |
|
|
|
|
$transaction_chamilo_info = $transaction_chamilo_info[$chamilo_transaction_id]; |
|
|
|
|
} else { |
|
|
|
|
$transaction_chamilo_info = null; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$message .= Display::return_message("Transaction NOT added to Chamilo executing transaction on the fly", 'info'); |
|
|
|
|
$transaction_chamilo_info = MigrationCustom::process_transaction($result, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!empty($transaction_chamilo_info)) { |
|
|
|
|
$transaction_result = $this->execute_transaction($transaction_chamilo_info); |
|
|
|
|
if ($transaction_result) { |
|
|
|
|
$message .= "<h4>Transaction result:</h4>"; |
|
|
|
|
$message .= $transaction_result['message']; |
|
|
|
|
$message .= "<br />"; |
|
|
|
|
} else { |
|
|
|
|
$message .= Display::return_message("Transaction failed", 'error'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return array( |
|
|
|
|
'message' => $message, |
|
|
|
|
'raw_reponse' => "<h4>Chamilo info:</h4><pre>".print_r($transaction_chamilo_info, true)."</pre> |
|
|
|
|
<h4>Webservice reponse:</h4><pre>".print_r($result, true)."</pre>", |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return array( |
|
|
|
|
'message' => Display::return_message("Transaction NOT found in third party", 'warning'), |
|
|
|
|
//'raw_reponse' => print_r($result, true) |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Prepares the relationship between two fields (one from the original database and on from the destination/local database) |
|
|
|
|
* @param array List of fields that must be matched ('fields_match' => array(0=>array('orig'=>'...','dest'=>'...',...))) |
|
|
|
|