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');