Odpowiedzi:
Mimo że w tym podejściu wykorzystuje się moduły, dodaję węzły po potwierdzeniu przez użytkowników wiadomości e-mail za pomocą Logintoboggan i reguł . Integracja reguł Logintoboggan dodaje nowe wydarzenie, When the user account is validatedktóre pozwoli Ci wykonywać działania po potwierdzeniu e-mailem.
To dla mnie zadanie:
/**
* 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)
Jeśli używasz modułu LoginToboggan do sprawdzania poprawności wiadomości e-mail i nie chcesz korzystać z modułu reguł, możesz po prostu naśladować odpowiedź modułu sprawdzania poprawności (wykorzystując tymczasową logintoboggan_email_validated = TRUEwłaściwość konta, która została przekazana do uaktualnienia_użytkownika) w kodzie:
/**
* 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
}
}
Ponieważ rdzeń i inne moduły będą również wywoływać hook_user_update, chciałbyś zaimplementować coś, aby uniknąć powtarzających się działań. W tym przykładzie ustawiam inną właściwość na koncie $ po zainicjowaniu akcji, ale w razie potrzeby możesz narzucić lepszą kontrolę.
Zauważ, że jeśli używasz LoginToboggan do automatycznego sprawdzania poprawności e-mail, metoda IOco nie zadziała (z wielu powodów - podczas hook_user_presave $ konto-> status == 1 (to tylko rola w twoim wybranym „preautoryzowanym”) stan).