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