Index: views_user.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/views/modules/views_user.inc,v retrieving revision 1.14.2.7 diff -u -p -r1.14.2.7 views_user.inc --- views_user.inc 3 Mar 2007 22:31:27 -0000 1.14.2.7 +++ views_user.inc 16 Jul 2007 21:14:56 -0000 @@ -105,6 +105,20 @@ function user_views_tables() { ), ) ); + + $tables['role'] = array( + 'name' => 'role', + 'provider' => 'internal', // won't show up in external list. + 'join' => array( + 'left' => array( + 'table' => 'users_roles', + 'field' => 'rid' + ), + 'right' => array( + 'field' => 'rid' + ), + ), + ); return $tables; } @@ -125,6 +139,11 @@ function user_views_arguments() { 'handler' => t('views_handler_arg_username'), 'help' => t('The Username argument allows users to file to a nodes authored by the specified username.'), ), + 'role' => array( + 'name' => t('Role: Author Role'), + 'handler' => 'views_handler_arg_role', + 'help' => t('Include the node only if the author is a member of the specified role.'), + ), ); return $arguments; } @@ -333,6 +352,36 @@ function views_handler_arg_username($op, } } +function views_handler_arg_role($op, &$query, $argtype, $arg = '') { + switch($op) { + case 'summary': + $query->add_table('role', true); + + $query->add_field('name', 'role'); + $query->add_field('rid', 'role'); + $fieldinfo['field'] = "role.name"; + return $fieldinfo; + break; + case 'sort': + $query->add_orderby('role', 'name', $argtype); + break; + case 'filter': + $role = check_plain($arg); + $table_data = _views_get_tables(); + $joininfo = $table_data['role']['join']; + $joininfo['type'] = 'inner'; + + $query->add_table("role", true, 1, $joininfo); + $query->add_where("role.name = '%s'", $role); + break; + case 'link': + return l($query->name, "$arg/" . str_replace(' ', '+', $query->name)); + case 'title': + $role = db_fetch_object(db_query("SELECT name FROM {role} WHERE rid = '%d'", $query)); + return $role->name; + } +} + /* * Create a list of usernames. * I worry this will really, really suck for large sites.