summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2014-11-04 01:37:20 -0500
committerDavid Rothstein <drothstein@gmail.com>2014-11-04 01:37:20 -0500
commit1b82c570504697f024cabba52fd34040d93ff19d (patch)
tree6247c61d00a89156f409f013a66b84e8d2860f78 /modules
parent037848ad555fd5fe7fad45df5e720f03eaf8df04 (diff)
downloadbrdo-1b82c570504697f024cabba52fd34040d93ff19d.tar.gz
brdo-1b82c570504697f024cabba52fd34040d93ff19d.tar.bz2
Issue #1433288 by haggins, fago, David_Rothstein, marcin.wosinek: Fixed Integrity constraint violation when saving a user account after creation.
Diffstat (limited to 'modules')
-rw-r--r--modules/user/user.module18
1 files changed, 9 insertions, 9 deletions
diff --git a/modules/user/user.module b/modules/user/user.module
index 415519148..60f32a15f 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -594,16 +594,16 @@ function user_save($account, $edit = array(), $category = 'account') {
user_module_invoke('insert', $edit, $account, $category);
module_invoke_all('entity_insert', $account, 'user');
- // Save user roles.
- if (count($account->roles) > 1) {
+ // Save user roles. Skip built-in roles, and ones that were already saved
+ // to the database during hook calls.
+ $rids_to_skip = array_merge(array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID), db_query('SELECT rid FROM {users_roles} WHERE uid = :uid', array(':uid' => $account->uid))->fetchCol());
+ if ($rids_to_save = array_diff(array_keys($account->roles), $rids_to_skip)) {
$query = db_insert('users_roles')->fields(array('uid', 'rid'));
- foreach (array_keys($account->roles) as $rid) {
- if (!in_array($rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID))) {
- $query->values(array(
- 'uid' => $account->uid,
- 'rid' => $rid,
- ));
- }
+ foreach ($rids_to_save as $rid) {
+ $query->values(array(
+ 'uid' => $account->uid,
+ 'rid' => $rid,
+ ));
}
$query->execute();
}