2010-08-20 17 views
1

J'essaye d'accorder un rôle spécifique aux utilisateurs qui commandent un montant égal ou supérieur à 100.00 €: Les Actions conditionnelles vont vraiment près du succès, mais j'échoue sur l'action (PHP requis).Comment accorder un rôle spécifique dans Ubercart?

Comment puis-je attribuer un rôle en utilisant une action PHP dans Ubercart Conditionnel Actions?

+0

double possible (http [Comment attribuer le rôle avec PHP dans Drupal?]: // stackoverflow.com/questions/3533415/how-to-assign-role-with-php-in-drupal) – kiamlaluno

+0

Oui, vous avez raison, je ne me souviens pas pourquoi j'ai soumis la même question deux fois le même jour. L'autre a reçu plus d'attention cependant. – dag729

Répondre

3

Basé sur deux relatedthreads, je pense que vous voulez ajouter une action « Exécuter du code PHP personnalisé » le long des lignes de la suivante (en remplaçant le nom du rôle approprié dans la ligne n ° 3):

if($account) { 
    $uid = $account->uid; 
    $role_name = 'YOUR SPECIFIC ROLE NAME GOES HERE'; 
    $rid = db_result(db_query("SELECT rid FROM {role} WHERE name = '%s'", $role_name)); 

    // Load user object 
    $account = user_load(array('uid' => 1)); 

    // Save the user object with the new roles. 
    if ($account !== FALSE) { 
    $roles = $account->roles + array($rid => $role_name); 
    user_save($account, array('roles' => $roles)); 

    watchdog('user', 'uc ca added role to Ubercart created user'); 
+0

Je suggère plutôt l'utilisation de la fonction principale 'user_multiple_role_edit()': http://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_multiple_role_edit/6, où les 'comptes $ 'doit être un tableau d'uids, le' $ operation' doit être égal à '" add_role "', et le '$ rid' doit être égal à l'id du rôle donné (que vous pouvez découvrir avec une recherche de la valeur de retour de 'user_roles()': http://api.drupal.org/api/drupal/modules!useruser_module/function/user_roles/6). C'est très facile à utiliser. – Sk8erPeter

3

Le code fourni doit fermer deux crochets. Je lâchai les if déclarations, a saisi l'uid de l'ordre et fixé le réglage uid (il était '1'):

$uid = $order->uid; 
    $role_name = 'customer'; 
    $rid = db_result(db_query("SELECT rid FROM {role} WHERE name = '%s'", $role_name)); 

    // Load user object 
    $account = user_load(array('uid' => $uid)); 

    // Save the user object with the new roles. 
    $roles = $account->roles + array($rid => $role_name); 
    user_save($account, array('roles' => $roles)); 

    watchdog('user', 'uc ca added role to Ubercart created user');