diff --git a/core/includes/session.inc b/core/includes/session.inc index 5761dc9..caa0a77 100644 --- a/core/includes/session.inc +++ b/core/includes/session.inc @@ -110,8 +110,8 @@ function _drupal_session_read($sid) { // Add roles element to $user. $user->roles = array(); - $user->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user'; - $user->roles += db_query("SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = :uid", array(':uid' => $user->uid))->fetchAllKeyed(0, 1); + $user->roles += db_query("SELECT ur.rid FROM {users_roles} ur WHERE ur.uid = :uid", array(':uid' => $user->uid))->fetchCol(); + $user->roles[] = DRUPAL_AUTHENTICATED_RID; } elseif ($user) { // The user is anonymous or blocked. Only preserve two fields from the diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 81ad706..21a0786 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -2317,8 +2317,6 @@ function user_mail_tokens(&$replacements, $data, $options) { } } -/*** Administrative features ***********************************************/ - /** * Retrieve an array of roles matching specified conditions. * @@ -2346,9 +2344,8 @@ function user_roles($membersonly = FALSE, $permission = NULL) { $query = db_select('role', 'r'); $query->addTag('translatable'); - $query->fields('r', array('rid', 'name')); + $query->fields('r', array('rid')); $query->orderBy('weight'); - $query->orderBy('name'); if (!empty($permission)) { $query->innerJoin('role_permission', 'p', 'r.rid = p.rid'); $query->condition('p.permission', $permission); @@ -2356,7 +2353,8 @@ function user_roles($membersonly = FALSE, $permission = NULL) { if ($membersonly) { $query->condition('r.rid', DRUPAL_ANONYMOUS_RID, '!='); } - $roles = $query->execute()->fetchAllKeyed(); + $roles = $query->execute()->fetchCol(); + $roles = drupal_map_assoc($roles); if (empty($permission)) { $user_roles[$cid] = $roles;