Как назначить роль PHP в Drupal?

Мне нужно назначить своего рода «премиальный статус» членам, которые покупают сумму, равную или превышающую 100 евро через PHP.

Условные действия уже настроены (user = anonymous / authenticated AND total amount = equal / больше 100 AND user =! Premium), но мне не хватает части PHP, чтобы на самом деле сказать «тогда дайте ему премиальное членство».

Как я могу это достичь?

EDIT: правильный код ниже?

if ($account) { $uid = $account->uid; $role_name = 'authenticated user'; $rid = db_result(db_query("SELECT rid FROM {role} WHERE name = '%s'", $role_name)); db_query("INSERT INTO {users_roles} (uid, rid) VALUES(%d, %d)", $uid, $rid); watchdog('user', 'uc ca added role to Ubercart created user'); } 

Solutions Collecting From Web of "Как назначить роль PHP в Drupal?"

Вы можете сделать это с помощью user_load() и user_save() :

 $uid = 1; // UID of user to add role to $role_name = 'test role'; // Name of role to add // Get RID of role $rid = db_result(db_query("SELECT r.rid FROM {role} r WHERE r.name = '%s'", $role_name)); // Load user object $account = user_load(array('uid' => 1)); // Save the user object with the new roles. if ($account !== FALSE && !isset($account->roles[$rid])) { $roles = $account->roles + array($rid => $role_name); user_save($account, array('roles' => $roles)); } 

Если вы хотите сделать это навалом для нескольких пользователей, есть user_multiple_role_edit() :

 $uids = array(1, 2, 3, 4); // UIDs of users to add role to $role_name = 'test role'; // Name of role to add // Get RID of role $rid = db_result(db_query("SELECT r.rid FROM {role} r WHERE r.name = '%s'", $role_name)); // Add the role to UIDs user_multiple_role_edit($uids, 'add_role', $rid); 

редактировать

Если вы хотите сделать это для текущего пользователя (например, часть проверки, упомянутой в комментарии), вы можете сделать:

 // Check for value over 100.00 if ($total_value > 100) { global $user; // Retrieve user object for currently logged in user. $role_name = 'test role'; // Name of role to add // Get RID of role $rid = db_result(db_query("SELECT r.rid FROM {role} r WHERE r.name = '%s'", $role_name)); // Save the user object with the new role. if (!isset($user->roles[$rid])) { $roles = $user->roles + array($rid => $role_name); user_save($user, array('roles' => $roles)); } } // Other code here. 

Просто я обновил фрагмент для Drupal 7. В противном случае он отлично работает 🙂

 $rid = db_query("SELECT r.rid FROM {role} r WHERE r.name = :rname", array(':rname' => $role_name))->fetchField(); 

Я бы предпочел использовать функцию user_role_load_by_name .

для drupal 7:

  global $user; // Retrieve user object for currently logged in user. $role_name = 'test role'; // Name of role to add // Get RID of role $rid = db_query("SELECT r.rid FROM {role} r WHERE r.name = :rname", array(':rname' => $role_name))->fetchField(); // Save the user object with the new role. if (!isset($user->roles[$rid])) { $roles = $user->roles + array($rid => $role_name); user_save($user, array('roles' => $roles)); } 

спасибо rix.