Problemi con la creazione di un modulo
Sto cercando di creare un modulo che mi permetta di inviare una mail a un indirizzo (se fosse possibile inviarla a un gruppo di utenti registrati sul sito sarebbe il massimo) quando un utente modifica un certo campo del proprio profilo.
Mi spiego: all'inizio gli utenti sono registrati, per diventare soci dovranno riempire un form con dei campi aggiuntivi (che ho creato con il modulo profile) ed effettuare un pagamento (separato e fisico di cui, per ora, non mi interesso).
Su drupal.org mi è stato detto che l'unico modo per farlo è con la creazione di un modulo, per la precisione ho creato e abilitato il modulo con i suoi automail.info e automail.module, che contiene:
<?php
function mysite_user($op, &$form_values, &$account, $category = NULL) {
if ($op == 'submit') { // the user form has just been submitted
// Check if profile field has been altered
global $user; // I think this will still contain the original user object
if ($user->profile_fullname != $account->profile_fullname) {
// Send da mail!
// ...
drupal_set_message("Mail sent");
}
}
}
?>Non ho ancora scritto il codice per inviare davvero la mail, ma in ogni caso non sembra funzionare...qualche suggerimento?

Risposte
Premesso che non sono un
Premesso che non sono un esperto, e il mio aiuto sara' limitato, ti faccio notare due cose, partendo dall'ultima ;-) :
Ho provato su un sito prova il tuo modulino modificato e funziona (ho commentato lo $user e il test if).
<?php
// $Id$
/**
* @file
* Questo è un modulo test per Drupal.
*/
function mysite_user($op, &$form_values, &$account, $category = NULL) {
if ($op == 'submit') { // the user form has just been submitted
// Check if profile field has been altered
// global $user; // I think this will still contain the original user object
//if ($user->profile_fullname != $account->profile_fullname) {
// Send da mail!
// ...
drupal_set_message("My Test Debug: OK (fino a qui ci siamo)");
//}
}
}
Puoi partire da qui. Vedi il profile.module per capire la logica che ti serve nel caso un campo del profile sia stato editato.
ciao
come mai hai commentato
come mai hai commentato global $user ?
A me quell'if restituiva sempre true, perchè $user->profile_fullname non esisteva se non lo popoli con user_load.
A te funziona, cioè hai creato il campo profile_fullname e quando cambi solo lui ti dice "My Test Debug: OK (fino a qui ci siamo)" ?
Comunque il modulo funzionava anche con ?> finale, non penso cambi!
provo a rispondere, ma avevo
provo a rispondere, ma avevo premesso che non sono un esperto, studio drupal da poco...
> come mai hai commentato global $user ?
perchè, da quello che ho capito io, il parametro &$account restituisce già l'oggetto user corrente, quindi è inutile ripescarlo dalla variabile globale.
> A me quell'if restituiva sempre true, perchè $user->profile_fullname
>non esisteva se non lo popoli con user_load.
nel sito test che ho usato il modulo profile non era nemmeno abilitato, quindi non avevo nemmeno la variabile profile_fullname. Ma scusa, qual è l'errore che ti da problemi? Mi accorgo adesso che non l'hai detto
> A te funziona, cioè hai creato il campo profile_fullname e quando cambi solo lui ti
> dice "My Test Debug: OK (fino a qui ci siamo)" ?
sono andato in >>profilo utente>>modifica>>pubblica e ha mostrato questi messaggi:
* My Test Debug: OK (fino a qui ci siamo)* I cambiamenti sono stati salvati.
questo significa che il nostro modulo ha intercettato la richiesta, prima che venissero salvati i dati, e che i dati sono salvati anche se non modificati.
> Comunque il modulo funzionava anche con ?> finale, non penso cambi!
in effetti è opzionale, ma puo' evitare problemi. vedi: http://drupal.org/node/545
Spero che ti basti per andare avanti, magari qualcuno più in gamba ti da una mano...
ciao
una precisazione
Il parametro $account della funzione hook_user si riferisce all'oggetto utente su cui si sta lavorando.
La variabile globale $user si riferisce all'oggetto utente attualmente loggato.
Quindi il riferimento è lo stesso se un utente loggato modifica i propri parametri, ma è diverso se è l'admin a modificare i parametri di un utente.
Bisogna tener conto anche di questo...