Adding changes in the migration, adding transactions calls + moving course_edit update code in course.lib.php see BT#4882

skala
Julio Montoya 13 years ago
parent 6e264cd484
commit 3156095183
  1. 116
      main/admin/course_edit.php
  2. 97
      main/inc/lib/course.lib.php
  3. 108
      tests/migrate/migration.class.php
  4. 41
      tests/migrate/migration.custom.class.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);

@ -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

@ -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, '<diffgr:diffgram');
$xml = simplexml_load_string($stripped_xml);
//print_r($xml);
foreach ($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) {

@ -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(

Loading…
Cancel
Save