diff --git a/includes/views/handlers/og_handler_filter_user_roles.inc b/includes/views/handlers/og_handler_filter_user_roles.inc new file mode 100644 index 0000000..c0573ee --- /dev/null +++ b/includes/views/handlers/og_handler_filter_user_roles.inc @@ -0,0 +1,34 @@ +value_options = array(); + // Get all role names. + $results = db_select('og_role', 'r') + ->fields('r') + ->groupBy('r.name') + ->execute(); + foreach ($results as $result) { + $this->value_options[$result->name] = $result->name; + } + } + + function query() { + // Get the og_membership table from relations. + foreach ($this->query->relationships as $alias => $info) { + if ($info['table'] == 'og_membership') { + // If there is a og_membership table present. Add some conditions. + $rel = $this->relationship; + $this->query->add_where_expression(NULL, $alias . '.gid = ' . $rel . '.gid'); + $this->query->add_where_expression(NULL, $alias . '.group_type = ' . $rel . '.group_type'); + break; + } + } + + parent::query(); + } +} diff --git a/includes/views/og.views.inc b/includes/views/og.views.inc index f876eb0..269c58b 100644 --- a/includes/views/og.views.inc +++ b/includes/views/og.views.inc @@ -43,8 +43,6 @@ class OgMembershipViewsController extends EntityDefaultViewsController { $data['og_membership']['gid']['title'] = t('Group ID'); $data['og_membership']['gid']['help'] = t('Og membership "gid" property.'); - - $data['og_membership']['og_roles'] = array( 'title' => t('OG user roles in group'), 'help' => t('Show all the roles a user belongs to in a group. Requires a relationship to users to be present.'), @@ -56,6 +54,38 @@ class OgMembershipViewsController extends EntityDefaultViewsController { ), ); + $data['og_membership']['og_users_roles'] = array( + 'title' => t('OG Roles from membership'), + 'help' => t('The OG Roles associated with the OG membership'), + // Provide a possible relationship to roles through uid. + 'relationship' => array( + 'label' => t('OG Roles from OG membership'), + 'base' => 'og_users_roles', + 'base field' => 'uid', + 'relationship field' => 'etid', + ), + ); + + $data['og_role'] = array( + 'table' => array( + 'group' => t('OG user roles'), + 'join' => array( + // Attach automatically to og_users_roles relations. + 'og_users_roles' => array( + 'left_field' => 'rid', + 'field' => 'rid', + ), + ) + ) + ); + $data['og_role']['name'] = array( + 'title' => t('Role Name'), + 'help' => t('The OG role name.'), + 'filter' => array( + 'handler' => 'og_handler_filter_user_roles', + ), + ); + return $data; } } diff --git a/og.info b/og.info index 3869456..282ea0f 100644 --- a/og.info +++ b/og.info @@ -32,6 +32,7 @@ files[] = includes/views/handlers/og_handler_field_group_permissions.inc ; Views filters files[] = includes/views/handlers/og_handler_filter_group_audience_state.inc +files[] = includes/views/handlers/og_handler_filter_user_roles.inc ; Views relationships files[] = includes/views/handlers/og_handler_relationship.inc