|
@@ -664,3 +664,135 @@ function tripal_views_add_node_relationship_to_chado_table_integration($defn_arr
|
|
|
|
|
|
return $integrations;
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ */
|
|
|
+function tripal_views_add_field_to_integration($table_name, $priority, $field) {
|
|
|
+ $no_errors = TRUE;
|
|
|
+
|
|
|
+ // First get the setup_id
|
|
|
+ $setup_id = db_result(db_query("SELECT setup_id FROM tripal_views WHERE table_name='%s' AND priority=%d", $table_name, $priority));
|
|
|
+
|
|
|
+ // If there isn't an integration matching that table/priority combination
|
|
|
+ // then clone the lightest priority integration
|
|
|
+ if (empty($setup_id)) {
|
|
|
+ $lightest_setup_id = tripal_views_get_lightest_priority_setup($table_name);
|
|
|
+ $defn_array = tripal_views_integration_export_entry($lightest_setup_id);
|
|
|
+ $defn_array['priority'] = $priority;
|
|
|
+ tripal_views_integration_add_entry($defn_array);
|
|
|
+ $setup_id = db_result(db_query("SELECT setup_id FROM tripal_views WHERE table_name='%s' AND priority=%d", $table_name, $priority));
|
|
|
+
|
|
|
+ if (empty($setup_id)) {
|
|
|
+ watchdog('tripal_views','Unable to clone lightest priority setup for %table in order to add the following field to the integration: %field.',
|
|
|
+ array('%table' => $table_name, '%field' => print_r($field_array,TRUE)),WATCHDOG_ERROR);
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Now delete any existing field
|
|
|
+ db_query("DELETE FROM {tripal_views_field} WHERE setup_id=%d AND column_name='%s'", $setup_id, $field['name']);
|
|
|
+ db_query("DELETE FROM {tripal_views_handlers} WHERE setup_id=%d AND column_name='%s'", $setup_id, $field['name']);
|
|
|
+ db_query("DELETE FROM {tripal_views_join} WHERE setup_id=%d AND base_table='%s' AND base_field='%s'", $setup_id, $table_name, $field['name']);
|
|
|
+
|
|
|
+ // Now we need to add/update the field
|
|
|
+ $field_record = array(
|
|
|
+ 'setup_id' => $setup_id,
|
|
|
+ 'column_name' => $field['name'],
|
|
|
+ 'name' => $field['title'],
|
|
|
+ 'description' => $field['description'],
|
|
|
+ 'type' => $field['type'],
|
|
|
+ );
|
|
|
+ if ($setup_id && $field['name'] && $field['title'] && $field['description'] && $field['type']) {
|
|
|
+ if ($defn_array['additional_content']) {
|
|
|
+ $is = db_fetch_object(db_query("SELECT true as present FROM {tripal_views_field} WHERE column_name='%s' AND setup_id=%d", $field_record['column_name'], $field_record['setup_id']));
|
|
|
+ if (!$is->present) {
|
|
|
+ $status = drupal_write_record('tripal_views_field', $field_record);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $status = drupal_write_record('tripal_views_field', $field_record, array('setup_id', 'column_name'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $status = drupal_write_record('tripal_views_field', $field_record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ drupal_set_message(t('Unable to integrate %name field due to missing required fields.', array('%name' => $field['name'])), 'error');
|
|
|
+ $status = FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($status) {
|
|
|
+
|
|
|
+ // Insert Handler Definitions
|
|
|
+ foreach ($field['handlers'] as $handler_type => $handler) {
|
|
|
+ $handler_record = array(
|
|
|
+ 'setup_id' => $setup_id,
|
|
|
+ 'column_name' => $field['name'],
|
|
|
+ 'handler_type' => $handler_type,
|
|
|
+ 'handler_name' => $handler['name'],
|
|
|
+ 'arguments' => serialize($handler)
|
|
|
+ );
|
|
|
+ if ($setup_id && $field['name'] && $handler_type && $handler['name'] && $handler) {
|
|
|
+ $status = drupal_write_record('tripal_views_handlers', $handler_record);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $status = FALSE;
|
|
|
+ }
|
|
|
+ if (!$status) {
|
|
|
+ drupal_set_message(t('Unable to integrate %handler_type handler: %handler_name', array('%handler_type' => $handler_type, '%handler_name' => $handler['name'])), 'error');
|
|
|
+ $no_errors = FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Insert Joins
|
|
|
+ if (!is_array($field['joins'])) {
|
|
|
+ $field['joins'] = array();
|
|
|
+ }
|
|
|
+ foreach ($field['joins'] as $join) {
|
|
|
+ $join_record = array(
|
|
|
+ 'setup_id' => $setup_id,
|
|
|
+ 'base_table' => $defn_array['table'],
|
|
|
+ 'base_field' => $field['name'],
|
|
|
+ 'left_table' => $join['table'],
|
|
|
+ 'left_field' => $join['field'],
|
|
|
+ );
|
|
|
+
|
|
|
+ if (!empty($join['handler'])) {
|
|
|
+ $join_record['handler'] = $join['handler'];
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $join_record['handler'] = 'views_join';
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($setup_id && $defn_array['table'] && $field['name'] && $join['table'] && $join['field']) {
|
|
|
+ $status = drupal_write_record('tripal_views_join', $join_record);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $status = FALSE;
|
|
|
+ }
|
|
|
+ if (!$status) {
|
|
|
+ drupal_set_message(
|
|
|
+ t(
|
|
|
+ 'Unable to join %left_table.%left_field with %table.%field',
|
|
|
+ array(
|
|
|
+ '%left_table' => $join['table'],
|
|
|
+ '%left_field' => $join['field'],
|
|
|
+ '%table' => $defn_array['table'],
|
|
|
+ '%field' => $field['name']
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ 'error'
|
|
|
+ );
|
|
|
+ $no_errors = FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ drupal_set_message(t('Unable to integrate %field_name field', array('%field_name' => $field['name'])), 'error');
|
|
|
+ $no_errors = FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $no_errors;
|
|
|
+}
|