diff options
Diffstat (limited to 'includes')
-rw-r--r-- | includes/session.inc | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/includes/session.inc b/includes/session.inc index 14f98cf92..277885eae 100644 --- a/includes/session.inc +++ b/includes/session.inc @@ -17,15 +17,22 @@ function sess_close() { function sess_read($key) { global $user; - $result = db_query_range("SELECT u.*, s.*, r.name AS role FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid LEFT JOIN {role} r ON u.rid = r.rid WHERE s.sid = '%s' AND u.status < 3", $key, 0, 1); + $result = db_query_range("SELECT u.*, s.* FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.sid = '%s' AND u.status < 3", $key, 0, 1); if (!db_num_rows($result)) { - $result = db_query("SELECT u.*, r.name AS role FROM {users} u INNER JOIN {role} r ON u.rid = r.rid WHERE u.uid = 0"); + $result = db_query("SELECT u.* FROM {users} u WHERE u.uid = 0"); db_query("INSERT INTO {sessions} (uid, sid, hostname, timestamp) values(%d, '%s', '%s', %d)", $user->uid, $key, $_SERVER["REMOTE_ADDR"], time()); } $user = db_fetch_object($result); $user = drupal_unpack($user); + $user->roles = array(); + + $result = db_query("SELECT r.rid, r.name FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid = %d", $user->uid); + + while ($role = db_fetch_object($result)) { + $user->roles[$role->rid] = $role->name; + } return !empty($user->session) ? $user->session : ''; } |