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..6b93a66 --- /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 d2a2d4a..0def1f5 100644 --- a/includes/views/og.views.inc +++ b/includes/views/og.views.inc @@ -86,6 +86,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 282ea0f..f0cd614 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..fbf56f4 100644 --- a/og_ui/includes/views/og_ui.views_default.inc +++ b/og_ui/includes/views/og_ui.views_default.inc @@ -209,6 +209,14 @@ 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; + $handler->display->display_options['fields']['edit_membership']['destination'] = TRUE; /* Sort criterion: User: Name */ $handler->display->display_options['sorts']['name']['id'] = 'name'; $handler->display->display_options['sorts']['name']['table'] = 'users'; @@ -265,4 +273,4 @@ function og_ui_views_default_views() { $views[$view->name] = $view; return $views; -} \ No newline at end of file +} diff --git a/og_ui/og_ui.admin.inc b/og_ui/og_ui.admin.inc index 8852dda..c4a682a 100644 --- a/og_ui/og_ui.admin.inc +++ b/og_ui/og_ui.admin.inc @@ -274,6 +274,95 @@ 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); + // Get all the non-default roles. + $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' => 'markup', + '#title' => t('User name'), + '#markup' => $account->name, + ); + if ($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)), + ); + } + + // 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' => '