Submitted by nyl auster on
Bonjour à tous
Sur notre projet actuel je dois faire en sorte que lorsqu'un compte est supprimé, tous les nodes de cet auteur soient automatiquement supprimés également ou mieux: dépubliés.
J'ai donc utiliser le hook_user mais le code suivant ne fonctionne pas, est ce que quelqu'un sait pourquoi? Voici mon module :
A noter que le code fonctionne lorsque $op=='view' donc il ne s'agit pas d'un probleme de codage; je dois plutôt me planter sur la bonne manière d'utiliser le hook_delete?
<?php
/**
* Dépublier et mettre en "retirer de la vente" les oeuvres d'un compte supprimé
*/
function actions_desabonnement_user($op, &$edit, &$account){
global $user;
if($op=='delete'){ //Quand un compte est supprimé
$sql="SELECT * FROM {node} WHERE type='ebook' AND uid=%d"; //chercher tous les nodes e-book écrit par cet auteur
$result=db_query($sql, $account->uid);
while($data = db_fetch_object($result)){
$node=node_load($data->nid); // Charger le node en question
$node->field_retirer_de_la_vente[0]['value']=1; // Le mettre en "quarantaine" pour pouvoir le distinguer des nodes non publiés
$node->status=0; // Dépublier le node
node_save($node); // Sauver les changements du node
}
watchdog('suppresion compte', "tous les livre de $account->name ont été dépubliés automatiquement");
}
}
?>
ok en fait c'est tout
Permalien Soumis par nyl auster le 12 Mai, 2009 - 11:34
ok en fait c'est tout simplement impossible car le hook_user en mode delete est appelé APRES la suppression de l'utilisateur; donc impossible de connaitre les nodes associés à cet utilisateur au moment du hook : les nodes sont déjà marqués en anonymes à ce moment.
La seule solution semblerait de changer le moment où le hook est appelé dans le module core de user
ici on voit que le hook est appelé après
je suppose qu'en faisant ça
ça résoud mon probleme mais j'espère ne pas perturber les autres modules...
Question bête pourquoi ne
Permalien Soumis par davidm le 12 Mai, 2009 - 11:38
Question bête pourquoi ne pas utiliser Rules pour mettre ça au point ?
Je pense que ça doit être possible...
hello davidM Je suis drupal
Permalien Soumis par nyl auster le 12 Mai, 2009 - 11:48
hello davidM
Je suis drupal 5, je ne connais pas ce module, je vais voir si il existe pour ma version. J'ai testé avec workflow-ng qui rencontre le même souci que mon module
le probleme c'est le fonctionnement même du module user de drupal : Il efface un compte, marque tous ses nodes comme étant anonymes et APRES il appelle les hooks : à ce moment là mon hook ne peut plus retrouver les nodes de cet utilisateurs puisque dans la BDD ils sont désormais marqués comme appartenant à l'utilisateur 0 (= anonyme dans drupal).
Le seul moyen c'est de déplacer l'appel du hook pour que les modules soient appelés AVANT la suppression réelle de l'utilisateur. (ainsi un module peut récupérer les nodes correspondant à un utilisateur, les effacer et ensuite le module user poursuit la suppression classique du compte)
http://drupal.org/node/218189
Effectivement Rules n'existe
Permalien Soumis par davidm le 12 Mai, 2009 - 11:51
Effectivement Rules n'existe pas pour D5... OK je comprend mieux ton problème...