Відповіді:
Хоча цей підхід використовує модулі, я додаю вузли після того, як користувачі підтвердять свої електронні листи, використовуючи Logintoboggan і Правила . Інтеграція правил 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властивість тимчасового облікового запису, що підштовхується до куки_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
}
}
Оскільки основні та інші модулі також викликатимуть_накопичення_накопичення, ви хочете щось реалізувати, щоб уникнути повторних дій. У цьому прикладі я встановлюю іншу властивість на рахунку $ після того, як ініціюється дія, але ви можете накласти тонший контроль, якщо це необхідно.
Зауважте, що якщо використовувати LoginToboggan для автоматичної перевірки електронної пошти, метод IOco не буде працювати (серед багатьох причин - під час гак_user_presave, $ account-> status == 1 (це лише роль у вибраному вами "попередньо авторизованому") держава).