Index: data_taxonomy/data_taxonomy.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/data/data_taxonomy/Attic/data_taxonomy.admin.inc,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 data_taxonomy.admin.inc
--- data_taxonomy/data_taxonomy.admin.inc	21 Jan 2010 00:24:26 -0000	1.1.2.2
+++ data_taxonomy/data_taxonomy.admin.inc	4 Aug 2010 20:02:24 -0000
@@ -9,20 +9,59 @@
  * Form callback for relating a data table to a node.
  */
 function data_taxonomy_settings_form(&$form_state, $table) {
+  ctools_include('dependent');
   drupal_set_title($table->get('title'));
-
-  $form = $vocabularies = array();
-  foreach (taxonomy_get_vocabularies() as $v) {
-    $vocabularies[$v->vid] = $v->name;
+  
+  $form = array();
+  
+  $vocabularies = taxonomy_get_vocabularies();
+  $modules = array();
+  foreach ($vocabularies as $voc) {
+    $options_vids[$voc->vid] = check_plain($voc->name);
+    $module = filter_xss_admin($voc->module);
+    if (isset($options_modules[$module])) {
+      unset($options_modules[$module]);
+    }
+    else {
+      $options_modules[$module] = check_plain($voc->module);
+    }
   }
+  
   $meta = $table->get('meta');
   $form['#table'] = $table;
+  
+  $form['vocabulary_method'] = array(
+    '#type' => 'radios',
+    '#options' => array(
+      'vid' => t('VID'),
+      'module' => t('Module')
+    ),
+    '#title' => t('Select vocabularies by'),
+    '#default_value' => $meta['data_taxonomy']['vocabulary_method'] ? $meta['data_taxonomy']['vocabulary_method'] : 'vid',
+  );
+
   $form['vocabularies'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Vocabularies'),
-    '#options' => $vocabularies,
+    '#options' => $options_vids,
     '#default_value' => $meta['data_taxonomy']['vocabularies'],
     '#description' => t('Select the vocabulary to whose terms this data table\'s entries can be related to.'),
+    '#prefix' => '<div id="edit-vocabularies-wrapper"><div id="edit-vocabularies">',
+    '#suffix' => '</div></div>',
+    '#process' => array('ctools_dependent_process', 'expand_checkboxes'),
+    '#dependency' => array('radio:vocabulary_method' => array('vid')),
+  );
+  
+  $form['vocabulary_modules'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Vocabulary modules'),
+    '#options' => $options_modules,
+    '#default_value' => $meta['data_taxonomy']['vocabulary_modules'],
+    '#description' => t('Select the vocabulary to whose terms this data table\'s entries can be related to.'),
+    '#prefix' => '<div id="edit-vocabulary-modules-wrapper"><div id="edit-vocabulary-modules">',
+    '#suffix' => '</div></div>',
+    '#process' => array('ctools_dependent_process', 'expand_checkboxes'),
+    '#dependency' => array('radio:vocabulary_method' => array('module')),
   );
   $schema = $table->get('table_schema');
   $fields = drupal_map_assoc(array_keys($schema['fields']));
@@ -45,7 +84,9 @@ function data_taxonomy_settings_form(&$f
  */
 function data_taxonomy_settings_form_submit($form, &$form_state) {
   $meta = $form['#table']->get('meta');
+  $meta['data_taxonomy']['vocabulary_method'] = $form_state['values']['vocabulary_method'];
   $meta['data_taxonomy']['vocabularies'] = array_filter($form_state['values']['vocabularies']);
+  $meta['data_taxonomy']['vocabulary_modules'] = array_filter($form_state['values']['vocabulary_modules']);
   $meta['data_taxonomy']['id'] = $form_state['values']['id'];
   $form['#table']->update(array('meta' => $meta));
   drupal_set_message(t('Settings saved.'));
Index: data_taxonomy/data_taxonomy.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/data/data_taxonomy/Attic/data_taxonomy.module,v
retrieving revision 1.1.2.16
diff -u -p -r1.1.2.16 data_taxonomy.module
--- data_taxonomy/data_taxonomy.module	25 Jan 2010 18:10:45 -0000	1.1.2.16
+++ data_taxonomy/data_taxonomy.module	4 Aug 2010 20:02:24 -0000
@@ -63,12 +63,23 @@ function data_taxonomy_perm() {
  */
 function data_taxonomy_feeds_data_processor_targets_alter(&$fields, $data_table) {
   if ($info = data_taxonomy_get_info($data_table)) {
-    foreach ($info['vocabularies'] as $vid) {
-      $vocabulary = taxonomy_vocabulary_load($vid);
-      $fields['data_taxonomy:'. $vid] = array(
-        'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
-        'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
-      );
+    if ($info['vocabulary_method'] == 'module') {
+      foreach ($info['vocabulary_modules'] as $module) {
+        $vocabulary = _data_taxonomy_vocabulary_load_by_module($module);
+        $fields['data_taxonomy:'. $module] = array(
+          'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+        );
+      }
+    }
+    else {
+      foreach ($info['vocabularies'] as $vid) {
+        $vocabulary = taxonomy_vocabulary_load($vid);
+        $fields['data_taxonomy:'. $vid] = array(
+          'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+        );
+      }
     }
   }
 }
@@ -79,10 +90,21 @@ function data_taxonomy_feeds_data_proces
 function data_taxonomy_data_insert($record, $table_name) {
   if ($info = data_taxonomy_get_info($data_table)) {
     $id = $record[$info['id']];
-    foreach ($info['vocabularies'] as $vid) {
-      if (is_array($record['data_taxonomy:'. $vid])) {
-        foreach ($record['data_taxonomy:'. $vid] as $tid) {
-          db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+    if ($info['vocabulary_method'] == 'module') {
+      foreach ($info['vocabulary_modules'] as $module) {
+        if (is_array($record['data_taxonomy:'. $module])) {
+          foreach ($record['data_taxonomy:'. $module] as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
+      }
+    }
+    else {
+      foreach ($info['vocabularies'] as $vid) {
+        if (is_array($record['data_taxonomy:'. $vid])) {
+          foreach ($record['data_taxonomy:'. $vid] as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
         }
       }
     }
@@ -106,11 +128,23 @@ function data_taxonomy_data_delete_query
 function data_taxonomy_data_update($record, $table_name) {
   if ($info = data_taxonomy_get_info($data_table)) {
     $id = $record[$info['id']];
-    foreach ($info['vocabularies'] as $vid) {
-      if (is_array($record['data_taxonomy:'. $vid])) {
-        db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid WHERE td.vid = %d", $vid);
-        foreach ($record['data_taxonomy:'. $vid] as $tid) {
-          db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+    if ($info['vocabulary_method'] == 'module') {
+      foreach ($info['vocabulary_modules'] as $module) {
+        if (is_array($record['data_taxonomy:'. $module])) {
+          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid JOIN {vocabulary} v ON td.vid = v.vid WHERE v.module = %d", $module);
+          foreach ($record['data_taxonomy:'. $module] as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
+      }
+    }
+    else {
+      foreach ($info['vocabularies'] as $vid) {
+        if (is_array($record['data_taxonomy:'. $vid])) {
+          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid WHERE td.vid = %d", $vid);
+          foreach ($record['data_taxonomy:'. $vid] as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
         }
       }
     }
@@ -349,6 +383,18 @@ function _data_taxonomy_replace_tokens($
 }
 
 /**
+ * Load a vocabulary by it's module name.
+ */
+function _data_taxonomy_vocabulary_load_by_module($module) {
+  $vocabularies = taxonomy_get_vocabularies();
+  foreach ($vocabularies as $vocabulary) {
+    if ($vocabulary->module == $module) {
+      return $vocabulary;
+    }
+  }
+}
+
+/**
  * Preprocessor for theme('data_taxonomy_tagging_form').
  */
 function template_preprocess_data_taxonomy_tagging_form(&$vars) {
Index: data_taxonomy/views/data_taxonomy.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/data/data_taxonomy/views/Attic/data_taxonomy.views.inc,v
retrieving revision 1.1.2.4
diff -u -p -r1.1.2.4 data_taxonomy.views.inc
--- data_taxonomy/views/data_taxonomy.views.inc	21 Jan 2010 22:39:22 -0000	1.1.2.4
+++ data_taxonomy/views/data_taxonomy.views.inc	4 Aug 2010 20:02:24 -0000
@@ -54,7 +54,7 @@ function data_taxonomy_views_data() {
   foreach ($tables as $table) {
     $meta = $table->get('meta');
 
-    if (!empty($meta['data_taxonomy']['vocabularies'])) {
+    if (!empty($meta['data_taxonomy']['vocabularies']) || !empty($meta['data_taxonomy']['vocabulary_modules'])) {
       $data['data_taxonomy']['table']['join'][$table->get('name')] = array(
         'left_field' => $meta['data_taxonomy']['id'],
         'field' => 'id',
Index: data_taxonomy/views/data_taxonomy_views_handler_field_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/data/data_taxonomy/views/Attic/data_taxonomy_views_handler_field_form.inc,v
retrieving revision 1.1.2.8
diff -u -p -r1.1.2.8 data_taxonomy_views_handler_field_form.inc
--- data_taxonomy/views/data_taxonomy_views_handler_field_form.inc	25 Jan 2010 17:45:16 -0000	1.1.2.8
+++ data_taxonomy/views/data_taxonomy_views_handler_field_form.inc	4 Aug 2010 20:02:24 -0000
@@ -25,11 +25,26 @@ class data_taxonomy_views_handler_field_
     $options = array();
     $table = data_get_table($this->table);
     $meta = $table->get('meta');
-    if (!empty($meta['data_taxonomy']['vocabularies'])) {
-      foreach ($meta['data_taxonomy']['vocabularies'] as $vid) {
-        $options[$vid] = taxonomy_vocabulary_load($vid)->name;
+
+    if ($meta['data_taxonomy']['vocabulary_method'] == 'vid') {
+      if (!empty($meta['data_taxonomy']['vocabularies'])) {
+        foreach ($meta['data_taxonomy']['vocabularies'] as $vid) {
+          $options[$vid] = taxonomy_vocabulary_load($vid)->name;
+        }
+      }
+    }
+    elseif ($meta['data_taxonomy']['vocabulary_method'] == 'module') {
+      if (!empty($meta['data_taxonomy']['vocabulary_modules'])) {
+        $vocabularies = taxonomy_get_vocabularies();
+        foreach ($vocabularies as $voc) {
+          $vocabularies_modules[filter_xss_admin($voc->module)] = check_plain($voc->module);
+        }
+        foreach ($meta['data_taxonomy']['vocabulary_modules'] as $module) {
+          $options[$module] = $vocabularies_modules[$module];
+        }
       }
     }
+
     if (!empty($options)) {
       $form['vocabularies'] = array(
         '#title' => t('Enabled vocabularies'),
@@ -56,7 +71,7 @@ class data_taxonomy_views_handler_field_
     // Add the id field for this table to the query.
     $table = data_get_table($this->table);
     $meta = $table->get('meta');
-    if (!empty($meta['data_taxonomy']['vocabularies']) && isset($meta['data_taxonomy']['id'])) {
+    if (!empty($meta['data_taxonomy']['vocabularies']) || !empty($meta['data_taxonomy']['vocabulary_modules']) && isset($meta['data_taxonomy']['id'])) {
       $this->id = $this->query->add_field($this->table_alias, $meta['data_taxonomy']['id']);
     }
     $this->add_additional_fields();
@@ -69,13 +84,33 @@ class data_taxonomy_views_handler_field_
     $output = '';
     $table = data_get_table($this->table);
     $meta = $table->get('meta');
-    if (!empty($meta['data_taxonomy']['vocabularies'])) {
-      foreach ($meta['data_taxonomy']['vocabularies'] as $vid) {
-        if (!empty($this->options['vocabularies'][$vid])) {
-          $output .= drupal_get_form('data_taxonomy_tagging_form', $vid, $values->{$this->id}, $this->table, $this->options['path'], is_array($this->view->args) ? $this->view->args : array());
+    $vids = array();
+    
+    if ($meta['data_taxonomy']['vocabulary_method'] == 'vid') {
+      if (!empty($meta['data_taxonomy']['vocabularies'])) {
+        foreach ($meta['data_taxonomy']['vocabularies'] as $vid) {
+          if (!empty($this->options['vocabularies'][$vid])) {            
+            $vids[] = $vid;
+          }
+        }
+      }
+    }
+    elseif ($meta['data_taxonomy']['vocabulary_method'] == 'module') {
+      if (!empty($meta['data_taxonomy']['vocabulary_modules'])) {
+        $vocabularies = taxonomy_get_vocabularies();
+        foreach ($vocabularies as $voc) {
+          $vocabulary_vids[$voc->module] = $voc->vid;
+        }
+        foreach ($meta['data_taxonomy']['vocabulary_modules'] as $module) {
+          if (!empty($this->options['vocabularies'][$module])) {
+            $vids[] = $vocabulary_vids[$module];
+          }
         }
       }
     }
+    foreach ($vids as $vid) {
+      $output .= drupal_get_form('data_taxonomy_tagging_form', $vid, $values->{$this->id}, $this->table, $this->options['path'], is_array($this->view->args) ? $this->view->args : array());
+    }
     return $output;
   }
 
