Retrieve an array of roles matching specified conditions.
$membersonly: Set this to TRUE to exclude the 'anonymous' role.
$permission: A string containing a permission. If set, only roles containing that permission are returned.
An associative array with the role id as the key and the role name as value.
function user_roles($membersonly = FALSE, $permission = NULL) {
$query = db_select('role', 'r');
$query
->addTag('translatable');
$query
->fields('r', array(
'rid',
'name',
));
$query
->orderBy('weight');
$query
->orderBy('name');
if (!empty($permission)) {
$query
->innerJoin('role_permission', 'p', 'r.rid = p.rid');
$query
->condition('p.permission', $permission);
}
$result = $query
->execute();
$roles = array();
foreach ($result as $role) {
switch ($role->rid) {
// We only translate the built in role names
case DRUPAL_ANONYMOUS_RID:
if (!$membersonly) {
$roles[$role->rid] = t($role->name);
}
break;
case DRUPAL_AUTHENTICATED_RID:
$roles[$role->rid] = t($role->name);
break;
default:
$roles[$role->rid] = $role->name;
}
}
return $roles;
}