diff options
author | David Rothstein <drothstein@gmail.com> | 2014-11-04 01:37:20 -0500 |
---|---|---|
committer | David Rothstein <drothstein@gmail.com> | 2014-11-04 01:37:20 -0500 |
commit | 1b82c570504697f024cabba52fd34040d93ff19d (patch) | |
tree | 6247c61d00a89156f409f013a66b84e8d2860f78 /modules | |
parent | 037848ad555fd5fe7fad45df5e720f03eaf8df04 (diff) | |
download | brdo-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.module | 18 |
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(); } |