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	16 Jul 2009 00:19:35 -0000
@@ -13,6 +13,13 @@ function og_user_roles_schema() {
     ),
     'primary key' => array('gid', 'uid', 'rid'),
   );
+  $schema['og_users_roles_group'] = 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,21 @@ function og_user_roles_update_6203() {
   return $ret;
 }
 
+/**
+ * Create {og_users_roles_group} table.
+ */
+function og_user_roles_update_6204() {
+  $ret = array();
+  if (db_table_exists('og_users_roles_group')) {
+    return $ret;
+  }
+  db_create_table($ret, 'og_users_roles_group', 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	16 Jul 2009 01:05:42 -0000
@@ -319,7 +319,14 @@ 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)) {
+      $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} WHERE gid = %d", $nid));
+      }
+      if (!$default_role) {
+        $default_role = variable_get('og_user_roles_default_role', 0);
+      }
+      if ($default_role) {
         og_user_roles_role_add($nid, $uid, $default_role);
       }
 
@@ -358,10 +365,32 @@ function og_user_roles_og($op, $nid, $ui
  */
 function og_user_roles_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
   switch ($op) {
+    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} WHERE gid = %d", $node->nid));
+      }
+      break;
+
+    case 'insert':
+      if (og_is_group_type($node->type)) {
+        db_query("INSERT INTO {og_users_roles_group} (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} 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} (gid, default_role) VALUES (%d, %d)", $node->nid, $node->og_user_roles_default_role);
+        }
+      }
+      break;
+
     case 'delete':
       // 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} WHERE gid = %d", $node->nid);
       }
       break;
   }
@@ -380,6 +409,7 @@ function og_user_roles_form_user_admin_r
 function og_user_roles_user_admin_role_delete_submit($form, &$form_state) {
   // Remove all role assignments for deleted user role.
   db_query('DELETE FROM {og_users_roles} WHERE rid = %d', $form_state['values']['rid']);
+  db_query("DELETE FROM {og_users_roles_group} WHERE default_role = %d", $form_state['values']['rid']);
 }
 
 /**
@@ -444,3 +474,52 @@ function og_user_roles_role_delete($gid,
   }
 }
 
+/**
+ * Retrieve all roles assignable in a group.
+ */
+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)) {
+      $default = !empty($node->og_user_roles_default_role) ? $node->og_user_roles_default_role : 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'),
+        '#options' => $options,
+        '#default_value' => $default,
+        '#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) {
+  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	16 Jul 2009 00:57:54 -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 a group node.'),
+    '#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');
