Index: user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.679
diff -u -F^f -r1.679 user.module
--- user.module	8 Sep 2006 23:18:51 -0000	1.679
+++ user.module	9 Sep 2006 16:16:08 -0000
@@ -1861,9 +1861,22 @@ function user_admin_role() {
 
   if ($op == t('Save role')) {
     if ($edit['name']) {
-      db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
-      drupal_set_message(t('The changes have been saved.'));
-      drupal_goto('admin/user/roles');
+      if ($role = db_fetch_object(db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']))) {
+        if ($role->rid == $id) {
+          // Allows original role name to be saved
+          db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
+          drupal_set_message(t('The changes have been saved.'));
+          drupal_goto('admin/user/roles');
+        }
+        else {
+          form_set_error('name', t('The role name already exist. Please choose another role name.'));
+        }
+      }
+      else {
+        db_query("UPDATE {role} SET name = '%s' WHERE rid = %d", $edit['name'], $id);
+        drupal_set_message(t('The changes have been saved.'));
+        drupal_goto('admin/user/roles');
+      }
     }
     else {
       form_set_error('name', t('You must specify a valid role name.'));
@@ -1880,25 +1893,31 @@ function user_admin_role() {
   }
   else if ($op == t('Add role')) {
     if ($edit['name']) {
-      db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
-      drupal_set_message(t('The role has been added.'));
-      drupal_goto('admin/user/roles');
+      if (!db_num_rows(db_query("SELECT rid FROM {role} WHERE name = '%s'", $edit['name']))) {
+        db_query("INSERT INTO {role} (name) VALUES ('%s')", $edit['name']);
+        drupal_set_message(t('The role has been added.'));
+        drupal_goto('admin/user/roles');
+      }
+      else {
+        form_set_error('name', t('The role name already exist. Please choose another role name.'));
+      }
     }
     else {
       form_set_error('name', t('You must specify a valid role name.'));
     }
   }
-  else if ($id) {
-    // Display the role form.
+  if ($id) {
+    // Display the edit role form.
     $role = db_fetch_object(db_query('SELECT * FROM {role} WHERE rid = %d', $id));
-    $form['name'] = array('#type' => 'textfield', '#title' => t('Role name'), '#default_value' => $role->name, '#size' => 30, '#maxlength' => 64, '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'));
+    $form['name'] = array('#type' => 'textfield', '#title' => t('Role name'), '#default_value' => $role->name, '#size' => 30, '#required' => TRUE, '#maxlength' => 64, '#description' => t('The name for this role. Example: "moderator", "editorial board", "site architect".'));
     $form['submit'] = array('#type' => 'submit', '#value' => t('Save role'));
     $form['delete'] = array('#type' => 'submit', '#value' => t('Delete role'));
-
-    return $form;
   }
-  $form['name'] = array('#type' => 'textfield', '#size' => 32, '#maxlength' => 64);
-  $form['submit'] = array('#type' => 'submit', '#value' => t('Add role'));
+  else {
+    $form['name'] = array('#type' => 'textfield', '#size' => 32, '#maxlength' => 64);
+    $form['submit'] = array('#type' => 'submit', '#value' => t('Add role'));
+  }
+  
   return $form;
 }
 
