Questo sito utilizza i cookie per personalizzare i contenuti e gli annunci (Google AdSense), fornire le funzioni dei social media (condivisione degli articoli) e analizzare il traffico (Google Analytics). Inoltre fornisce informazioni sul modo in cui utilizzi il sito alle agenzie pubblicitarie, agli istituti che eseguono analisi dei dati web e ai social media miei partner (Google). Il proseguimento nella navigazione implica un tacito assenso all'utilizzo dei cookies. Se non sei d'accordo sull'utilizzo, ti invito ad allontanarti da questo sito. Visualizza i dettagli.

Venerdì 9 Dicembre 2016

Valutazione attuale: 4 / 5

Stella attivaStella attivaStella attivaStella attivaStella inattiva
 
Mi sono imbattuto in un problema. Convertire un sito esistente da un altro CMS a Joomla!. L'unica richiesta per quanto riguarda i dati esistenti riguarda il mantenimento degli attuali utenti registrati sul sito.
Ho dato uno sguardo al dB di Joomla! ed ho visto che il porting degli utenti è possibile, ma un po' complesso.
Vediamo come renderlo accessibile a tutti.



Per prima cosa cerchiamo di capire quali sono i meccanismi di creazione di un utente in Joomla!
Nel momento in cui creiamo un utente il core di Joomla! scrive i dati nel dB. In questo processo vengono coinvolte tre tabelle:

#__users
#__core_acl_aro
#__core_acl_groups_aro_map

La prima tabella, max15_users, contiene le informazioni dell'utente, come il nome, la mail e la password; la seconda max15_core_acl_aro, contiene l'elenco degli utenti. Ogni utente è individuato da un aro_id.
La terza tabella, max15_core_acl_groups_aro_map mette in relazione gli utenti ai profili esistenti.

Quindi la procedura da seguire per la creazione di un utente è:

  • inserire i dati dell'utente nella tabella max15_users
  • aggiungere l'utente alla lista degli utenti max15_core_acl_aro
  • relazionare l'utente al relativo gruppo nella tabella max15_core_acl_groups_aro_map

Lo script JOOMLA USER IMPORT, basato sullo script MAMBO USER IMPORT di W. Stewart ed adatto a Joomla, fa proprio questo, impostando la data di registrazione dell'utente all'ora di esecuzione dello script.

I dati devono essere inseriti in un file .csv nel formato:

"nome utente joomla", "Nome Completo", "indirizzo email","password"

Un esempio del file .csv è il seguente:

"juser","Joe User","Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.","joepwd"
"sperson", "Sandra Person","Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.","sandrapwd"

Qualora il file contenga più di 4 campi, i campi in eccesso verranno automaticamente ignorati, vice versa, qualora dovessero mancare dei campi, i campi in difetto verranno impostati con un valore nullo all'interno del database.
All'interno del file zip è disponibile un file .csv d'esempio chiamato "test_userlist.csv" e può essere utilizzato per fare delle prove.
Con le utility di export dati messe a disposizione dalla sorgente dati di origine dovrebbe esser semplice realizzare un file .csv funzionante.


Per poter essere utilizzato lo script va configurato con i parametri per il collegamento al database ed al file degli utenti.

Per poter configurare lo script occorre editarlo con un editor di testo.
Le variabili da impostare partono dalla riga 62 e sono:

$sql_hostname
è il nome o l'indirizzo ip del server mysql dove risiede il dB di Joomla. Normalmente è 'localhost'.

$sql_user
è il nome utente per accedere al dB di Joomla!

$sql_password
è la password per il collegamento al dB di Joomla!

$mambo_database_name
è il nome del database

$path_to_csv
è il path, completo di nome, del file .csv

$csv_delimiter
indica quale carattere funziona da deliminatore di colonna nel file .csv. Normalmente è una virgola ","

$testing_mode
indica se lo script è in modalità test o no. Se impostato a 0 lo script cerca di scrivere i dati all'interno del dB, se impostato a 1 lo script prende i dati, li elabora, ma non li scrive nel dB. In questo modo è possibile testare la bontà della configurazione dello script stesso e dei dati contenuti nel file .csv

Una volta impostate le variabili e creato il file .csv, richiamando lo script nel browser i dati verranno inseriti nel dB.

Per chi volesse importare altri dati aggiuntivi oltre ai basilari, è possibile farlo modificando il codice dello script ed aggiungendo i campi desiderati nel file .csv

Ad esempio, se volessi importare anche il tipo di utente, avrei bisogno dei campi "usertype" e "gid" da inserire nella tabella #__users e in max15_core_acl_groups_aro_map.

Quindi il file .csv sarà avrà due campi aggiuntivi per ogni utente:

"Big Joe","Joseph Henderson","Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.","joelpwd","SuperAdministrator","25"
"Sandra","Sandra Pierce","Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.","sandrapwd","Registered","18"

Dopo la riga 108 dello script, dove vengono valorizzate le variabili dai dati letti nello script, dovremmo aggiungere due variabili che leggono i due campi.
La lettura dei dati dal file .csv avviene inserendo in un ciclo while il metodo fgetcsv che restituisce l'array $data i cui elementi, in ordine da 0 a N, sono i campi scritti nella riga in elaborazione, dal primo a l'ultimo. Avendo aggiunto due campi ai precedenti quattro, gli elementi da leggere saranno $data[4] e $data[4]:

$usertype = mysql_escape_string($data[4]);
$gid = mysql_escape_string($data[5]);

A questo punto non rimane che inserire i dati nelle query:

mysql_query("INSERT INTO #__users (id, name, username, email, password , usertype, block, sendEmail, gid, registerDate, lastvisitDate) VALUES ('$new_id', '$name', '$username', '$email', '$password', '$usertype', '0', '0', '$gid', '$registerdate', '0000-00-00 00:00:00')") or die("
Mos_users not updated. Error is: " . mysql_error());

e

mysql_query("INSERT INTO #__core_acl_groups_aro_map (group_id , section_value , aro_id) VALUES ('$gid', '', '$new_id')") or die("
Mos_core_acl_groups_aro_map not updated. Error is: " . mysql_error());

ed il gioco è fatto.

Allo stesso modo possiamo inserire la data di creazione qualora volessimo importarla, per far ciò occorre aggiungere un campo al file .csv come visto in precedenza, modificare la riga 107 dello script da

$registerdate = date("Y-m-d H:i:s");

a

$registerdate = date(mysql_escape_string($data[6]));

e testare lo script.
 
 
Se anche lo script è molto semplice e relativamente sicuro, è NECESSARIO eseguire il backup del dB di Joomla prima di fare qualsiasi operazione. Lo script è fornito "così com'è" e sia io che W. Stewart non ci assumiamo nessuna responsabilità per usi errati o eventuale perdita di dati.
Una volta importati gli utenti occorre ELIMINARE il prima possibile lo script ed il file .csv dal server web onde evitare accidentali distribuzioni di dati a persone non autorizzate. In particolare il file .csv contiene le password degli utenti scritte IN CHIARO e può essere scaricato da chiunque se posizionato in una virtualdirectory.