Updating entities now depends in the external ids see BT#6369

1.9.x
Julio Montoya 12 years ago
parent 2fdabe5efd
commit 0c88a3ceec
  1. 172
      main/cron/import_csv.php
  2. 11
      main/inc/lib/course.lib.php
  3. 74
      main/inc/lib/sessionmanager.lib.php

@ -1,6 +1,6 @@
<?php
if (PHP_SAPI!='cli') {
if (PHP_SAPI !='cli') {
die('Run this script through the command line or comment this line in the code');
}
@ -16,6 +16,11 @@ class ImportCsv
private $dumpValues;
public $test;
public $defaultLanguage = 'dutch';
public $extraFieldIdNameList = array(
'session' => 'external_session_id',
'course' => 'external_course_id',
'user' => 'external_user_id',
);
/**
* @param Logger $logger
@ -50,49 +55,7 @@ class ImportCsv
}
if ($this->getDumpValues()) {
$table = Database::get_main_table(TABLE_MAIN_USER);
$sql = "DELETE FROM $table WHERE username NOT IN ('admin') AND lastname <> 'Anonymous' ";
Database::query($sql);
echo 'Dumping tables'.PHP_EOL;
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$this->dumpDatabaseTables();
}
echo "Starting with reading the files: ".PHP_EOL.PHP_EOL;
@ -129,6 +92,7 @@ class ImportCsv
}
$sections = array('students', 'teachers', 'courses', 'sessions');
$sections = array('sessions');
$this->prepareImport();
@ -155,12 +119,12 @@ class ImportCsv
private function prepareImport()
{
// Create user extra field: extra_external_user_id
UserManager::create_extra_field('external_user_id', 1, 'External user id', null);
UserManager::create_extra_field($this->extraFieldIdNameList['user'], 1, 'External user id', null);
// Create course extra field: extra_external_course_id
CourseManager::create_course_extra_field('external_course_id', 1, 'External course id');
CourseManager::create_course_extra_field($this->extraFieldIdNameList['course'], 1, 'External course id');
// Create session extra field extra_external_session_id
SessionManager::create_session_extra_field('external_session_id', 1, 'External session id');
SessionManager::create_session_extra_field($this->extraFieldIdNameList['session'], 1, 'External session id');
}
/**
@ -200,11 +164,11 @@ class ImportCsv
$row['phone'] = $row['PhoneNumber'];
if (isset($row['StudentID'])) {
$row['extra_external_user_id'] = $row['StudentID'];
$row['extra_'.$this->extraFieldIdNameList['user']] = $row['StudentID'];
}
if (isset($row['TeacherID'])) {
$row['extra_external_user_id'] = $row['TeacherID'];
$row['extra_'.$this->extraFieldIdNameList['user']] = $row['TeacherID'];
}
//$row['lastname'] = Status
@ -222,16 +186,13 @@ class ImportCsv
$row['course_category'] = $row['CourseCategory'];
$row['email'] = $row['Teacher'];
$row['language'] = $row['Language'];
$row['external_id'] = $row['CourseID'];
if (isset($row['CourseID'])) {
$row['extra_external_course_id'] = $row['CourseID'];
$row['extra_'.$this->extraFieldIdNameList['course']] = $row['CourseID'];
}
return $row;
}
/**
* File to import
* @param string $file
@ -254,7 +215,10 @@ class ImportCsv
$this->logger->addInfo(count($data)." records found.");
foreach ($data as $row) {
$row = $this->cleanUserRow($row);
$userInfo = api_get_user_info_from_username($row['username']);
$user_id = UserManager::get_user_id_from_original_id($row['extra_'.$this->extraFieldIdNameList['user']], $this->extraFieldIdNameList['user']);
$userInfo = api_get_user_info($user_id);
//$userInfo = api_get_user_info_from_username($row['username']);
$userInfoByOfficialCode = api_get_user_info_from_official_code($row['official_code']);
if (empty($userInfo) && empty($userInfoByOfficialCode)) {
@ -356,7 +320,14 @@ class ImportCsv
$this->logger->addInfo(count($data)." records found.");
foreach ($data as $row) {
$row = $this->cleanUserRow($row);
$userInfo = api_get_user_info_from_username($row['username']);
//$userInfo = api_get_user_info_from_username($row['username']);
$user_id = UserManager::get_user_id_from_original_id($row['extra_'.$this->extraFieldIdNameList['user']], $this->extraFieldIdNameList['user']);
$userInfo = array();
if (!empty($user_id)) {
$userInfo = api_get_user_info($user_id);
}
$userInfoByOfficialCode = api_get_user_info_from_official_code($row['official_code']);
if (empty($userInfo) && empty($userInfoByOfficialCode)) {
@ -451,13 +422,17 @@ class ImportCsv
{
$data = Import::csv_to_array($file);
$language = $this->defaultLanguage;
//$language = $this->defaultLanguage;
if (!empty($data)) {
$this->logger->addInfo(count($data)." records found.");
foreach ($data as $row) {
$row = $this->cleanCourseRow($row);
$courseInfo = api_get_course_info($row['course_code']);
$courseCode = CourseManager::get_course_id_from_original_id($row['extra_'.$this->extraFieldIdNameList['course']], $this->extraFieldIdNameList['course']);
//$courseInfo = api_get_course_info($row['course_code']);
$courseInfo = api_get_course_info($courseCode);
if (empty($courseInfo)) {
// Create
$params = array();
@ -466,12 +441,11 @@ class ImportCsv
$params['wanted_code'] = $row['course_code'];
$params['course_category'] = $row['course_category'];
$params['course_language'] = $row['language'];
//$params['gradebook_model_id'] = isset($course_values['gradebook_model_id']) ? $course_values['gradebook_model_id'] : null;
$courseInfo = CourseManager::create_course($params);
if (!empty($courseInfo)) {
CourseManager::update_course_extra_field_value($courseInfo['code'], 'external_course_id', $row['extra_external_course_id']);
CourseManager::update_course_extra_field_value($courseInfo['code'], 'external_course_id', $row['extra_'.$this->extraFieldIdNameList['course']]);
$this->logger->addInfo("Courses - Course created ".$courseInfo['code']);
} else {
$this->logger->addError("Courses - Can't create course:".$row['title']);
@ -482,8 +456,7 @@ class ImportCsv
$params = array(
'title' => $row['title'],
);
$result = CourseManager::update_attributes($courseInfo['id'], $params);
$result = CourseManager::update_attributes($courseInfo['real_id'], $params);
if ($result) {
$this->logger->addInfo("Courses - Course updated ".$courseInfo['code']);
@ -501,7 +474,14 @@ class ImportCsv
*/
private function importSessions($file)
{
$result = SessionManager::importCSV($file, true, 1, $this->logger, array('SessionId' => 'extra_external_session_id'));
$result = SessionManager::importCSV(
$file,
true,
1,
$this->logger,
array('SessionID' => 'extra_'.$this->extraFieldIdNameList['session']),
$this->extraFieldIdNameList['session']
);
if (!empty($result['error_message'])) {
$this->logger->addError($result['error_message']);
@ -509,6 +489,74 @@ class ImportCsv
$this->logger->addInfo("Sessions - Sessions parsed: ".$result['session_counter']);
$this->moveFile($file);
}
private function dumpDatabaseTables()
{
echo 'Dumping tables'.PHP_EOL;
// User
$table = Database::get_main_table(TABLE_MAIN_USER);
$sql = "DELETE FROM $table WHERE username NOT IN ('admin') AND lastname <> 'Anonymous' ";
Database::query($sql);
echo $sql.PHP_EOL;
// Course
$table = Database::get_main_table(TABLE_MAIN_COURSE);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
// Sessions
$table = Database::get_main_table(TABLE_MAIN_SESSION);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
// Extra fields
$table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
$table = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$sql = "DELETE FROM $table";
Database::query($sql);
echo $sql.PHP_EOL;
}
}
use Monolog\Logger;

@ -86,7 +86,8 @@ class CourseManager {
* @param array with the columns in the main.course table
* @param mixed false if the course was not created, array with the course info
*/
static function create_course($params) {
static function create_course($params)
{
global $_configuration;
// Check portal limits
$access_url_id = 1;
@ -3244,18 +3245,18 @@ class CourseManager {
/**
* Get the course id based on the original id and field name in the extra fields. Returns 0 if course was not found
*
* @param string Original course id
* @param string Original course code
* @param string Original field name
* @return int Course id
*/
public static function get_course_id_from_original_id($original_course_id_value, $original_course_id_name) {
$t_cfv = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
$table_field = Database::get_main_table(TABLE_MAIN_COURSE_FIELD);
$sql_course = "SELECT id FROM $table_field cf INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'";
$sql_course = "SELECT course_code FROM $table_field cf INNER JOIN $t_cfv cfv ON cfv.field_id=cf.id WHERE field_variable='$original_course_id_name' AND field_value='$original_course_id_value'";
$res = Database::query($sql_course);
$row = Database::fetch_object($res);
if($row != false) {
return $row->id;
if ($row != false) {
return $row->course_code;
} else {
return 0;
}

@ -302,7 +302,6 @@ class SessionManager
if (!empty($options['order'])) {
$query .= " ORDER BY ".$options['order'];
}
//var_dump($query);
$result = Database::query($query);
$formatted_sessions = array();
@ -1873,7 +1872,7 @@ class SessionManager
* converted to extra_external_session_id if you set this: array('SessionId' => 'extra_external_session_id')
* @return array
*/
static function importCSV($file, $updatesession, $user_id = null, $logger = null, $extraFields = array())
static function importCSV($file, $updatesession, $user_id = null, $logger = null, $extraFields = array(), $extraFieldId = null)
{
$content = file($file);
@ -1884,6 +1883,11 @@ class SessionManager
$user_id = api_get_user_id();
}
$eol = PHP_EOL;
if (PHP_SAPI !='cli') {
$eol = '<br />';
}
$debug = false;
if (isset($logger)) {
$debug = true;
@ -1995,7 +1999,19 @@ class SessionManager
}
$session_counter++;
} else {
$my_session_result = SessionManager::get_session_by_name($session_name);
$sessionId = null;
if (isset($extraFields) && !empty($extraFields)) {
$sessionId = self::get_session_id_from_original_id($enreg['extra_'.$extraFieldId], 'extra_'.$extraFieldId);
if (empty($sessionId)) {
$my_session_result = false;
} else {
$my_session_result = true;
}
} else {
$my_session_result = self::get_session_by_name($session_name);
}
if ($my_session_result === false) {
// Creating a session.
@ -2025,24 +2041,40 @@ class SessionManager
}
}
} else {
// The session already exists, update it then.
$sql_session = "UPDATE $tbl_session SET
id_coach = '$coach_id',
date_start = '$date_start',
date_end = '$date_end',
visibility = '$visibility',
session_category_id = '$session_category_id'
WHERE name = '$session_name'";
Database::query($sql_session);
$session_id = Database::query("SELECT id FROM $tbl_session WHERE name='$session_name'");
if (isset($sessionId) && !empty($sessionId)) {
// The session already exists, update it then.
$sql_session = "UPDATE $tbl_session SET
id_coach = '$coach_id',
date_start = '$date_start',
date_end = '$date_end',
visibility = '$visibility',
session_category_id = '$session_category_id'
WHERE id = '$sessionId'";
//name = '$session_name'
Database::query($sql_session);
$session_id = $sessionId;
} else {
// The session already exists, update it then.
$sql_session = "UPDATE $tbl_session SET
id_coach = '$coach_id',
date_start = '$date_start',
date_end = '$date_end',
visibility = '$visibility',
session_category_id = '$session_category_id'
WHERE name = '$session_name'";
Database::query($sql_session);
$row = Database::query("SELECT id FROM $tbl_session WHERE name='$session_name'");
list($session_id) = Database::fetch_array($row);
}
foreach ($enreg as $key => $value) {
if (substr($key, 0, 6) == 'extra_') { //an extra field
self::update_session_extra_field_value($session_id, substr($key, 6), $value);
}
}
list($session_id) = Database::fetch_array($session_id);
Database::query("DELETE FROM $tbl_session_user WHERE id_session='$session_id'");
Database::query("DELETE FROM $tbl_session_course WHERE id_session='$session_id'");
Database::query("DELETE FROM $tbl_session_course_user WHERE id_session='$session_id'");
@ -2129,7 +2161,7 @@ class SessionManager
$logger->addInfo("Sessions - Adding course coach: user #$coach_id ($course_coach) to course: '$course_code' and session #$session_id");
}
} else {
$error_message .= get_lang('UserDoesNotExist').' : '.$user.'<br />';
$error_message .= get_lang('UserDoesNotExist').' : '.$course_coach.$eol;
}
}
}
@ -2137,8 +2169,10 @@ class SessionManager
$users_in_course_counter = 0;
// Adding the relationship "Session - Course - User".
foreach ($course_users as $user) {
$user_id = UserManager::get_user_id_from_username($user);
if ($user_id !== false) {
$sql = "INSERT IGNORE INTO $tbl_session_course_user SET
id_user='$user_id',
@ -2150,9 +2184,10 @@ class SessionManager
}
$users_in_course_counter++;
} else {
$error_message .= get_lang('UserDoesNotExist').': '.$user.'<br />';
$error_message .= get_lang('UserDoesNotExist').': '.$user.$eol;
}
}
$sql = "UPDATE $tbl_session_course SET nbr_users='$users_in_course_counter' WHERE course_code='$course_code'";
Database::query($sql);
@ -2162,11 +2197,13 @@ class SessionManager
// TODO: We should create the course as in the XML import.
}
if (CourseManager::course_exists($course_code, true)) {
$list = CourseManager :: get_courses_info_from_visual_code($course_code);
foreach ($list as $vcourse) {
if ($vcourse['code'] == $course_code) {
// Ignore, this has already been inserted.
} else {
@ -2201,10 +2238,11 @@ class SessionManager
}
} else {
$error_message .= get_lang('UserDoesNotExist').' : '.$user.'<br />';
$error_message .= get_lang('UserDoesNotExist').' : '.$course_coach.$eol;
}
}
$users_in_course_counter = 0;
// Adding the relationship "Session - Course - User".
foreach ($course_users as $user) {
@ -2222,7 +2260,7 @@ class SessionManager
$users_in_course_counter++;
} else {
$error_message .= get_lang('UserDoesNotExist').' : '.$user.'<br />';
$error_message .= get_lang('UserDoesNotExist').' : '.$user.$eol;
}
}
Database::query("UPDATE $tbl_session_course SET nbr_users='$users_in_course_counter' WHERE course_code='".$vcourse['code']."'");

Loading…
Cancel
Save