Joomla.it Forum

Non solo Joomla... => Sviluppo => : mirzia 18 Jun 2009, 14:45:50

: inserimento utenti manuale
: mirzia 18 Jun 2009, 14:45:50
Ciao a tutti,
sto veramente impazzendo sono settimane che cerco in internet ovunque e non sono ancora giunta a una soluzione.
Ho realizzato una paginetta per l'inserimento degli untenti dentro joomla 1.5.9 aggiorno correttamente le 3 tabelle (jos_users, jos_core_acl_aro e jos_core_acl_groups_aro_map )
utilizzo le stesse funzioni che utlizza il componente nativo com_user di joomla infatti, nel database le 3 tabelle hanno tutti i record inseriti correttamente.
se provo a fare il login da frontend xo mi dice: "Nome utente e password non sono corrette o non possiedi ancora un account" se dall'amministrazione entro in uno di questi utenti e semplicemente incollo la password numerica e li risalvo, il login funziona.

non capisco come possa esserci un problema di codifica della password visto che utilizzo la funzione bind() è la stessa che usa joomla O_O cosa dovrei fare?
: Re:inserimento utenti manuale
: ramses_2th 18 Jun 2009, 15:11:43
da pannello controllo, l'utente lo vedi abilitato ?
: Re:inserimento utenti manuale
: mirzia 18 Jun 2009, 15:15:12
SI! è tutto perfetto, abilitato , del gruppo registered!!!!
ma secondo me è la password xke se aggiorno semplicemente l'utente dal pannello di amministrazione cmq non funziona. se invece dal pannello di amministrazione inserisco manualmente la password (per es 1234) e salvo, allora va.....

ma non capisco xke io passo alla funzione bind dell'user la password in chiaro (quindi 1234) e poi è la funzione stessa di joomla (contenuta nella funziona bind con il suo salto e il suo pezzo random) che genera la password cifrata e la inserisce nel database quindi non capisco come cavolo faccia ad essere sbagliata.....
: Re:inserimento utenti manuale
: ramses_2th 18 Jun 2009, 15:31:23
uhmmm il problema sta proprio nella password cifrata che vai ad inserire manualmente ...

faccio una prova ...
: Re:inserimento utenti manuale
: mirzia 18 Jun 2009, 15:35:54
non so se puo esserti di aiuto ma ti posto il pezzo di codice che uso per importare gli utenti

:
$user = new JUser(JRequest::getVar( 'id', 0, 'post', 'int'));
//$original_gid = $user->get('gid');

$post = array();
$post['username'] = sql_prep($valore[0]);
$post['password'] = sql_prep($valore[9]);
$post['password2'] = sql_prep($valore[9]);
$post['name']=sql_prep($valore[1]);
$post['email']= str_replace(" ","",sql_prep($valore[1])).'@soteha.it';
$post['gid']= "18";
$post['params']= "language=
timezone=0

";



if (!$user->bind($post))
{
echo 'Errore: ', $user->getError(), '<br />';

}

$objectID = $acl->get_object_id( 'users', $user->get('id'), 'ARO' );
$groups = $acl->get_object_groups( $objectID, 'ARO' );
$this_group = strtolower( $acl->get_group_name( $groups[0], 'ARO' ) );


// Are we dealing with a new user which we need to create?
$isNew = ($user->get('id') < 1);
if (!$isNew)
{
// if group has been changed and where original group was a Super Admin
if ( $user->get('gid') != $original_gid && $original_gid == 25 )
{
// count number of active super admins
$query = 'SELECT COUNT( id )'
. ' FROM #__users'
. ' WHERE gid = 25'
. ' AND block = 0'
;
$db->setQuery( $query );
$count = $db->loadResult();

if ( $count <= 1 )
{
// disallow change if only one Super Admin exists
$this->setRedirect( 'index.php?option=com_users', JText::_('WARN_ONLY_SUPER') );
return false;
}
}
}

