Errore importazione utenti in gruppi

Domande sulle funzionalità di backend: amministrazione utenti e corsi, certificati, iscrizioni, report, ...
Post Reply
keyos
Newbie
Posts: 3
Joined: Sat Dec 03, 2016 8:30 am
Version: forma.lms 1.4.2

Errore importazione utenti in gruppi

Post by keyos »

Buongiorno a tutti,

abbiamo rilevato un problema nel processo di importazione utenze all'interno di un gruppo, nel momento in cui nel file importato sono presenti dei duplicati; proviamo a spiegare nel miglior modo possibile.

La presenza di duplicati non viene completamente gestita e il risultato è che l'importazione sembra andare a buon fine (il form di risposta segnala l'avvenuta importazione) ma di fatto non viene scritto nulla a database in quanto la query fallisce (errore di chiave duplicata).

Come riprodurre la situazione critica:
- creare un csv/txt contenente gli userid da importare nel gruppo, avendo cura di inserire almeno un duplicato
- andare in Utenti/Gestione Gruppi, selezionare un gruppo, selezionare la funzione importa
- selezionare il file csv e procedere con l'importazione
A questo punto, se nel file abbiamo messo 4 righe (con 3 utenze uniche) il responso dell'importazione sarà: Totale 4, Inserted 4, duplicated 0, not inserted 0.
Non è così perchè tornando alla gestione gruppi il gruppo è ancora vuoto (e in ogni caso le utenze dovrebbero essere 3 e non 4).

La funzione importGroupMembers (/appCore/models/GroupmanagementAdm.php) riceve l'array $users con gli identificativi da utilizzare per l'import (duplicati compresi, se presenti nel file di origine), ricavando altri array con le informazioni utili (idst, userid completo, etc.); in questa fase viene verificata la presenza o meno nel gruppo e l'eliminazione di duplicati dagli arrays creati e gestiti all'interno della funzione.

Nel momento in cui viene preparata la parte di query per l'insert (riga 521) viene tuttavia utilizzato l'array $users ricevuto dalla funzione, che ancora contiene eventuali duplicati; ne consegue che vi siano ripetizioni nella coppie di valori predisposte per la insert (idst,idstMember) e che la query fallisca (per l'errore di chiave).

Code: Select all

foreach ($users as $key_u)  // $users non è stato modificato o trattato
		{
			if (isset($users_idst[$key_u]))
			{
				$idst_u = $users_idst[$key_u];

				//check if a duplicate exists
				if (in_array($idst_u, $dup) !== false)
					$dup_counter++;
				else
				{
					$counter++;
					$insert_values[] = "(".$id_group.", ".$idst_u.")";
				}
			}
		}

La soluzione più immediata che abbiamo adottato è quella di rimuovere eventuali duplicati direttamente all'inizio della funzione.
Ovvero da

Code: Select all

public function importGroupMembers($users, $id_group) {
		$output = array(
			'total' => 0,
			................
A

Code: Select all

	public function importGroupMembers($users, $id_group) {
	    $users = array_unique($users);	    
		$output = array(
			'total' => 0,
			................			
Versioni di forma: 1.4.2, 1.4.3, 2.0alpha09, 2.0alpha11
User avatar
max
FormaLms Guru
Posts: 2735
Joined: Thu Mar 01, 2012 10:41 am
Version: forma.lms 2.4
Contact:

Re: Errore importazione utenti in gruppi

Post by max »

Buongiorno,
grazie della segnalazione e del fix, segnalo subito agli sviluppatori
---------------------
Massimiliano Ferrari
Elearnit - Elearning e Knowledge Management
https://www.elearnit.net
https://www.linkedin.com/in/massimilianoferrari
m.ferrari[at]elearnit.net
Skype: m_ferrari_it
Post Reply