Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/tests/migrations/claroline/1.11.10/migrate.class.php

99 lines
3.4 KiB

<?php
/**
* Functions used by migrate.php to migrate from Claroline to Chamilo
*/
class Migrate {
public $db;
public $userIdChanges = array(); // Previous ID => New ID array
public function __construct() {
require __DIR__.'/config.php';
$this->db = new PDO(
"mysql:host=$sourceHost;dbname=$sourceDB",
$sourceUser,
$sourcePass
);
$this->dbName = $sourceDB;
$this->dbSingle = $sourceSingle;
$this->dbTablePrefix = $sourcePref;
}
/**
* Migrate users
* @return int Number of users migrated
*/
public function migrateUsers() {
$count = 0;
// Claroline => Chamilo
$match = array(
'user_id' => 'id',
'nom' => 'lastname',
'prenom' => 'firstname',
'username' => 'username',
'password' => 'password',
'language' => 'language',
'authSource' => 'auth_source', //in Claroline: claroline. In Chamilo: platform
'email' => 'email',
'officialCode' => 'official_code',
'phoneNumber' => 'phone',
'pictureUri' => 'picture_uri',
'creatorId' => 'creator_id',
'isPlatformAdmin' => 'is_admin', //existence in admin table (see below)
'isCourseCreator' => 'status', //Claro: 1=teacher, 0=student. Chamilo: 1=teacher, 5=student
'lastLogin' => 'last_login',
);
$sql = "SELECT * FROM ".$this->dbName.".".$this->dbTablePrefix."user ORDER BY user_id";
$stmt = $this->db->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll();
foreach ($rows as $row) {
//print_r($row);
$user = array();
foreach ($match as $source => $dest) {
$user[$dest] = $row[$source];
}
if ($row['user_id'] == 1) {
// skip first user to try and keep the same user IDs for all users
continue;
}
if ($row['isCourseCreator'] == 0) {
$user['status'] = 5;
}
if ($row['authSource'] == 'claroline') {
$user['auth_source'] = 'platform';
}
$newUserId = UserManager::create_user(
$user['firstname'],
$user['lastname'],
$user['status'],
$user['email'],
$user['username'],
$user['password'],
$user['official_code'],
$user['language'],
$user['phone'],
$user['picture_uri'],
$user['auth_source'],
null,
null,
null,
null,
null,
null,
$user['is_admin']
);
// Now we have created the user, but we'll try to give it the
// same ID as in the original database, or otherwise store the
// new ID in an array for later re-use
$sql = "SELECT username FROM user WHERE id = " . $user['id'] . " AND username != '".$user['username']."'";
$res = Database::query($sql);
$num = Database::num_rows($res);
if ($num > 0) {
//The ID is already used by someone else
$this->userIdChanges[$user['id']] = $newUserId;
}
$count++;
}
return $count;
}
}