Есть тип материала c полем "email"
Нужно реализовать следующую схему:
Аноним создает материал, вводя в поле email своё мыло,
а мы проверяем, зарегистрирован ли этот email на сайте
А. Пользователь с таким мылом уже есть:
А.1. Создаём материал
А.2. Назначаем пользователя, которому принадлежит указанный в поле ноды email, автором этого материала
Б. Пользователя с таким мылом нет:
Б.1. Регистрируем пользователя
Б.2. Отправляем письмо с данными для доступа
Б.3. Назначаем этого пользователя автором этого материала
Б.4. Создаём материал
Вопрос один: как?
Комментарии
Не, ну открыли Америку! Посмотрите на теги в материале Понятное дело, что Rules.
Проверку типа материала я сделал. Сделал и регистрацию пользователя. Но не могу разобраться с:
1) Как проверить, есть ли такой пользователь
2) Как сгенерировать для него username
3) Что с паролем?
UPD1
Я нашел PHP, который создает пользователя:
<?php// Генерируем случайный пароль на 8 символов
$password = user_password(8);
// Устанавливаем необходимые поля
$fields = array(
'name' => 'user_name',
'mail' => 'user_name@example.com',
'pass' => $password,
'status' => 1,
'init' => 'email address',
'roles' => array(
DRUPAL_AUTHENTICATED_RID => 'authenticated user',
),
);
// Создаем учетную запись
$account = user_save('', $fields);
$account->password = $fields['pass'];
// И напоследок шлем письмо пользователю
drupal_mail('user', 'register_no_approval_required', $email, NULL, array('account' => $account), variable_get('site_mail', 'noreply@example..com'));
?>
Код работает, но
1) если пользователь с указанным мылом уже есть, вылетает ошибка
2) как сгенерировать логин (username)?
3) что значит "генерируем случайный пароль"?
а если пользователь ошибься и ввел не свой ящик? и этот ящик уже существует в базе...
а если не ошибся: залил кучу зоо-некро-педофилии под чужой учёткой?
угу)
Я тоже об этом думал, но пока не могу ничего сообразить. Видимо, придется от такой затеи избавиться.
- email_registration - зарегить по мылу.
- logintoboggan справится с регистрацией на 3 дня пока не пришло подтверждение учётки и выдаст промежуточную роль, не подтвердил - удалит.
- genpass справится с генерацией пароля.
Спасибо, по делу. С механизмом сейчас разбираюсь. Как разберусь, отпишусь.
инлайновая проверка почты, например кодом
Кстати, хорошая мысль. А если запрашивать подтверждение не по email, а по SMS? Хм... надо бы подумать...
- еще же нужно перед сохранением в базу преобразовать пароль в хеш друпальский:
<?php
require_once DRUPAL_ROOT . '/includes/password.inc';
$password = user_hash_password($password);
?>