Save a user role to the database.
$role: A role object to modify or add.
Status constant indicating if role was created or updated. Failure to write the user role record will return FALSE. Otherwise SAVED_NEW or SAVED_UPDATED is returned depending on the operation performed.
function user_role_save($role) {
if ($role->name) {
// Prevent leading and trailing spaces in role names.
$role->name = trim($role->name);
}
if (!isset($role->weight)) {
// Set a role weight to make this new role last.
$query = db_select('role');
$query
->addExpression('MAX(weight)');
$role->weight = $query
->execute()
->fetchField() + 1;
}
// Let modules modify the user role before it is saved to the database.
module_invoke_all('user_role_presave', $role);
$exists = db_select('role', 'r')
->fields('r', array(
'rid',
))
->condition('rid', $role->rid)
->execute()
->fetchAll();
if (empty($exists)) {
$status = drupal_write_record('role', $role);
module_invoke_all('user_role_insert', $role);
}
else {
$status = drupal_write_record('role', $role, 'rid');
module_invoke_all('user_role_update', $role);
}
// Clear the user access cache.
drupal_static_reset('user_access');
drupal_static_reset('user_role_permissions');
return $status;
}