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.
