-
-
Save Sentinel-7/2a37512b0173f0de1b2cca792e6c563e to your computer and use it in GitHub Desktop.
Создание юзера и добавление его в группу (hook для FormIt MODX Revolution) - 2 способа + отдельным файлом с запросом Ajax
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$allFormFields = $hook->getValues(); | |
if(is_array($allFormFields)){ | |
foreach($allFormFields as $k => $v){ | |
if (filter_var($v, FILTER_VALIDATE_EMAIL)) { | |
$mail = trim($v); | |
} | |
} | |
if($mail){ | |
$keys = array('name', 'order-name'); //имена полей формы с именами юзеров <input name="name"> и т.п. | |
foreach($keys as $key){ | |
if(isset($allFormFields[$key])){ | |
$name = $allFormFields[$key]; | |
break; | |
} | |
} | |
$count = $modx->getCount('modUserProfile', array('email' => $mail)); //проверяем наличие юзера по e-mail | |
// Если такого пользователя нет | |
if($count == 0) { | |
$pass = md5($mail); | |
$user = $modx->newObject('modUser', array('username' => $name ? $name : 'Неизвестно имя')); | |
$user->set('password', $pass); | |
$profile = $modx->newObject('modUserProfile'); | |
$user->addOne($profile); | |
// Назначаем дополнительные поля | |
$profile->set('fullname', $name ? $name : 'Неизвестно имя'); | |
$profile->set('email', $mail); | |
$profile->save(); | |
$user->save(); | |
//добавляем в группу с ID = 2 | |
$user->joinGroup(2, null, null); | |
} | |
/*else | |
$modx->log(modX::LOG_LEVEL_ERROR, print_r('Юзер уже существует', true));*/ | |
} | |
} | |
return true; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$allFormFields = $hook->getValues(); | |
if(is_array($allFormFields)){ | |
foreach($allFormFields as $k => $v){ | |
if (filter_var($v, FILTER_VALIDATE_EMAIL)) { | |
$mail = trim($v); | |
} | |
} | |
if($allFormFields['accept'] != 1) { | |
$hook->addError('accept', 'Чтобы зарегистрироваться, вы должны принять Условия пользовательского соглашения путём постановки галочки!'); | |
return false; | |
} | |
if($mail){ | |
if(isset($allFormFields['level'])) $level_group = $allFormFields['level']; | |
$count = $modx->getCount('modUserProfile', array('email' => $mail)); | |
// Если такого пользователя нет, то пробуем его зарегистрировать | |
if($count == 0) { | |
// Определяем группу и роль нового юзера | |
$group = $modx->getObject('modUserGroup', array('name' => $level_group)); | |
$userGroup = $group->get('id'); | |
$role = $modx->getObject('modUserGroupRole', array('name' => 'Member')); | |
$userRole = $role->get('id'); | |
// Присваиваем значения для последующей регистрации | |
$options = array( | |
'username' => $mail, | |
'passwordnotifymethod' => 's', | |
'email' => $mail, | |
'fullname' => 'Ваши ФИО?', | |
'extended' => array('paid' => false, 'oldlevel' => 'new'), | |
'active' => true | |
); | |
$options['groups'] = array(array('usergroup' => $userGroup, 'role' => $userRole)); | |
// Запускаем стандартный процессор регистрации | |
$response = $modx->runProcessor('security/user/create', $options); | |
if ($response->isError()) { | |
$errors = $response->response['errors']; | |
$modx->log(modX::LOG_LEVEL_ERROR, print_r($modx->error->failure($response->getMessage()), true)); | |
} | |
else { | |
$userArray = $response->getObject(); | |
//$modx->log(modX::LOG_LEVEL_ERROR, print_r($userArray, true)); | |
return true; | |
} | |
} | |
else | |
$modx->log(modX::LOG_LEVEL_ERROR, print_r('Юзер уже существует', true)); | |
$hook->addError('mail', 'Вы уже зарегистрированы! Повторная регистрация не требуется!'); | |
} | |
} | |
return false; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//шлём заголовки | |
header('Access-Control-Allow-Origin: *'); | |
header('Content-type: application/json; charset=utf-8'); | |
// инициализация MODX API | |
define('MODX_API_MODE', true); | |
require_once dirname(dirname(__FILE__)) . '/core/config/config.inc.php'; | |
require_once MODX_BASE_PATH . 'index.php'; | |
// Включаем обработку ошибок | |
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'FILE'); | |
$modx->setLogLevel(modX::LOG_LEVEL_ERROR); | |
$modx->getService('error','error.modError'); | |
$modx->error->message = null; | |
//проверем указан ли e-mail | |
if(!$_POST['sub_email']){ | |
$out = array('success' => false, 'message' => 'Не указан e-mail!'); | |
die(json_encode($out)); | |
} | |
//принимаем e-mail и фильтруем его | |
if(!$email = filter_var($_POST['sub_email'], FILTER_SANITIZE_EMAIL)){ | |
$out = array('success' => false, 'message' => 'Неверный e-mail!'); | |
die(json_encode($out)); | |
} | |
if($profile = $modx->getObject('modUserProfile', array('email' => $email))){ | |
$out = array('success' => false, 'message' => 'Вы уже подписаны!'); | |
die(json_encode($out)); | |
} | |
if($email){ | |
$pass = md5($email . time()); | |
$user = $modx->newObject('modUser', array('username' => $email)); | |
$user->set('password', $pass); | |
$profile = $modx->newObject('modUserProfile'); | |
$user->addOne($profile); | |
// Назначаем дополнительные поля | |
$profile->set('fullname', 'Подписчик ' . $email); | |
$profile->set('email', $email); | |
if(!$user->save()){ | |
$out = array('success' => false, 'message' => 'Не удалось оформить подписку! Ошибка сервера!'); | |
die(json_encode($out)); | |
} | |
//добавляем в группу с ID = 2 | |
$user->joinGroup(2, null, null); | |
} | |
$modx->getService('mail', 'mail.modPHPMailer'); | |
$modx->mail->set(modMail::MAIL_BODY, 'У вас новый подписчик: ' . $email); | |
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('mail_smtp_user')); | |
$modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('mail_smtp_user')); | |
$modx->mail->set(modMail::MAIL_SUBJECT, 'Подписка ' . MODX_HTTP_HOST); | |
$modx->mail->address('to', $modx->getChunk('email')); | |
$modx->mail->setHTML(true); | |
if (!$modx->mail->send()) { | |
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo); | |
} | |
$modx->mail->reset(); | |
$out = array('success' => true, 'message' => 'Вы успешно подписаны на нашу рассылку! Мы НЕ рассылаем спам!'); | |
die(json_encode($out)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment