回答:
このアプローチではモジュールを使用しますが、ユーザーが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(役割は、選択された「事前承認済み」にあるだけです)状態)。