More modifications during the migration of data see BT#4875

skala
Julio Montoya 13 years ago
parent 29c81a48fa
commit f5a9f57f57
  1. 4
      main/inc/lib/database.lib.php
  2. 81
      main/inc/lib/extra_field_value.lib.php
  3. 23
      main/inc/lib/sessionmanager.lib.php
  4. 42
      tests/migrate/migration.custom.class.php
  5. 6
      tests/migrate/migration.mssql.class.php

@ -13,10 +13,6 @@
*
* @package chamilo.library
*/
/**
* Constants definition
*/
require_once 'database.constants.inc.php';
/**
* Database class definition

@ -125,7 +125,7 @@ class ExtraFieldValue extends Model {
/**
*
* @param int handler_id (session_id, course_id, etc)
* @param int handler_id (It could be a session_id, course_id or user_id)
* @param int $field_id
* @param bool transform the result to a human readable strings
* @return boolean
@ -134,9 +134,57 @@ class ExtraFieldValue extends Model {
$field_id = intval($field_id);
$item_id = Database::escape_string($item_id);
$sql = "SELECT s.*, field_type FROM {$this->table} s INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE {$this->handler_id} = '$item_id' AND field_id = '".$field_id."' ORDER BY id";
$sql = "SELECT s.*, field_type FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE {$this->handler_id} = '$item_id' AND
field_id = '".$field_id."'
ORDER BY id";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$result = Database::fetch_array($result, 'ASSOC');
if ($transform) {
if (!empty($result['field_value'])) {
switch ($result['field_type']) {
case ExtraField::FIELD_TYPE_DOUBLE_SELECT:
$field_option = new ExtraFieldOption($this->type);
$options = explode('::', $result['field_value']);
// only available for PHP 5.4 :( $result['field_value'] = $field_option->get($options[0])['id'].' -> ';
$result = $field_option->get($options[0]);
$result_second = $field_option->get($options[1]);
if (!empty($result)) {
$result['field_value'] = $result['option_display_text'].' -> ';
$result['field_value'] .= $result_second['option_display_text'];
}
break;
case ExtraField::FIELD_TYPE_SELECT:
$field_option = new ExtraFieldOption($this->type);
$extra_field_option_result = $field_option->get_field_option_by_field_and_option($result['field_id'], $result['field_value']);
if (isset($extra_field_option_result[0])) {
$result['field_value'] = $extra_field_option_result[0]['option_display_text'];
}
break;
}
}
}
return $result;
} else {
return false;
}
}
public function get_values_by_handler_and_field_variable($item_id, $field_variable, $transform = false) {
$field_id = intval($field_id);
$item_id = Database::escape_string($item_id);
$field_variable = Database::escape_string($field_variable);
$sql = "SELECT s.*, field_type FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE {$this->handler_id} = '$item_id' AND
field_variable = '".$field_variable."'
ORDER BY id";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$result = Database::fetch_array($result, 'ASSOC');
@ -158,18 +206,29 @@ class ExtraFieldValue extends Model {
return $result;
} else {
return false;
}
/*$field = Database::escape_string($field);
$sql_field = "SELECT id FROM {$this->table} WHERE field_variable = '$field'";
$result = Database::query($sql_field);
if (Database::num_rows($result)) {
$r_field = Database::fetch_row($result);
return $r_field;
}
}
public function get_item_id_from_field_variable_and_field_value($field_variable, $field_value, $transform = false) {
$field_value = Database::escape_string($field_value);
$field_variable = Database::escape_string($field_variable);
$sql = "SELECT {$this->handler_id} FROM {$this->table} s
INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)
WHERE field_value = '$field_value' AND
field_variable = '".$field_variable."'
";
$result = Database::query($sql);
if (Database::num_rows($result)) {
$result = Database::fetch_array($result, 'ASSOC');
return $result;
} else {
return false;
}*/
}
}
/* Get all values by field id */
public function get_values_by_field_id($field_id) {
$sql = "SELECT s.*, field_type FROM {$this->table} s INNER JOIN {$this->table_handler_field} sf ON (s.field_id = sf.id)

@ -169,7 +169,7 @@ class SessionManager {
$where = 'WHERE 1 = 1 ';
$user_id = api_get_user_id();
if (api_is_session_admin() && api_get_setting('allow_session_admins_to_manage_all_sessions') == 'false') {
$where.=" AND s.session_admin_id = $user_id ";
}
@ -215,10 +215,9 @@ class SessionManager {
$options_by_double = array();
foreach ($double_fields as $double) {
$my_options = $extra_field_option->get_field_options_by_field($double['id'], true);
$options_by_double['extra_'.$double['field_variable']] = $my_options;
//$options_by_double['extra_'.$double['field_variable'].'_second'] = true;
$options_by_double['extra_'.$double['field_variable']] = $my_options;
}
//var_dump($options_by_double);
//sc.name as category_name,
$select = "SELECT * FROM (SELECT
@ -267,8 +266,9 @@ class SessionManager {
$query = "$select
FROM $tbl_session s
LEFT JOIN $tbl_session_field_values fv ON (fv.session_id = s.id)
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_session_category sc ON s.session_category_id = sc.id
LEFT JOIN $tbl_session_rel_course src ON (src.id_session = s.id)
LEFT JOIN $tbl_course c ON (src.course_code = c.code)
LEFT JOIN $tbl_session_category sc ON (s.session_category_id = sc.id)
INNER JOIN $tbl_user u ON (s.id_coach = u.user_id)
INNER JOIN $table_access_url_rel_session ar ON (ar.session_id = s.id)
$where";
@ -307,22 +307,21 @@ class SessionManager {
switch ($session['visibility']) {
case SESSION_VISIBLE_READ_ONLY: //1
$session['visibility'] = get_lang('ReadOnly');
break;
break;
case SESSION_VISIBLE: //2
case SESSION_AVAILABLE: //4
$session['visibility'] = get_lang('Visible');
break;
break;
case SESSION_INVISIBLE: //3
$session['visibility'] = api_ucfirst(get_lang('Invisible'));
break;
break;
}
//Cleaning double selects
//var_dump($session);
foreach ($session as $key => &$value) {
if (isset($options_by_double[$key]) || isset($options_by_double[$key.'_second'])) {
$options = explode('::', $value);
//var_dump($options);
$options = explode('::', $value);
}
$original_key = $key;
@ -352,7 +351,7 @@ class SessionManager {
}
}
}
//var_dump($formatted_sessions);
return $formatted_sessions;
}

@ -94,7 +94,7 @@ class MigrationCustom {
public function get_real_course_code($data, &$omigrate, $row_data) {
if (!isset($omigrate['courses'][$data])) {
error_log("Course not found in data_list array");
error_log(print_r($data, 1));
//error_log(print_r($data, 1));
//exit;
}
return $omigrate['courses'][$data]['code'];
@ -284,15 +284,37 @@ class MigrationCustom {
return $session_id;
}
public function add_user_to_session($data, $data_list) {
error_log('add_user_to_session');
public function add_user_to_session($data) {
//error_log('add_user_to_session');
///print_r($data);
if (!empty($data['session_id']) && !empty($data['user_id'])) {
SessionManager::suscribe_users_to_session($data['session_id'], array($data['user_id']));
} else {
error_log('missing data');
error_log(print_r($data, 1));
exit;
}
//Search uidIdPrograma
//Search uidIdAlumno
$extra_field_value = new ExtraFieldValue('session');
$result = $extra_field_value->get_item_id_from_field_variable_and_field_value('uidIdPrograma', $data['uidIdPrograma']);
$session_id = null;
$user_id = null;
if ($result && $result['session_id']) {
$session_id = $result['session_id'];
}
$extra_field_value = new ExtraFieldValue('user');
$result = $extra_field_value->get_item_id_from_field_variable_and_field_value('uidIdPersona', $data['uidIdPersona']);
if ($result && $result['user_id']) {
$user_id = $result['user_id'];
}
if (!empty($session_id) && !empty($user_id)){
error_log('Called: add_user_to_session - Subscribing: session_id: '.$session_id. ' user_id: '.$user_id);
SessionManager::suscribe_users_to_session($session_id, array($user_id));
} else {
//error_log('Called: add_user_to_session - No idPrograma: '.$data['uidIdPrograma'].' - No uidIdPersona: '.$data['uidIdPersona']);
}
}
}

@ -32,13 +32,13 @@ class MigrationMSSQL extends Migration {
}
//In order to process X item of each table add TOP X
$top = " TOP 50000 ";
$top = " TOP 100 ";
if (in_array($table, array('Empleado', 'Alumno'))) {
$top = " TOP 2000 ";
$top = " TOP 100 ";
}
if (in_array($table, array('ProgramaAcademico', 'Matricula'))) {
$top = " ";
$top = " ";
}
//$top = null;

Loading…
Cancel
Save