Aggiornare campi account utente

6 contenuti / 0 new
Ultimo contenuto
Aggiornare campi account utente

Ciao a tutti.
Sto lavorando ad un modulo custom, che deve aggiornare dei campi sull'account utente in base a dei valori forniti dall'utente stesso durante l'inserimento di un contenuto.
Implemento l'hook_node_presave() con il quale eseguo i calcoli che mi servono ma, al momento di aggiornare i campi sull'utente ottengo una pagina bianca.
Il codice, peraltro semplice, è questo:

<?php
global $user;
$clu = user_load(array('uid' => $user->uid));
if (
$clu->field_ferie_anno_precedente >= $gglav) {
 
$clu->field_ferie_anno_precedente = $clu->field_ferie_anno_precedente - $gglav;
}
else {
 
$diff = $gglav - $clu->field_ferie_anno_precedente;
 
$clu->field_ferie_anno_precedente = 0;
 
$clu->field_ferie_anno_corrente = $clu->field_ferie_anno_corrente - $diff;
}
?>

Dove sto sbagliando?

Drupal Version:

stando al tuo codice effettui un operazione matematica... assicurati che i tuoi valori siano numeri, se sono interi puoi fare così:

$clu->field_ferie_anno_precedente = intval($clu->field_ferie_anno_precedente) - intval($gglav);

Grazie per la tempestiva risposta.
In effetti il caso voleva che fra i numeri interi ci fosse un bel valore NULL!!
Mmm. ora però ho il problema che i valori dell'oggetto $clu non vengono memorizzati nel DB: devo forse eseguire qualche metodo particolare?

Grazie 1000

MaxSimon wrote:
Grazie per la tempestiva risposta.
In effetti il caso voleva che fra i numeri interi ci fosse un bel valore NULL!!
Mmm. ora però ho il problema che i valori dell'oggetto $clu non vengono memorizzati nel DB: devo forse eseguire qualche metodo particolare?

Grazie 1000

Devi essere più preciso... attualmente crei l'ogetto $clu e poi? cosa ci fai?

Scusa la lentezza nella risposta, ma mentre cercavo di risolvere questo problema sono incappato in un bug che si è sovrapposto al debug del mio modulo.
Allora, quando l'utente crea/modifica un contenuto, alcuni valori che inserisce vanno a modificare dei campi del suo account; pertanto, sull'hook_node_presave() elaboro i dati e poi carico l'utente ($clu), aggiorno i campi del suo account e poi vado a salvare con user_save($clu, array()).
Leggendo però nelle API mi viene il dubbio che non sia proprio il modo più corretto (come spiegato qui):

<?php
// Come faccio ora
global $user;
$clu = user_load(array('uid' => $user->uid));
$clu->field_ferie_anno_precedente['und'][0]['value'] = 'Nuovo valore';
user_save($clu, array());
//
// Come (forse) è più corretto
global $user;
$clu = user_load(array('uid' => $user->uid));
$edit = array();
$edit['field_ferie_anno_precedente']['und'][0]['value'] = 'Nuovo valore'
user_save($clu, $edit);
?>

Risolto!
Con un copia/incolla errato avevo scritto user_load(array('uid' => $user->uid)) invece di user_load($user->uid);.
In user_save() ho riscritto, come specificato al post precedente, mettendo i nuovi valori in un array $edit passato come secondo parametro assieme all'oggetto $clu originale.

Grazie a jonxduo la pulce nell'orecchio!