Ответы:
Хотя в этом подходе используются модули, я добавляю узлы после того, как пользователи подтверждают свою электронную почту, используя Logintoboggan и Rules . Интеграция правил Logintoboggan добавляет новое событие, When the user account is validated
которое позволит вам выполнить действия после подтверждения по электронной почте.
Это делает работу для меня:
/**
* Implements @see hook_user_presave
*/
function hook_user_presave(&$edit, $account, $category) {
if ($account->uid // user is not new
&& $account->status === "0" && $edit['status']==1) { // user is being activated
}
}
if($account->uid && $account->original->status == 0 && $account->status == 1)
Если вы используете модуль LoginToboggan для проверки электронной почты и не хотите использовать модуль правил, вы можете просто имитировать ответ проверки модуля (используя logintoboggan_email_validated = TRUE
свойство временного аккаунта, которое передается hook_user_update) в коде:
/**
* Implement hook_user_update()
*
*/
function yourcustommodule_user_update(&$edit, $account) {
if (!empty($account->logintoboggan_email_validated) && !isset($account->your_custom_action)) {
$account->your_custom_action = TRUE;
// Do what you want here
}
}
Поскольку основные и другие модули также будут вызывать hook_user_update, вы захотите реализовать что-то, чтобы избежать повторных действий. В этом примере я установил другое свойство в $ account после начала действия, но при необходимости вы можете установить более точное управление.
Обратите внимание, что если использовать LoginToboggan для автоматической проверки электронной почты, метод IOco не будет работать (среди многих причин - во время hook_user_presave, $ account-> status == 1 (это просто роль в выбранной вами «предварительно авторизованной»). штат).