diff --git a/includes/views/handlers/og_handler_field_og_membership_link_edit.inc b/includes/views/handlers/og_handler_field_og_membership_link_edit.inc new file mode 100644 index 0000000..8961a05 --- /dev/null +++ b/includes/views/handlers/og_handler_field_og_membership_link_edit.inc @@ -0,0 +1,75 @@ + '', 'translatable' => TRUE); + $options['destination'] = array('default' => FALSE, 'bool' => TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + $form['text'] = array( + '#type' => 'textfield', + '#title' => t('Text to display'), + '#default_value' => $this->options['text'], + ); + $form['destination'] = array( + '#type' => 'checkbox', + '#title' => t('Use destination'), + '#description' => t('Add destination to the link'), + '#default_value' => $this->options['destination'], + '#fieldset' => 'more', + ); + parent::options_form($form, $form_state); + } + + function query() { + $this->ensure_my_table(); + $this->add_additional_fields(); + } + + function render($values) { + $value = $this->get_value($values, 'id'); + return $this->render_link($this->sanitize_value($value), $values); + } + + function render_link($data, $values) { + $this->options['alter']['make_link'] = TRUE; + $this->options['alter']['html'] = TRUE; + + // ensure user has access to edit this membership. + $og_membership = $this->get_value($values); + $group_type = $og_membership->group_type; + $gid = $og_membership->gid; + if (!og_ui_user_access_group('manage members', $group_type, $gid)) { + return; + } + + $text = !empty($this->options['text']) ? $this->options['text'] : t('edit'); + unset($this->options['alter']['fragment']); + + if (!empty($this->options['destination'])) { + $this->options['alter']['query'] = drupal_get_destination(); + } + + $this->options['alter']['path'] = "group/" . $group_type . "/" . $gid . "/admin/people/edit-membership/" . $og_membership->id; + + return $text; + } +} diff --git a/includes/views/og.views.inc b/includes/views/og.views.inc index f876eb0..1ef3e2c 100644 --- a/includes/views/og.views.inc +++ b/includes/views/og.views.inc @@ -56,6 +56,15 @@ class OgMembershipViewsController extends EntityDefaultViewsController { ), ); + // link to edit membership + $data['og_membership']['edit_membership'] = array( + 'field' => array( + 'title' => t('Edit link'), + 'help' => t('Provide a simple link to edit the membership.'), + 'handler' => 'og_handler_field_og_membership_link_edit', + ), + ); + return $data; } } diff --git a/og.info b/og.info index 2c6b3ac..d5fabb5 100644 --- a/og.info +++ b/og.info @@ -29,6 +29,7 @@ files[] = includes/views/handlers/og_handler_field_group_audience_state.inc files[] = includes/views/handlers/og_handler_field_prerender_list.inc files[] = includes/views/handlers/og_handler_field_user_roles.inc files[] = includes/views/handlers/og_handler_field_group_permissions.inc +files[] = includes/views/handlers/og_handler_field_og_membership_link_edit.inc ; Views filters files[] = includes/views/handlers/og_handler_filter_group_audience_state.inc diff --git a/og_ui/includes/views/og_ui.views_default.inc b/og_ui/includes/views/og_ui.views_default.inc index bb6cc3a..294e5b2 100644 --- a/og_ui/includes/views/og_ui.views_default.inc +++ b/og_ui/includes/views/og_ui.views_default.inc @@ -209,6 +209,13 @@ function og_ui_views_default_views() { $handler->display->display_options['fields']['og_membership_request']['table'] = 'field_data_og_membership_request'; $handler->display->display_options['fields']['og_membership_request']['field'] = 'og_membership_request'; $handler->display->display_options['fields']['og_membership_request']['relationship'] = 'og_membership_rel'; + /* Field: OG membership: Edit link */ + $handler->display->display_options['fields']['edit_membership']['id'] = 'edit_membership'; + $handler->display->display_options['fields']['edit_membership']['table'] = 'og_membership'; + $handler->display->display_options['fields']['edit_membership']['field'] = 'edit_membership'; + $handler->display->display_options['fields']['edit_membership']['relationship'] = 'og_membership_rel'; + $handler->display->display_options['fields']['edit_membership']['label'] = ''; + $handler->display->display_options['fields']['edit_membership']['element_label_colon'] = FALSE; /* Sort criterion: User: Name */ $handler->display->display_options['sorts']['name']['id'] = 'name'; $handler->display->display_options['sorts']['name']['table'] = 'users'; diff --git a/og_ui/og_ui.admin.inc b/og_ui/og_ui.admin.inc index 12e01b4..491039d 100644 --- a/og_ui/og_ui.admin.inc +++ b/og_ui/og_ui.admin.inc @@ -274,6 +274,143 @@ function og_ui_add_users_submit($form, &$form_state) { } /** + * Add Edit membership form. + */ +function og_ui_edit_membership($form, &$form_state, $group_type, $gid, $og_membership) { + og_set_breadcrumb($group_type, $gid, array(l(t('Group'), "$group_type/$gid/group"))); + $group = entity_load_single($group_type, $gid); + $label = entity_label($group_type, $group); + $account = user_load($og_membership->etid); + list(,, $bundle) = entity_extract_ids($group_type, $group); + $og_roles = og_roles($group_type, $bundle, $gid, FALSE, FALSE); + + $form['group_type'] = array('#type' => 'value', '#value' => $group_type); + $form['gid'] = array('#type' => 'value', '#value' => $gid); + $form['id'] = array('#type' => 'value', '#value' => $og_membership->id); + + $form['og_user'] = array( + '#type' => 'fieldset', + '#title' => t('Edit a group membership in %group', array('%group' => $label)), + ); + $form['og_user']['name'] = array( + '#type' => 'textfield', + '#title' => t('User name'), + '#autocomplete_path' => 'user/autocomplete', + '#required' => TRUE, + '#default_value' => $account->name, + ); + if (count($og_roles)) { + $form['og_user']['roles'] = array( + '#type' => 'checkboxes', + '#options' => $og_roles, + '#title' => t('Roles'), + '#default_value' => array_keys(og_get_user_roles($group_type, $gid, $account->uid)), + ); + } + + $field_names = og_get_group_audience_fields(); + $field_name = !empty($form_state['values']['field_name']) ? $form_state['values']['field_name'] : key($field_names); + + if (count($field_names) > 1) { + $form['og_user']['field_name'] = array( + '#type' => 'select', + '#title' => t('Field name'), + '#options' => $field_names, + '#default_value' => $field_name, + '#description' => t('Select the field name, the group membership should be registered in.'), + '#ajax' => array( + 'callback' => 'og_ui_admin_add_user_ajax_callback', + 'wrapper' => 'og-ui-field-name', + ), + ); + } + else { + // There is only a single field name, so just pass it as a value. + $form['og_user']['field_name'] = array( + '#type' => 'value', + '#value' => $field_name, + ); + } + + // Add group membership form. + $values = array(); + + // Add group membership form. We still don't have the user or state. + $form_state['og_membership'] = $og_membership; + + $form['membership_fields'] = array( + '#prefix' => '