Регистрация нового пользователя
Рассмотрим последовательность создания пользователя и добавления его в группу, на примере hook для FormIt
В вызов FormIt добавляем hook - registerUser
<?php
/*
Hook for FormIt. Registration on sent mail.
Author: munk
http://modx-shopkeeper.ru/forum/viewtopic.php?id=2260
Changed by Andchir
[[!FormIt?
&hooks=`spam,registerUser,email`
®isterGroupsList=`Покупатели`
...
]]
*/
$hook->setValues(array('password' => ''));
//Если пользователь залогинен выходим
if($modx->getLoginUserID()) return true;
$emailField = $modx->getOption('fiarToField',$hook->config,'email');
$registerGroupsList = $modx->getOption('registerGroupsList',$hook->config,'');
//получаем данные формы
$form_fields = $hook->getValues();
$username = !empty($form_fields[$emailField]) ? $form_fields[$emailField] : '';//username = email
$email = !empty($form_fields[$emailField]) ? $form_fields[$emailField] : '';
$fullname = !empty($form_fields['fullname']) ? $form_fields['fullname'] : '';
$phone = !empty($form_fields['phone']) ? $form_fields['phone'] : '';
$address = !empty($form_fields['address']) ? $form_fields['address'] : '';
//проверяем есть ли такой пользователь в базе
$count = $modx->getCount('modUser', array('username' => $username));
if($count > 0) return true; // пользователь с таким именем есть - выходим
// создаем пользователя и сохраняем
$user = $modx->newObject('modUser');
$password = $user->generatePassword($modx->getOption('password_generated_length',null,8));
$user->set('username', $username);
$user->set('password', $password);
$user->save();
// создаем профиль, добавляем к пользователю и сохраняем
$profile = $modx->newObject('modUserProfile');
$profile->set('email', $email);
$profile->set('fullname', $fullname);
$profile->set('phone', $phone);
$profile->set('address', $address);
$user->addOne($profile);
$profile->save();
$user->save();
//Добавляем пользователя в группу
$registerGroupsList = $registerGroupsList ? explode(',',$registerGroupsList) : array(); //Список групп в уоторые добавить пользователя.
$groups = array();
foreach($registerGroupsList as $groupName){
// получаем группу по имени
$group = $modx->getObject('modUserGroup', array('name' => $groupName));
// добавляем пользователя в группу
if(is_object($group)) $user->joinGroup($group->id, 1);
}
//Авторизуем пользователя
$logindata = array(
'username' => $username,
'password' => $password,
'rememberme' => true
);
// сам процесс авторизации
$response = $modx->runProcessor('/security/login', $logindata);
// проверяем, успешно ли
if ($response->isError()) {
// произошла ошибка
$modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка авторизации в $register-on-order. Message: '.$response->getMessage());
} else {
//Отправляем пароль в письмо
$hook->setValues(array(
'password' => $password
));
}
return true;
Комментарии ()