Ghiduri & Tutoriale

Tutoriale tehnologice, ghiduri tehnologice practice si multe altele.

Componenta com_users vehiculeaza taskurile de adaugare a utilizatorilor, login/logout, activare/dezactivare a utilizatorilor, resetarea parolei. Ne propunem sa va aratam cum sa adaugati un utilizator Joomla de pe o pagina externa.

Sunt doua modalitati prin care puteti adauga utilizatorii extern:

  1. Creati un formular html avand campurile corecte si executati-l in Jommla la url-ul corect, in acest fel Jommla va manevra inregistrarea. Sau...
  2. Daca doriti sa faceti operatiunea printr-o metoda personalizata aveti nevoie sa creati ambele formulare - si cel html si scriptul care va adauga utilizatorul in Joomla.

Modalitatea obisnuita de adaugare

Creati un formular html care contine numele corecte ale campurilor si plasati-l in radacina Joomla. Numele campurilor trebuiesc sa fie identice - sintaxa si pozitie - cu cele ale formularul de inregistrare generala Joomla.

Daca vizualizam un formular sursa de inregistrare Joomla putem observa ca formularul are campuri text denumite name, username, Email, password, password2 si campurile ascunse task, id, gid. Mai exista un alt camp ascuns al carui nume este generat de JUtility::getToken() si valoarea acestui camp este 1. Valoarea acestui camp este verificata in momentul in care se depun informatiile de inregistrare. Vom vorbi despre aceasta mai tarziu. La depunerea formularului de inregistrare informatiile sunt procesate prin metoda register_save a lui UserController in com_user, care a fost specificata in campul ascuns denumit task din formularul de inregistrare.

Acum sa vorbim despre UserController din com_user. In metoda register_save exista o linie care verifica valoarea martorului (token) din formularul depus. Fiindca folosim un formular html static avem nevoie fie sa generam numele martorului (token) in formularul html sau daca nu vrem sa includem martorul (token) in formular avem nevoie de o linie de cod care sa faca bypass si bifeaza pentru martor (token)

JRequest::checkToken() or jexit( 'Invalid Token' );

Prin metoda register_save method din UserController din com_user. De vreme ce vom folosi un formular html obisnuit ne vom orienta spre a doua optiune si vom comenta linia de verificare a martorului (token)

// JRequest::checkToken() or jexit( 'Invalid Token' );

Informatia de inregistrare depusa astfel este procesata de metoda register_save. Datele sunt salvate efectiv prin metoda save din UserController.

Iata si o alta modalitate

In aceasta abordare vom folosi formularul creat anterior si il vom depune in scriptul personalizat pe care il vom crea. Aceasta abordare presupune in principi copierea functionalitatii metodei register_save() din UserController si com_user catre un script extern si depunerea formularului html de inregistrare catre acel script.

Sa aruncam o privire asupra scriptului: Pentru a accesa mediul Joomla intr-un script extern urmatorul fragment este adaugat la inceputul scriptului:

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );// this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

Acest fragment face in principiu disponibila arhitectura joomla in script. Fragmentul de cod se gaseste in radacina joomla in index.php.

Acum trebuie sa importam functionalitatea din metoda register_save() in script.

Pas 1. Verificare pentru solicitari false, vom comenta aceasta datorita faptului ca martoii (tokens) nu sunt generati in pagina html.

//JRequest::checkToken() or jexit( 'Invalid Token' );

Pas 2. Obtinerea obiectelor sistem necesare

$user = clone(JFactory::getUser());
$pathway =& $mainframe->getPathway();
$config	=& JFactory::getConfig();
$authorize =& JFactory::getACL();
$document =& JFactory::getDocument();

Pas 3. Daca nu este permisa inregistrarea utilizatorului, arata 403 not authorized (Nu este necesar)

$usersConfig =& JComponentHelper::getParams( 'com_users' );
if ($usersConfig->get('allowUserRegistration') == '0')
{
	JError::raiseError( 403, JText::_( 'Access Forbidden' ));
	return;
}

Pas 4. Initializeaza setarea unui nou usertype

$newUsertype = $usersConfig->get( 'new_usertype' );
if (!$newUsertype)
{
	$newUsertype = 'Registered';
}

Pas 5. Leaga aranjamentul postat de obiectul utilizator

if (!$user->bind( JRequest::get('post'), 'usertype' ))
{
	JError::raiseError( 500, $user->getError());
}

Pas 6. Setati cateva valori initiale pentru utilizator

$user->set('id', 0);
$user->set('usertype', '');
$user->set('gid', $authorize->get_group_id( '', $newUsertype, 'ARO' ));

$date =& JFactory::getDate();
$user->set('registerDate', $date->toMySQL());

Pas 7. Daca activarea utilizatorului este pornita, avem nevoie sa setam informatiile de activare (Nu este necesar)

$useractivation = $usersConfig->get( 'useractivation' );
if ($useractivation == '1')
{
	jimport('joomla.user.helper');
	$user->set('activation', md5( JUserHelper::genRandomPassword()) );
	$user->set('block', '1');
}

Pas 8. Salveaza detaliile utilizatorului

$user->save();

Dupa aceasta putem folosi functia php header pentru a redirectiona utilizatorul catre locatia dorita.