/*
* Lets save the JUser object
*/
if (!$user->save())
{

//echo 'Errore: ', $user->getErrorNum(), '<br />';
echo $user->getError();
}

come vedi io faccio ben poco, fa tutto la pagina in "libraries/joomla/user.php"
veramente mi viene voglia di dargli fuoco!!! ;D
: Re:inserimento utenti manuale
: ramses_2th 18 Jun 2009, 15:49:10
.... in effetti..

"dovrebbe" funzionare, ma qualcosa ci sfugge.

Fuoco ? nooooo, già siamo abbondantemente sui 30°  :'(
: Re:inserimento utenti manuale
: mirzia 18 Jun 2009, 16:06:11
ahahahah io sono abbondantemente condizionata!
cmq veramente non capisco sono due settimane che faccio "test" su "test" ormai ho il cervello saturo, speriamo che venga un illuminazione a te che sei arrivato ora davanti al mio problema!! :'(
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 09:01:51
ummm nessuno che puo aiutarmi?
non c'e' proprio una soluzione?!?!?! ???
: Re:inserimento utenti manuale
: 56francesco 19 Jun 2009, 09:35:57
mi sfugge: cosa ci trovi di sbagliato o che non fa per te nell'usare il normale pannello utenti?
nuovo utente ed inserisci tutti quello che ti pare..
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 10:22:35
eh che ho bisogno di importare una lista di utenti esterna....
: Re:inserimento utenti manuale
: 56francesco 19 Jun 2009, 10:36:16
ora capisco, non sarebbe bene allora spiegare il problema che si ha ed usare un titolo in tema?
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 10:42:31
ma infatti il titolo è "inserimento utenti manuale" e ho spiegato abbondantemente il mio problema inserendo anche il codice che utilizzo...
se avessi dovuto inserire un utente dal beckend di joomla non avrei scritto un post  ;)
: Re:inserimento utenti manuale
: 56francesco 19 Jun 2009, 10:49:49
mah..
non è nella mentalità joomler star li a modificare il codice ma di solito utilizziamo componenti, moduli e plugin
quello che ti proponi di fare è facilmente risolvibile con un giretto su www.joomla.it nella sezione estensioni ma poi ciascuno può scegliere la strada che più gli piace...
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 10:56:00
Infatti io non tocco assolutamente il core di joomla ma sto sviluppando un componente perchè questa è solo una parte di quello che dovrò andare a realizzare....

se nessuno si mettesse a realizzare i componenti non ce ne sarebbero...è questo il bello di joomla!

Cmq il mio problema persiste, la bind() di user.php di joomla genera una password non corretta, oppure c'e' qualche altra funzione oltre alla bind che gestiste la password prima di inserirla nel database che io non so !!!

qualche sviluppatore che mi può dare una mano? grazie mille a tutti!

: Re:inserimento utenti manuale
: 56francesco 19 Jun 2009, 10:58:47
allora se stai sviluppando un componente la sezione giusta non è questa...

sposto
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 11:33:19
Grazie, speriamo che in questa sezione ci sia qualcuno che sappia come generare una password corretta per joomla 1.5.9 o almneo capire xke la password che genera la funzione bind() di joomla non funziona!!
: Re:inserimento utenti manuale
: copesc 19 Jun 2009, 12:49:00
Ciao Mirzia, la password la inserisci già codificata in MD5 giusto?
: Re:inserimento utenti manuale
: ramses_2th 19 Jun 2009, 12:59:29
No, è proprio quello che genera l'errore. Ho trovato un po di notizie in giro (risalente ai tempi di Mambo) sto mettendo giu' qualche appunto.

Riusciremo nell'intento. ;D
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 13:35:09
Ciao, la password iniziale è in chiaro e la passo alla funzione bind() di libraries/joomla/user/user.php.
quindi è lo stesso joomla che codifica la password per questo non riesco a capire come faccia a generarla sbagliata.
se guardate nel codice che ho scritto qualche "post" fa io non codifico nulla ma passo tutto l'array con i dati dell'utente prima alla funzione joomla bind() e poi alla save() esattamente come fa il componente nativo di joomla com_user....

magari mi perdo qualcosa :)
: Re:inserimento utenti manuale
: ramses_2th 19 Jun 2009, 13:38:32
Rieccomi.

Dunque a parte che forse non avevo cercato nel posto piu' ovvio (http://extensions.joomla.org/extensions/migration-&-conversion/users-import-&-export).

Dalle varie ricerche ed appunti è uscito fuori questo.

:
<?php
//database data
$dbhost="";
$dbname="";
$dbuser="";
$dbpass="";
//filename
$filename="users.csv";

$debugactive=false;
$fileline=0;
$recordsupdated=0;
$skippedrecords=-1;

$file=fopen($filename,"r") or exit("Unable to open file!");

$con mysql_connect($dbhost,$dbuser,$dbpass);
if (!
$con) {
die('Could not connect: ' mysql_error() . "\n");
}
else {
mysql_select_db($dbname$con) or die(mysql_error());
if ($debugactive) echo "Connessione con db Ok\n----------------------------\n";
}

while(!
feof($file))
{
$fileline $fileline+1;
$stringfgets($file);
$token strtok($string",");

$found=false;
$i=0;
$array;

while ($token !== false)
{
$array[$i]= str_replace("\""""trim($token));
if ($debugactive) echo $i." = ".$array[$i]."\n";

$i."\n";
$i=$i+1;
$token strtok(",");
}
//done making the array to insert into the MySQL tables

//encrypt the password
//$pw= md5($array[0]);
//$pw= $array[0];

$result mysql_query("SELECT * FROM jos_users WHERE username='$array[1]'");
//check if User exists in the table
while($row mysql_fetch_array($result)) {
$found=true;
echo $row['username'] . " - found skipping this row ($fileline)\n";
$skippedrecords $skippedrecords 1;
}
if($found==true) {
continue;
$found=false;
}

//insert into the 3 joomla tables
//jos_users
//jos_core_acl_aro
//jos_core_acl_groups_aro_map

//start with jos_users
$insertQuery="INSERT INTO jos_users (name,username,email,password,usertype,block,sendEmail,gid,registerDate,lastvisitDate,activation,params)
VALUES ('
$array[0]','$array[1]','$array[2]','$array[3]','$array[4]','$array[5]','$array[6]','$array[7]','$array[8]','$array[9]','$array[10]','$array[11]')";
if (! mysql_query($insertQuery)) die("Wrong query:\n"."$insertQuery"."\n");
$recordsupdated $recordsupdated 1;


//now do a select statement to figure out the jos_user ID you just generated
$result mysql_query("SELECT id FROM jos_users WHERE username='$array[1]'");

while($row mysql_fetch_array($result))
{
$joomID$row['id'];
}
if ($debugactive) {
echo "added user: "$array[1];
echo "\n";
echo "Joomla ID: " $joomID;
echo "\n";
}
//now insert jos_core_acl_aro
$insertQuery="INSERT INTO jos_core_acl_aro
(section_value, value, order_value, name, hidden)
VALUES ('users', '
$joomID', '$array[11]', '$array[12]', '$array[13]')";
if (! mysql_query($insertQuery)) die("Wrong query:\n" "$insertQuery"\n");

//now find out the jos_core_acl_aro ID you just generated
$result mysql_query("SELECT id FROM jos_core_acl_aro WHERE value='$joomID'");
while($row mysql_fetch_array($result))
{
$aroID$row['id'];
}
if ($debugactive) echo "with aroID: " $aroID "\n";

//now insert into jos_core_acl_groups_aro_map
mysql_query("INSERT INTO jos_core_acl_groups_aro_map (group_id , aro_id) VALUES ('$array[14]','$aroID')");
}
$fileline $fileline 1;
echo 
"Total processed lines = " $fileline "\n";
echo 
"Added " $recordsupdated " records\n";
echo 
$skippedrecords " record(s) already present\n";
?>



: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 13:43:14
ma in questo script dove la fa la codifica della pass?
io le tabelle le aggiorno tutte correttamente l'unica cosa non corretta è il campo della password che anche se uso la funzione che utilizza joomla (bind()) evidentemente ritorna in dietro una codifica che poi a lui non piace...
: Re:inserimento utenti manuale
: copesc 19 Jun 2009, 15:25:13
Hai ragione, in effetti Joomla dovrebbe codificarla in automatico.

http://api.joomla.org/__filesource/fsource_Joomla-Framework_User_joomlauseruser.php.html#a378

Prova a modificare la funzione bind() inserendo un codice che ti permetta di vedere dove sta l'errore, scrivendolo su un file.

Quando scopri in quale if entra il tuo codice, allora scopri l'errore.
: Re:inserimento utenti manuale
: mirzia 19 Jun 2009, 15:38:26
Eh ho gia provato, ho messo un set error in ogni miniciclo per vedere se magari entrava nell'if della password vuota ma niente, se entrata nell'if della password troppo lunga ma niente, esegue la funzione tutta correttamente generando la password
con questo pezzo di codice :

:
$this->password_clear = JArrayHelper::getValue( $array, 'password', '', 'string' );

$salt  = JUserHelper::genRandomPassword(32);
$crypt = JUserHelper::getCryptedPassword($array['password'], $salt);
$array['password'] = $crypt.':'.$salt;

quindi non entra in nessun caso eccezionale...non lo so se volete vi posto l'intera pagina magari trovate l'inghippo!
: Re:inserimento utenti manuale
: teakor 20 Jun 2009, 10:33:42
Ciao.

Domanda la password la passi doppia? cioè password1 e password2?

Per vedere magari dove sta l'inghippo piazza qua e la degli echo o dei print_r che ristituiscono gli array e sui valori così da verificare se i dati sono giusti.

Poi prova a controllare anche il db. Verifica se la password che va a generare sia uguale a quella che dovrebbe inserire.

Un possibile errore riguardo la password potrebbe essere, che magari le password che gli passi hanno un involontario spazio iniziale o finale, e quindi ovviamente la password registrata è diversa da quella che dovrebbe essere.
: Re:inserimento utenti manuale
: mirzia 22 Jun 2009, 08:08:39
Ciao,
si passo pass 1 e pass 2 xke se no la funzione bind da errore xke fa il controllo che le due password siano uguali.
ho gia messo echo e print ovunque e sembra tutto giusto, niente spazi ne nulla, non posso neanche controllare l'esattezza della password codificata xke c'e' un pezzo random che quindi cambia di volta in volta anche se la si aggiorna dal pannello di amministrazone di joomla...
veramente nn so dove sbattere la testa!
i dati li prendo da un csv e il resto fa tutto joomla non so dove sbaglio, è giusto che uso prima la funzione bind() e poi la save() giusto? non c'e' altro che devo fare vero?
: Re:inserimento utenti manuale
: teakor 24 Jun 2009, 08:59:25
Save()? non ne sono sicuro ma credo faccia tutto la funzione bind
: Re:inserimento utenti manuale
: moise 21 Jul 2009, 20:31:45
per la generazione della password usa questo codice che trovi al link, funziona.
https://secure.phil-taylor.com/generate_password.phps

oppure
https://secure.phil-taylor.com/generate_password.php

. IO ho il problema, che durante l'inserimento manuale, quando vado a fare il login come utente che ho inserito mi esce questo messaggio:

Login negato! Il tuo account è stato bloccato oppure non l'hai ancora attivato. Ti è arrivata un'e-mail di attivazione e hai cliccato sul link di attivazione?
dove posso attivar eil link? o sbloccare l'utente?

grzie