Index: project_issue.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project_issue/project_issue.module,v
retrieving revision 1.151
diff -u -p -r1.151 project_issue.module
--- project_issue.module	23 Mar 2009 17:24:53 -0000	1.151
+++ project_issue.module	23 Mar 2009 21:51:05 -0000
@@ -1876,3 +1876,10 @@ function project_issue_views_user_access
   return !empty($arg_uid);
 }
 
+/**
+ * Return the views filter identifier for a given project issue vocabulary.
+ */
+function project_issue_views_filter_identifier($name) {
+  return drupal_strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', check_plain($name)));
+}
+
Index: views/project_issue.views_default.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project_issue/views/project_issue.views_default.inc,v
retrieving revision 1.42
diff -u -p -r1.42 project_issue.views_default.inc
--- views/project_issue.views_default.inc	23 Mar 2009 17:24:53 -0000	1.42
+++ views/project_issue.views_default.inc	23 Mar 2009 21:51:06 -0000
@@ -2204,6 +2204,7 @@ function project_issue_views_default_vie
     );
     $filters = $search_filter + $filters;
   }
+  _project_issue_views_add_taxonomy_filters($filters);
   $handler->override_option('filters', $filters);
   $handler->override_option('access', array(
     'type' => 'none',
@@ -2758,6 +2759,7 @@ function project_issue_views_default_vie
     );
     $filters = $search_filter + $filters;
   }
+  _project_issue_views_add_taxonomy_filters($filters);
   $handler->override_option('filters', $filters);
   $handler->override_option('access', array(
     'type' => 'none',
@@ -2897,3 +2899,45 @@ function project_issue_views_default_vie
   return $views;
 }
 
+/**
+ * Add exposed filters for every taxonomy vocabulary for project_issue nodes.
+ */
+function _project_issue_views_add_taxonomy_filters(&$filters) {
+  if (!module_exists('taxonomy')) {
+    return;
+  }
+  $issue_vocabularies = taxonomy_get_vocabularies('project_issue');
+  $i = 0;
+  foreach ($issue_vocabularies as $vid => $vocab) {
+    $view_key = 'tid';
+    if ($i) {
+      $view_key .= "_$i";
+    }
+    $i++;
+    $identifier = project_issue_views_filter_identifier($vocab->name);
+    $filters[$view_key] = array(
+      'operator' => 'or',
+      'value' => '',
+      'group' => '0',
+      'exposed' => TRUE,
+      'expose' => array(
+        'use_operator' => 0,
+        'operator' => 'tid_op',
+        'identifier' => $identifier,
+        'label' => check_plain($vocab->name),
+        'optional' => 1,
+        'single' => 1,
+        'remember' => 0,
+      ),
+      'type' => 'textfield',
+      'vid' => $vid,
+      'id' => 'tid',
+      'table' => 'term_node',
+      'field' => 'tid',
+      'hierarchy' => 0,
+      'relationship' => 'none',
+      'reduce_duplicates' => 1,
+    );
+  }
+}
+
