parent
							
								
									f9a5a673f3
								
							
						
					
					
						commit
						0f817c8234
					
				@ -0,0 +1,99 @@ | 
				
			||||
<?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; | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue