Index: og_user_roles.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/og_user_roles.install,v
retrieving revision 1.9
diff -u -p -r1.9 og_user_roles.install
--- og_user_roles.install	16 Jun 2009 21:44:47 -0000	1.9
+++ og_user_roles.install	15 Jul 2009 09:47:18 -0000
@@ -13,6 +13,13 @@ function og_user_roles_schema() {
     ),
     'primary key' => array('gid', 'uid', 'rid'),
   );
+  $schema['og_users_roles_group_settings'] = array(
+    'fields' => array(
+      'gid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+      'default_role' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+    ),
+    'primary key' => array('gid'),
+  );
   return $schema;
 }
 
@@ -104,3 +111,17 @@ function og_user_roles_update_6203() {
   return $ret;
 }
 
+/**
+ * Create
+ */
+function og_user_roles_update_6204() {
+  $ret = array();
+  db_create_table($ret, 'og_users_roles_group_settings', array(
+    'fields' => array(
+      'gid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+      'default_role' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0),
+    ),
+    'primary key' => array('gid'),
+  ));
+  return $ret;
+}
Index: og_user_roles.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/og_user_roles.module,v
retrieving revision 1.38
diff -u -p -r1.38 og_user_roles.module
--- og_user_roles.module	1 Jul 2009 11:56:31 -0000	1.38
+++ og_user_roles.module	15 Jul 2009 09:47:19 -0000
@@ -319,7 +319,12 @@ function og_user_roles_og($op, $nid, $ui
   switch ($op) {
     case 'user insert':
       // Add default role for new group members, if configured.
-      if ($default_role = variable_get('og_user_roles_default_role', 0)) {
+      if (variable_get('og_user_roles_admin_set_default_role', 0)) {
+        $default_role = db_result(db_query("SELECT default_role FROM {og_users_roles_group_settings} WHERE gid = %d", $nid));
+        $default_role = (isset($default_role) ? $default_role : variable_get('og_user_roles_default_role', 0));
+        og_user_roles_role_add($nid, $uid, $default_role);
+      }
+      elseif ($default_role = variable_get('og_user_roles_default_role', 0)) {
         og_user_roles_role_add($nid, $uid, $default_role);
       }
 
@@ -362,6 +367,28 @@ function og_user_roles_nodeapi(&$node, $
       // Remove all data for a deleted group.
       if (og_is_group_type($node->type)) {
         db_query("DELETE FROM {og_users_roles} WHERE gid = %d", $node->nid);
+        db_query("DELETE FROM {og_users_roles_group_settings} WHERE gid = %d", $node->nid);
+      }
+      break;
+
+    case 'insert':
+      if (og_is_group_type($node->type)) {
+        db_query("INSERT INTO {og_users_roles_group_settings} (gid, default_role) VALUES(%d, %d)", $node->nid, $node->og_user_roles_default_role);
+      }
+      break;
+
+    case 'update':
+      if (og_is_group_type($node->type)) {
+        db_query("UPDATE {og_users_roles_group_settings} SET default_role = %d WHERE gid =  %d", $node->og_user_roles_default_role, $node->nid);
+        if (!db_affected_rows()) {
+          db_query("INSERT INTO {og_users_roles_group_settings} (gid, default_role) VALUES(%d, %d)", $node->nid, $node->og_user_roles_default_role);
+        }
+      }
+      break;
+
+    case 'load':
+      if (og_is_group_type($node->type)) {
+        $node->og_user_roles_default_role = db_result(db_query("SELECT default_role FROM {og_users_roles_group_settings} WHERE gid =  %d", $node->nid));
       }
       break;
   }
@@ -444,3 +471,59 @@ function og_user_roles_role_delete($gid,
   }
 }
 
+/**
+ * Retrieve the roles available within the context of a particular type of group
+ * node.
+ */
+function og_user_roles_get_group_roles($node_type) {
+  $allowed_roles = array_filter(variable_get("og_user_roles_roles_{$node_type}", array()));
+  $user_roles = user_roles();
+  foreach ($allowed_roles as $rid => $checked) {
+    $roles[$rid] = $user_roles[$rid];
+  }
+  return $roles;
+}
+
+/**
+ * Implementation of hook_form_alter().
+ */
+function og_user_roles_form_alter(&$form, &$form_state, $form_id) {
+  // Add default user role option to node form.
+  if (isset($form['#node']) && $form_id == $form['#node']->type .'_node_form') {
+    $node = $form['#node'];
+    if (og_is_group_type($node->type) && variable_get('og_user_roles_admin_set_default_role', 0)) {
+      $node = (array) $node;
+      $node += array('og_user_roles_default_role');
+      $node = (object) $node;
+
+      $default = variable_get('og_user_roles_default_role', 0);
+      $options = og_user_roles_get_group_roles($node->type);
+      $form['og_user_roles_default_role'] = array(
+        '#type' => 'select',
+        '#title' => t('Default role for new members'),
+        '#default_value' => isset($node->og_user_roles_default_role) ?  $node->og_user_roles_default_role : $default,
+        '#options' => $options,
+        '#weight' => module_exists('content') ?  content_extra_field_weight($node->type, 'og_user_roles_default_role') : 0,
+        '#description' =>t('Configure a default role to be assigned to new group members.'),
+      );
+    }
+  }
+}
+
+/**
+ * Implementation of hook_content_extra_fields().
+ */
+function og_user_roles_content_extra_fields($type_name) {
+  $extra = array();
+
+  if (og_is_group_type($type_name)) {
+    $extra['og_user_roles_default_role'] = array(
+      'label' => t('Default role for new members'),
+      'description' => t('Configure a default role to be assigned to new group members.'),
+      'weight' => 0,
+    );
+  }
+
+  return $extra;
+}
+
Index: og_user_roles.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/og_user_roles/og_user_roles.pages.inc,v
retrieving revision 1.3
diff -u -p -r1.3 og_user_roles.pages.inc
--- og_user_roles.pages.inc	8 Jun 2009 13:00:05 -0000	1.3
+++ og_user_roles.pages.inc	15 Jul 2009 09:47:19 -0000
@@ -65,6 +65,12 @@ function og_user_roles_admin_settings() 
     '#options' => array(0 => t('None')) + $roles,
     '#default_value' => variable_get('og_user_roles_default_role', 0),
   );
+  $form['og_user_roles_defaults']['og_user_roles_admin_set_default_role'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow group admins set default role for new members'),
+    '#description' => t('If enabled, group admins can override the default role for new group members when editing the group.'),
+    '#default_value' => variable_get('og_user_roles_admin_set_default_role', 0),
+  );
 
   return system_settings_form($form);
 }
@@ -75,11 +81,7 @@ function og_user_roles_admin_settings() 
 function og_user_roles_page($node) {
   drupal_set_title(t('Member roles for !title', array('!title' => l($node->title, "node/$node->nid"))));
 
-  $allowed_roles = array_filter(variable_get("og_user_roles_roles_{$node->type}", array()));
-  $user_roles = user_roles();
-  foreach ($allowed_roles as $rid => $checked) {
-    $roles[$rid] = $user_roles[$rid];
-  }
+  $roles = og_user_roles_get_group_roles($node->type);
 
   // Retrieve list of all group users
   $sql = og_list_users_sql(0, 0, 'ou.is_admin DESC, ou.is_active ASC, u.name ASC');
