From 315609518329b192c76d2c1e87f7694e2bd47e8d Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 2 Nov 2012 15:06:40 +0100 Subject: [PATCH] Adding changes in the migration, adding transactions calls + moving course_edit update code in course.lib.php see BT#4882 --- main/admin/course_edit.php | 116 ++--------------------- main/inc/lib/course.lib.php | 97 ++++++++++++++++++- tests/migrate/migration.class.php | 108 +++++++++++++-------- tests/migrate/migration.custom.class.php | 41 ++++---- 4 files changed, 197 insertions(+), 165 deletions(-) diff --git a/main/admin/course_edit.php b/main/admin/course_edit.php index 85c2ae9cb7..116bb3717d 100644 --- a/main/admin/course_edit.php +++ b/main/admin/course_edit.php @@ -13,7 +13,7 @@ $this_section = SECTION_PLATFORM_ADMIN; api_protect_admin_script(); $course_table = Database::get_main_table(TABLE_MAIN_COURSE); -$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); + $course_code = isset($_GET['course_code']) ? $_GET['course_code'] : $_POST['code']; $noPHP_SELF = true; @@ -192,10 +192,10 @@ $form->setDefaults($course); // Validate form if ($form->validate()) { - $course = $form->getSubmitValues(); - $course_code = $course['code']; - $visual_code = $course['visual_code']; - $visual_code = CourseManager::generate_course_code($visual_code); + $course = $form->getSubmitValues(); + $visual_code = CourseManager::generate_course_code($course['visual_code']); + + CourseManager::update($course); // Check if the visual code is already used by *another* course $visual_code_is_used = false; @@ -211,115 +211,13 @@ if ($form->validate()) { } $warn = substr($warn,0,-1); } - - $field_value = new ExtraFieldValue('course'); - $params = $course; - $params['course_code'] = $course_code; - $field_value->save_field_values($params); - - // an extra field - $extras = array(); - foreach ($course as $key => $value) { - if (substr($key,0,6)=='extra_') { - $extras[substr($key,6)] = $value; - } - if (substr($key,0,7)=='_extra_') { - if(!array_key_exists(substr($key,7), $extras)) $extras[substr($key,7)] = $value; - } - } - - $tutor_id = $course['tutor_name']; - $tutor_name=$platform_teachers[$tutor_id]; - - $teachers = $course['group']['course_teachers']; - - $title = $course['title']; - $category_code = $course['category_code']; - $department_name = $course['department_name']; - $department_url = $course['department_url']; - $course_language = $course['course_language']; - - $course['disk_quota'] = $course['disk_quota']*1024*1024; - - $disk_quota = $course['disk_quota']; - $visibility = $course['visibility']; - $subscribe = $course['subscribe']; - $unsubscribe = $course['unsubscribe']; - if (!stristr($department_url, 'http://')) { - $department_url = 'http://'.$department_url; - } - $sql = "UPDATE $course_table SET course_language='".Database::escape_string($course_language)."', - title='".Database::escape_string($title)."', - category_code='".Database::escape_string($category_code)."', - tutor_name='".Database::escape_string($tutor_name)."', - visual_code='".Database::escape_string($visual_code)."', - department_name='".Database::escape_string($department_name)."', - department_url='".Database::escape_string($department_url)."', - disk_quota='".Database::escape_string($disk_quota)."', - visibility = '".Database::escape_string($visibility)."', - subscribe = '".Database::escape_string($subscribe)."', - unsubscribe='".Database::escape_string($unsubscribe)."' - WHERE code='".Database::escape_string($course_code)."'"; - Database::query($sql); - - //update the extra fields - if (count($extras) > 0) { - foreach ($extras as $key => $value) { - CourseManager::update_course_extra_field_value($course_code, $key, $value); - } - } - - //Delete only teacher relations that doesn't match the selected teachers - $cond=''; - if (count($teachers)>0) { - foreach($teachers as $key) $cond.=" AND user_id<>'".$key."'"; - } - $sql='DELETE FROM '.$course_user_table.' WHERE course_code="'.Database::escape_string($course_code).'" AND status="1"'.$cond; - Database::query($sql); - - if (count($teachers)>0) { - foreach ($teachers as $key) { - - //We check if the teacher is already subscribed in this course - $sql_select_teacher = 'SELECT 1 FROM '.$course_user_table.' WHERE user_id = "'.$key.'" AND course_code = "'.$course_code.'" '; - $result = Database::query($sql_select_teacher); - - if (Database::num_rows($result) == 1) { - $sql = 'UPDATE '.$course_user_table.' SET status = "1" WHERE course_code = "'.$course_code.'" AND user_id = "'.$key.'" '; - } else { - $sql = "INSERT INTO ".$course_user_table . " SET - course_code = '".Database::escape_string($course_code). "', - user_id = '".$key . "', - status = '1', - role = '', - tutor_id='0', - sort='0', - user_course_cat='0'"; - } - Database::query($sql); - } - } - - $sql = "INSERT IGNORE INTO ".$course_user_table . " SET - course_code = '".Database::escape_string($course_code). "', - user_id = '".$tutor_id . "', - status = '1', - role = '', - tutor_id='0', - sort='0', - user_course_cat='0'"; - Database::query($sql); - - $course_info = api_get_course_info($course_code); - $course_id = $course_info['real_id']; - $forum_config_table = Database::get_course_table(TOOL_FORUM_CONFIG_TABLE); - $sql = "UPDATE ".$forum_config_table." SET default_lang='".Database::escape_string($course_language)."' WHERE c_id = $course_id "; + exit; if ($visual_code_is_used) { header('Location: course_list.php?action=show_msg&warn='.urlencode($warn)); } else { header('Location: course_list.php'); } - exit (); + } Display::display_header($tool_name); diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index ec7d5882c0..df25899a1a 100644 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -75,7 +75,7 @@ class CourseManager { CONST COURSE_FIELD_TYPE_CHECKBOX = 10; var $columns = array(); - + /** * Creates a course * @param array with the columns in the main.course table @@ -170,6 +170,101 @@ class CourseManager { } return false; } + + static function update($params) { + $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); + $course_table = Database::get_main_table(TABLE_MAIN_COURSE); + + $course_code = $params['code']; + $visual_code = $params['visual_code']; + + $field_value = new ExtraFieldValue('course'); + $params['course_code'] = $course_code; + $field_value->save_field_values($params); + + /*$tutor_id = $params['tutor_name']; + $tutor_name=$platform_teachers[$tutor_id];*/ + + $teachers = $params['group']['course_teachers']; + + $title = $params['title']; + $category_code = $params['category_code']; + $department_name = $params['department_name']; + $department_url = $params['department_url']; + $course_language = $params['course_language']; + + $course['disk_quota'] = $params['disk_quota']*1024*1024; + + $disk_quota = $params['disk_quota']; + $visibility = $params['visibility']; + $subscribe = $params['subscribe']; + $unsubscribe = $params['unsubscribe']; + if (!stristr($department_url, 'http://')) { + $department_url = 'http://'.$department_url; + } + + //tutor_name='".Database::escape_string($tutor_name)."', + $sql = "UPDATE $course_table SET + course_language='".Database::escape_string($course_language)."', + title='".Database::escape_string($title)."', + category_code='".Database::escape_string($category_code)."', + visual_code='".Database::escape_string($visual_code)."', + department_name='".Database::escape_string($department_name)."', + department_url='".Database::escape_string($department_url)."', + disk_quota='".Database::escape_string($disk_quota)."', + visibility = '".Database::escape_string($visibility)."', + subscribe = '".Database::escape_string($subscribe)."', + unsubscribe='".Database::escape_string($unsubscribe)."' + WHERE code='".Database::escape_string($course_code)."'"; + Database::query($sql); + + //Delete only teacher relations that doesn't match the selected teachers + $cond=''; + if (count($teachers)>0) { + foreach($teachers as $key) $cond.=" AND user_id<>'".$key."'"; + } + $sql='DELETE FROM '.$course_user_table.' WHERE course_code="'.Database::escape_string($course_code).'" AND status="1"'.$cond; + Database::query($sql); + + if (count($teachers)>0) { + foreach ($teachers as $key) { + //We check if the teacher is already subscribed in this course + $sql_select_teacher = 'SELECT 1 FROM '.$course_user_table.' WHERE user_id = "'.$key.'" AND course_code = "'.$course_code.'" '; + $result = Database::query($sql_select_teacher); + + if (Database::num_rows($result) == 1) { + $sql = 'UPDATE '.$course_user_table.' SET status = "1" WHERE course_code = "'.$course_code.'" AND user_id = "'.$key.'" '; + } else { + $sql = "INSERT INTO ".$course_user_table . " SET + course_code = '".Database::escape_string($course_code). "', + user_id = '".$key . "', + status = '1', + role = '', + tutor_id='0', + sort='0', + user_course_cat='0'"; + } + Database::query($sql); + } + } + + $sql = "INSERT IGNORE INTO ".$course_user_table . " SET + course_code = '".Database::escape_string($course_code). "', + user_id = '".$tutor_id . "', + status = '1', + role = '', + tutor_id='0', + sort='0', + user_course_cat='0'"; + Database::query($sql); + + $course_info = api_get_course_info($course_code); + $course_id = $course_info['real_id']; + $forum_config_table = Database::get_course_table(TOOL_FORUM_CONFIG_TABLE); + $sql = "UPDATE ".$forum_config_table." SET default_lang='".Database::escape_string($course_language)."' WHERE c_id = $course_id "; + Database::query($sql); + return $course_info; + } /** * Returns all the information of a given coursecode diff --git a/tests/migrate/migration.class.php b/tests/migrate/migration.class.php index d925e68328..d413ee51e7 100644 --- a/tests/migrate/migration.class.php +++ b/tests/migrate/migration.class.php @@ -146,56 +146,83 @@ class Migration { } } } - - function search_transactions($url, $params) { - $libpath = api_get_path(LIBRARY_PATH); - error_log('search_transactions'); - - // Create the client instance - error_log("Looking $url"); + + function soap_call($web_service_params, $function_name, $params = array()) { + // Create the client instance + $url = $web_service_params['url']; + error_log("\nCalling function '$function_name' in $url with params: "); + var_dump($params); try { $client = new SoapClient($url); } catch (SoapFault $fault) { $error = 1; die('Error connecting'); - } + } + $client->debug_flag = true; - try { - $user_details = $client->retornaDatos($params); + try { + $data = $client->$function_name($params); } catch (SoapFault $fault) { $error = 2; - die('Problem querying service'); + die("Problem querying service - $function_name"); } - - if (!empty($user_details)) { - $xml = $user_details->retornaDatosResult->any; - // Cut the invalid XML and extract the valid chunk with the data - $stripped_xml = strstr($xml, 'NewDataSet as $user) { //this is a "Table" object - $u = $user->Table; - //here we have the data, so if this whole block is integrated into a funcion, return - echo 'firstname: ' . $u->vchprimernombre . ' ' . $u->vchsegundonombre . "\n" . 'lastname: ' . $u->vchpaterno . ' ' . $u->vchmaterno . "\n"; - } + + if (!empty($data)) { + error_log("Calling {$web_service_params['class']}::$function_name"); + $result = $web_service_params['class']::$function_name($data); } else { - //echo 'User was not recovered, activate the debug=true in the registration.soap.php file and see the error logs'."\n"; + error_log('No data found'); } + error_log("\n--End--"); + } + + function search_transactions($web_service_params) { + $libpath = api_get_path(LIBRARY_PATH); + error_log('search_transactions'); + + //Testing transactions + + $result = self::soap_call($web_service_params, 'transacciones', array('ultimo' => 1, 'cantidad' => 10)); + + $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')); - //Called transactions from Web service - //transacciones_detalles(id_last_transaction=0, transactions_number=10) - - //Add transactions here - $params = array( - 'action' => 'usuario_agregar', - 'item_id' => '1', - 'orig_id' => '0', - 'branch_id' => '1', - 'dest_id' => null, - 'status_id' => 0 - ); - self::add_transaction($params); + $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')); + + if (!empty($result)) { + error_log(count($result)." transactions found: "); + foreach ($result as $transaction_info) { + /* + id transaccion + id sede + id accion + id + origen + destino + timestamp + */ + //Add transactions here + $params = array( + 'action' => 'usuario_agregar', + 'item_id' => '1', + 'orig_id' => '0', + 'branch_id' => $transaction_info['sede'], + 'dest_id' => null, + 'status_id' => 0 + ); + $transaction_id = self::add_transaction($params); + if ($transaction_id) { + error_log("Transaction #$transaction_id was created"); + } + } + } } function add_transaction($params) { @@ -263,6 +290,7 @@ class Migration { } function update_transaction($params) { + return false; $table = Database::get_main_table(TABLE_MIGRATION_TRANSACTION); if (empty($params['id'])) { error_log('No transaction id provided during update_transaction'); @@ -281,7 +309,8 @@ class Migration { /* Load transactions */ - function load_transactions($actions) { + function load_transactions($matches) { + $actions = $matches['actions']; //Getting transactions of the migration_transaction table $branches = self::get_branches(); @@ -304,6 +333,7 @@ class Migration { //Looping transactions foreach ($transactions as $transaction) { + //Calculating percentage $percentage = $item / $count * 100; if (round($percentage) % 10 == 0) { @@ -325,7 +355,7 @@ class Migration { //Loading function $function_to_call = "transaction_" . $transaction['action']; if (method_exists('MigrationCustom', $function_to_call)) { - $result = MigrationCustom::$function_to_call($transaction); + $result = MigrationCustom::$function_to_call($transaction, $matches['web_service_calls']); error_log("Calling function $function_to_call"); if ($result) { diff --git a/tests/migrate/migration.custom.class.php b/tests/migrate/migration.custom.class.php index e789d77cb5..afa53ce86f 100644 --- a/tests/migrate/migration.custom.class.php +++ b/tests/migrate/migration.custom.class.php @@ -148,8 +148,7 @@ class MigrationCustom { $data['status'] = STUDENT; if (isset($data['uidIdEmpleado'])) { $data['status'] = COURSEMANAGER; - } - + } if (!isset($data['username']) || empty($data['username'])) { $data['firstname'] = (string) trim($data['firstname']); @@ -328,7 +327,7 @@ class MigrationCustom { } } - static function create_attendance($data) { + static function create_attendance($data) { error_log('create_attendance'); $session_id = $data['session_id']; $user_id = $data['user_id']; @@ -668,7 +667,7 @@ class MigrationCustom { 'message' => "User was created : $user_id", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL ); - } else { + } else { return array( 'message' => "User was not created : $uidIdPersonaId", 'status_id' => self::TRANSACTION_STATUS_FAILED @@ -684,11 +683,18 @@ class MigrationCustom { $uidIdPersonaId = $data['item_id']; $user_id = self::get_user_id_by_persona_id($uidIdPersonaId); if ($user_id) { - UserManager::delete_user($user_id); - return array( - 'message' => "User was deleted : $user_id", - 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL - ); + $result = UserManager::delete_user($user_id); + if ($result) { + return array( + 'message' => "User was deleted : $user_id", + 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL + ); + } else { + return array( + 'message' => "User was NOT deleted : $user_id error while calling function UserManager::delete_user", + 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL + ); + } } else { return array( 'message' => "User was not found : $uidIdPersonaId", @@ -701,7 +707,7 @@ class MigrationCustom { static function transaction_usuario_editar($data, $web_service_details) { $uidIdPersonaId = $data['item_id']; $user_id = self::get_user_id_by_persona_id($uidIdPersonaId); - if ($user_id) { + if ($user_id) { $user_info = $web_service_details['class']::usuarioDetalles($uidIdPersonaId); if ($user_info['error'] == false) { //Edit user @@ -728,6 +734,7 @@ class MigrationCustom { $uidIdPrograma = $data['orig_id']; $uidIdProgramaDestination = $data['dest_id']; $user_id = self::get_user_id_by_persona_id($uidIdPersona); + if (empty($user_id)) { return array( 'message' => "User does not exists: $uidIdPersona", @@ -750,7 +757,7 @@ class MigrationCustom { ); } else { return array( - 'message' => "Session does not exists $uidIdProgramaDestination - Move Session A to Session B", + 'message' => "Session ids were not correctly setup session_id 1: $session_id Session id 2 $uidIdProgramaDestination - Move Session A to Session B", 'status_id' => self::TRANSACTION_STATUS_FAILED ); } @@ -790,7 +797,7 @@ class MigrationCustom { //Cursos //aƱadir curso curso_agregar CID static function transaction_curso_agregar($data, $web_service_details) { - $uidCursoId = $data['item_id']; + $uidCursoId = $data['item_id']; $course_info = $web_service_details['class']::cursoDetalles($uidCursoId); if ($course_info['error'] == false) { $course_code = CourseManager::create_course($course_info); @@ -832,16 +839,18 @@ class MigrationCustom { static function transaction_curso_editar($data, $web_service_details) { $course_code = self::get_real_course_code($data['item_id']); if (!empty($course_code)) { - $course_info = $web_service_details['class']::cursoDetalles($data['item_id']); - if ($course_info['error'] == false) { + $course_info = api_get_course_info($course_code); + $data_to_update = $web_service_details['class']::cursoDetalles($data['item_id']); + if ($data_to_update['error'] == false) { //do some cleaning - CourseManager::update_attributes($course_info['real_id'], $course_info); + $data_to_update['code'] = $course_info['code']; + CourseManager::update($data_to_update); return array( 'message' => "Course was updated $course_code ", 'status_id' => self::TRANSACTION_STATUS_SUCCESSFUL ); } else { - return $course_info; + return $data_to_update; } } else { return array(