lug
21
2009
inserire lista utenti su joomla
Author: adminQuando si passa da un CMS ad un altro spesso non si sa bene cosa fare degli utenti registrati.
La soluzione più elementare è comunicare loro le coordinate per iscriversi nuovamente ma non è certo elegantissimo.
Reinserirli uno ad uno dal pannello di amministrazione del nuovo CMS è un’altra delle possibilità ma se il numero di utenti è considerevole, l’inserimento manuale diventa poco agevole e dispendioso sia in termini di tempo che di energie; rendendo così necessario un “inserimento di massa”.
Spesso gli stessi CMS forniscono tool per importare i dati degli utenti direttamente da un file .csv ma anche qui sorgono dei problemi:
gli amministratori di sistema non possono infatti conoscere le password degli utenti e, se il tool non affronta il problema – ad esempio assegnando una password di comodo con obbligo di mofica al primo accesso -, si rischia di doverle inserire manualmente.
La soluzione che proporremo fa riferimento al passaggio da un CMS qualsiasi – nel mio caso tkiwiki – a Joomla ma la strategia può essere riadattata abbastanza facilmente.
La prima cosa da fare è capire come il CMS gestisce gli utenti e quali tabelle utilizza.
Se si dispone di una documentazione adeguata sarà molto semplice, altrimenti si può provare con questo trucco che con joomla ha funzionato: segnarsi il numero dei record di tutte le tabelle nel database, iscrivere un utente con la normale procedura di registrazione e ricontrollare il numero dei record di tutte le tabelle.
facendo così ho scoperto che joomla utilizza 3 differenti tabelle per la gestione degli utenti: jos_users, jos_core_acl_aro, jos_core_acl_groups_aro_map
.:Analisi delle tabelle
jos_users: tabella profili
id: primary key;
name,username,email: unici campi per cui ha senso importare dati;
password: crittata in MD5 ;
usertype: restituisce in stringa il gruppo di privilegi di appartenenza (è initule credo, perchè i l’usertype è gestito dalle altre due tabelle);
block: campo bin che gestisce il blocco di un utenza;
sendemail: campo bin che abilita o meno un utente a inviare mail;
gid: valore numerico del gruppo di privilegi decodificato in jos_core_acl_aro_groups (come per usertype non sono sicuro della loro reale utilità);
registerDate e lastvisitDate :rispettivamente data di registrazione e dell’ultima visita;
activation serve per il codice di attivazione durante la procedura di registrazione (una volta confermata la registrazione via mail viene svuotato);
params: che ospita parametri vari configurati da pannelo admin.
Jos_core_acl_aro tabella utenti: associa a ogni profilo una utenza identificata da un aro_id.
id: primary key, è l’aro_id quello che identifica univocamente gli utenti;
section_value che è impostato quasi sempre a “users”;
value foreing key(jos_users.id),
order_value credo serva per l’ordinamento,
name che ripresenta i nomi degli utenti foreing key(jos_users.id),
hidden che non so a cosa serva.
Jos_core_acl_groups_aro_map: tabella di cross che associa a ogni aro_id il gruppo di appartenenza e quindi i privilegi.
group_id: foreing key(jos_core_acl_aro_groups.id) è il valore numerico del gruppo
section_value: da me è sempre vuoto
aro_id foreing key (Jos_core_acl_aro.id) è l’identity dell’utente
Una volta individuate le tabelle cominciamo a riempirle
.:Inserimento Profili
Per prima cosa si riempie la tabella Jos_users con i nomi, gli username e gli indirizzi email:
importazione dati
tramite file.csv. Si presuppone la possibilità di caricare i file.csv sul server
load data infile ′nomefile con path′
linto table nometabella
fields terminated by′separatore-campi′
lines terminated by′carattere-fine-linea′;
da altra tabella: se i due database risiedono sullo stesso spazio e possono dialogare basta una insert
insert into jos_users(name,username,email) select campo-nome, campo-username, campo-email, from nometabella where condizione se necessaria
.:INSERIMENTO DELLA PASSWORD
Non potento per leggere conoscere la passwrod degli utenti siamo costretti in questa fase a inserire una password di comodo, comune a tutti, e comunicare via mail agli utenti di cambiarla al primo accesso!
update jos_users set password=(MD5(’miapassword’)) where id>=
.:Creazione utenti
una volta completato l’inserimento dei profili su jos_users è necessario associare a ogni profilo il suo aro_id, riempiendo la tabella jos_core_acl_aro.
insert into jos_core_acl_aro(value,name) select id,username from jos_users where id>= id-primorecord-inserito
anche qui la condizione è fondamentale per riferirsi solo ai nuovi inserimenti
poi si completa la tabella con:
update jos_core_acl_aro set section_value=’users’ where section_value<>’users’
Associazione utenti e gruppi: inserimento in jos_core_acl_groups_aro_map
A questo punto non resta che associare gli aro_id degli utenti al gruppo di appartenenza.
Inseriamo gli id
insert into jos_core_acl_groups_aro_map(aro_id) select id from jos_core_acl_aro where id>= id-primorecord-inserito
e associamogli il gruppo
update jos_core_acl_groups_aro_map set group_id=18 where group_id=0
per come è impostata la stringa assegna a tutti il gruppo 18 (Registered) che è il gruppo di utenza standard senza privilegi di scrittura.
la condizione “id>=id-primorecord-inserito ” è fondamentale per riferirsi esclusivamente ai record inseriri e non modificare record preesistenti.
Ora gli utenti dovrebbero essere importati e visibili nel pannello di amministrazione!
A questo punto non resta che comunicare la password agli utenti e aspettare che si loggino.
l’unica nota negativa di tutto questo procedimento è l’impossibilità di impostare una password diversa per ogni utente.
Tags: Database, importare, joomla, Jos_core_acl_aro, Jos_core_acl_groups_aro_map, Jos_users, lista, utenti
luglio 22nd, 2009 at 10:27
Ottimo lavoro Timpo! ^_^
L’idea di spizzarsi il numero dei record delle tabelle è ingegnosa… a patto di non avere 235mila tabelle da segnare!
ps: mettici un “read more” sul post che sennò ti inonda la home ^^’ (poi puoi pure cancellare sto ps
)