Last active
April 7, 2022 13:18
-
-
Save andronex/f9a6fb64ceab5412d55d242e97bea1c3 to your computer and use it in GitHub Desktop.
Создание юзера и добавление его в группу (hook для FormIt MODX Revolution) - 2 способа + отдельным файлом с запросом Ajax
This file contains hidden or 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 hidden or 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 hidden or 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