Ubercart - changer le role lors d'une commande

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je suis en train de monter un site de commerce utilisant l'excellent ubercart.

J'ai besoin de pouvoir modifier le role des utilisateurs lors de leur premiere commande, pour les passer dans un mode confirmer et leur proposer d'autres moyens de paiement par la suite.

Pour ce faire j'ai pensé à utiliser workflow-ng mais j'ai un petit (gros?) soucis.

Dans workflow-ng j'ai le choix entre plusieurs évenements:

-si je choisi comme évenement: User as registered
alors je dispose d'une action Add User Role me permettant d'ajouter un nouveau role

-si je choisi comme évenement: Un paiement a été effectué (c'est ce qui m'interesse)
alors je ne dispose pas de l'action Add User Role qui me permettrait d'ajouter le role.

Je ne comprend pas bien pourquoi une action est disponible sur un évenement, mais pas sur un autre.

Si quelqu'un pouvait m'aider, au moins a comprendre pourquoi...

Comme l'action Add User Role n'est pas disponible, j'ai créé une action de type php avec le code suivant:

global $user;
$new_role = array('6' => 'paiement_confirmé');
user_save($user, array('roles' => $user->$new_role));
cache_clear_all($user->uid .':', 'cache_menu', TRUE);

mais sans succés, le nouvel utilisateur créé et connecté lors de la commande ne prend pas le role 6, il prend les roles par defaut.

Merci

Version de Drupal : 

Comme à chaque fois le temps de saisir la question la réponse est venue...
Désolé pour le dérangement.

Version corrigée:

global $user;
$new_role = array('6' => 'paiement_confirmé');
user_save($user, array('roles' => $new_role));
cache_clear_all($user->uid .':', 'cache_menu', TRUE);

En fait c'est pas $user->$new_role mais $new_role qu'il fallait utiliser (c'est çà d'utiliser un bout de code pompé sur le net...)

Donc maintenant, lorsqu'un paiement est validé pour une commande, le role de l'utilisateur passe en confirmé.

Attention, les roles déjà définis pour l'utilisateur ne sont pas gardés.

Problème résolu (enfin j'espère)

Edit:

Pour infos (au cas ou quelqu'un soit confronté au meme probleme), une fois les roles configurés correctement, le module Ubercart Conditional Payment (http://drupal.org/project/uc_conditional_payment) permet dans workflow-ng de rendre disponible ou non chaque mode de paiement en fonction du role de l'utilisateur connecté.