|  | @@ -0,0 +1,1684 @@
 | 
	
		
			
				|  |  | +<?php
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Implements hook_field_create_info().
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * This is a Tripal defined hook that supports integration with the
 | 
	
		
			
				|  |  | + * TripalEntity field.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_fields($entity_type, $bundle, $chado_bundle) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Get the details about the mapping of this bundle to the Chado table:
 | 
	
		
			
				|  |  | +  $details = array(
 | 
	
		
			
				|  |  | +    'chado_cvterm_id' => $chado_bundle['type_id'],
 | 
	
		
			
				|  |  | +    'chado_table' => $chado_bundle['data_table'],
 | 
	
		
			
				|  |  | +    'chado_type_table' => $chado_bundle['type_linker_table'],
 | 
	
		
			
				|  |  | +    'chado_type_column' => $chado_bundle['type_column'],
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $info = array();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create the fields for each column in the table.
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_fields_base($info, $details, $entity_type, $bundle);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create custom fields.
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_fields_custom($info, $details, $entity_type, $bundle);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create fields for linking tables.
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_fields_linker($info, $details, $entity_type, $bundle);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  foreach ($info as $field_name => $details) {
 | 
	
		
			
				|  |  | +    $field_type = $details['type'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // If the field already exists then skip it.
 | 
	
		
			
				|  |  | +    $field = field_info_field($details['field_name']);
 | 
	
		
			
				|  |  | +    if ($field) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Create the field.
 | 
	
		
			
				|  |  | +    $field = field_create_field($details);
 | 
	
		
			
				|  |  | +    if (!$field) {
 | 
	
		
			
				|  |  | +      tripal_set_message(t("Could not create new field: %field.",
 | 
	
		
			
				|  |  | +          array('%field' =>  $details['field_name'])), TRIPAL_ERROR);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param unknown $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_fields_base(&$info, $details, $entity_type, $bundle) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Iterate through the columns of the table and see if fields have been
 | 
	
		
			
				|  |  | +  // created for each one. If not, then create them.
 | 
	
		
			
				|  |  | +  $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +  if (!$schema) {
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Get the list of columns for this table and create a new field for each one.
 | 
	
		
			
				|  |  | +  $columns = $schema['fields'];
 | 
	
		
			
				|  |  | +  foreach ($columns as $column_name => $details) {
 | 
	
		
			
				|  |  | +    // Don't create base fields for the primary key and the type_id field.
 | 
	
		
			
				|  |  | +    if ($column_name == $pkey or $column_name == $type_field) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $cvterm = tripal_get_chado_semweb_term($table_name, $column_name, array('return_object' => TRUE));
 | 
	
		
			
				|  |  | +    if (!$cvterm) {
 | 
	
		
			
				|  |  | +      tripal_report_error('tripal', TRIPAL_ERROR,
 | 
	
		
			
				|  |  | +        'Cannot create field for "%table_name.%column_name". Missing an appropriate vocabulary term',
 | 
	
		
			
				|  |  | +         array('%table_name' => $table_name, '%column_name' => $column_name));
 | 
	
		
			
				|  |  | +      drupal_set_message(t('Cannot create field for "%table_name.%column_name". Missing an appropriate vocabulary term',
 | 
	
		
			
				|  |  | +        array('%table_name' => $table_name, '%column_name' => $column_name)), 'error');
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $field_name = strtolower($cvterm->dbxref_id->db_id->name . '__' . preg_replace('/ /', '_', $cvterm->name));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Skip the primary key field.
 | 
	
		
			
				|  |  | +    if ($column_name == $schema['primary key'][0]) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Skip the type field.
 | 
	
		
			
				|  |  | +    if ($table_name == $type_table and $column_name == $type_field) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Set some defaults for the field.
 | 
	
		
			
				|  |  | +    $base_info = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => '',
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Alter the field info array depending on the column details.
 | 
	
		
			
				|  |  | +    switch($details['type']) {
 | 
	
		
			
				|  |  | +      case 'char':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'text';
 | 
	
		
			
				|  |  | +        $base_info['settings']['max_length'] = $details['length'];
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'varchar':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'text';
 | 
	
		
			
				|  |  | +        $base_info['settings']['max_length'] = $details['length'];
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'text':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'text';
 | 
	
		
			
				|  |  | +        $base_info['settings']['max_length'] = 17179869184;
 | 
	
		
			
				|  |  | +        $base_info['settings']['text_processing'] = 1;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'blob':
 | 
	
		
			
				|  |  | +        // not sure how to support a blob field.
 | 
	
		
			
				|  |  | +        continue;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'int':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'number_integer';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'float':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'number_float';
 | 
	
		
			
				|  |  | +        $base_info['settings']['precision'] = 10;
 | 
	
		
			
				|  |  | +        $base_info['settings']['scale'] = 2;
 | 
	
		
			
				|  |  | +        $base_info['settings']['decimal_separator'] = '.';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'numeric':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'number_decimal';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'serial':
 | 
	
		
			
				|  |  | +        // Serial fields are most likely not needed as a field.
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'boolean':
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'list_boolean';
 | 
	
		
			
				|  |  | +        $base_info['settings']['allowed_values'] = array(0 => "No", 1 => "Yes");
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'datetime':
 | 
	
		
			
				|  |  | +        // Use the Drupal Date and Date API to create the field/widget
 | 
	
		
			
				|  |  | +        $base_info['type'] = 'datetime';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Set some default semantic web information
 | 
	
		
			
				|  |  | +    if ($column_name == 'uniquename') {
 | 
	
		
			
				|  |  | +      $base_info['settings']['text_processing'] = 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // PUB TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'pub' and $column_name == 'uniquename') {
 | 
	
		
			
				|  |  | +      $base_info['type'] = 'text';
 | 
	
		
			
				|  |  | +      $base_info['settings']['text_processing'] = 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // ANALYSIS TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'sourceuri') {
 | 
	
		
			
				|  |  | +      $base_info['type'] = 'text';
 | 
	
		
			
				|  |  | +      $base_info['settings']['text_processing'] = 0;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $info[$field_name] = $base_info;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param unknown $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_fields_custom(&$info, $details, $entity_type, $bundle) {
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // BASE ORGANISM_ID
 | 
	
		
			
				|  |  | +  if ($table_name != 'organism' and
 | 
	
		
			
				|  |  | +      array_key_exists('organism_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +    $field_name = 'obi__organism';
 | 
	
		
			
				|  |  | +    $field_type = 'obi__organism';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // BASE DBXREF
 | 
	
		
			
				|  |  | +  if (array_key_exists('dbxref_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +    $field_name = 'data__accession';
 | 
	
		
			
				|  |  | +    $field_type = 'data__accession';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE MD5CHECKSUM
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_checksum';
 | 
	
		
			
				|  |  | +    $field_type = 'data__sequence_checksum';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE RESIDUES
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence';
 | 
	
		
			
				|  |  | +    $field_type = 'data__sequence';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE SEQLEN
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_length';
 | 
	
		
			
				|  |  | +    $field_type = 'data__sequence_length';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // GENE TRANSCRIPTS
 | 
	
		
			
				|  |  | +  $rel_table = $table_name . '_relationship';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($rel_table) and $bundle->label == 'gene') {
 | 
	
		
			
				|  |  | +    $field_name = 'so__transcript';
 | 
	
		
			
				|  |  | +    $field_type = 'so__transcript';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // ORGANISM TYPE_ID
 | 
	
		
			
				|  |  | +//   if ($table_name == 'organism' and array_key_exists('type_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +//     $field_name = 'taxarank__infraspecific_taxon';
 | 
	
		
			
				|  |  | +//     $field_type = 'taxarank__infraspecific_taxon';
 | 
	
		
			
				|  |  | +//     $info[$field_name] = array(
 | 
	
		
			
				|  |  | +//       'field_name' => $field_name,
 | 
	
		
			
				|  |  | +//       'type' => $field_type,
 | 
	
		
			
				|  |  | +//       'cardinality' => 1,
 | 
	
		
			
				|  |  | +//       'locked' => TRUE,
 | 
	
		
			
				|  |  | +//       'storage' => array(
 | 
	
		
			
				|  |  | +//         'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +//       ),
 | 
	
		
			
				|  |  | +//       'settings' => array(
 | 
	
		
			
				|  |  | +//       ),
 | 
	
		
			
				|  |  | +//     );
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param unknown $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_fields_linker(&$info, $details, $entity_type, $bundle) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // CONTACTS
 | 
	
		
			
				|  |  | +  $contact_table = $table_name . '_contact';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($contact_table)) {
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($contact_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $field_name = $table_name . '_contact';
 | 
	
		
			
				|  |  | +    $field_type = 'chado_linker__contact';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => 1,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // DBXREF
 | 
	
		
			
				|  |  | +  $dbxref_table = $table_name . '_dbxref';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($dbxref_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__database_cross_reference';
 | 
	
		
			
				|  |  | +    $field_type = 'sbo__database_cross_reference';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' =>  $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // EXPRESSION
 | 
	
		
			
				|  |  | +  $expression_table = $table_name . '_expression';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($expression_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'go__gene_expression';
 | 
	
		
			
				|  |  | +    $field_type = 'go__gene_expression';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURELOC
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_coordinates';
 | 
	
		
			
				|  |  | +    $field_type = 'data__sequence_coordinates';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATUREPOS
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'ogi__location_on_map';
 | 
	
		
			
				|  |  | +    $field_type = 'ogi__location_on_map';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // GENOTYPE
 | 
	
		
			
				|  |  | +  $genotype_table = $table_name . '_genotype';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($genotype_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'so__genotype';
 | 
	
		
			
				|  |  | +    $field_type = 'so__genotype';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PHENOTYPE
 | 
	
		
			
				|  |  | +  $phenotype_table = $table_name . '_phenotype';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($phenotype_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__phenotype';
 | 
	
		
			
				|  |  | +    $field_type = 'sbo__phenotype';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PROPERTIES
 | 
	
		
			
				|  |  | +  $prop_table = $table_name . 'prop';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($prop_table)) {
 | 
	
		
			
				|  |  | +    // Get the list of existing property types for this table.
 | 
	
		
			
				|  |  | +    $sql = 'SELECT DISTINCT type_id FROM {' . $prop_table . '}';
 | 
	
		
			
				|  |  | +    $props = chado_query($sql);
 | 
	
		
			
				|  |  | +    while ($prop = $props->fetchObject()) {
 | 
	
		
			
				|  |  | +      $term = chado_generate_var('cvterm', array('cvterm_id' => $prop->type_id));
 | 
	
		
			
				|  |  | +      $field_name = strtolower(preg_replace('/[^\w]/','_', $term->dbxref_id->db_id->name . '__' . $term->name));
 | 
	
		
			
				|  |  | +      $field_type = 'chado_linker__prop';
 | 
	
		
			
				|  |  | +      $info[$field_name] = array(
 | 
	
		
			
				|  |  | +        'field_name' => $field_name,
 | 
	
		
			
				|  |  | +        'type' => $field_type,
 | 
	
		
			
				|  |  | +        'cardinality' => 1,
 | 
	
		
			
				|  |  | +        'locked' => FALSE,
 | 
	
		
			
				|  |  | +        'storage' => array(
 | 
	
		
			
				|  |  | +          'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PUBLICATIONS
 | 
	
		
			
				|  |  | +  $pub_table = $table_name . '_pub';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($pub_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'schema__publication';
 | 
	
		
			
				|  |  | +    $field_type = 'schema__publication';
 | 
	
		
			
				|  |  | +    $info[$field_name] =  array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // RELATIONSHIPS
 | 
	
		
			
				|  |  | +  // If the linker table does not exists then we don't want to add attach.
 | 
	
		
			
				|  |  | +  $rel_table = $table_name . '_relationship';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($rel_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__relationship';
 | 
	
		
			
				|  |  | +    $field_type = 'sbo__relationship';
 | 
	
		
			
				|  |  | +    $info[$field_name] =  array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // SYNONYMS
 | 
	
		
			
				|  |  | +  $syn_table = $table_name . '_synonym';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($syn_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'schema__alternate_name';
 | 
	
		
			
				|  |  | +    $field_type = 'schema__alternate_name';
 | 
	
		
			
				|  |  | +    $info[$field_name] =  array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'type' => $field_type,
 | 
	
		
			
				|  |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +      'locked' => TRUE,
 | 
	
		
			
				|  |  | +      'storage' => array(
 | 
	
		
			
				|  |  | +        'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Impelments hook_create_tripalfield_instance().
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * This is a Tripal defined hook that supports integration with the
 | 
	
		
			
				|  |  | + * TripalEntity field.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_instances($entity_type, $bundle, $chado_bundle) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $details = array(
 | 
	
		
			
				|  |  | +    'chado_cvterm_id' => $chado_bundle['type_id'],
 | 
	
		
			
				|  |  | +    'chado_table' => $chado_bundle['data_table'],
 | 
	
		
			
				|  |  | +    'chado_type_table' => $chado_bundle['type_linker_table'],
 | 
	
		
			
				|  |  | +    'chado_type_column' => $chado_bundle['type_column'],
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_instances_base($info, $entity_type, $bundle, $details);
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_instances_custom($info, $entity_type, $bundle, $details);
 | 
	
		
			
				|  |  | +  tripal_chado_bundle_create_instances_linker($info, $entity_type, $bundle, $details);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  foreach ($info as $field_name => $details) {
 | 
	
		
			
				|  |  | +    // If the field is already attached to this bundle then skip it.
 | 
	
		
			
				|  |  | +    $field = field_info_field($details['field_name']);
 | 
	
		
			
				|  |  | +    if ($field and array_key_exists('bundles', $field) and
 | 
	
		
			
				|  |  | +        array_key_exists('TripalEntity', $field['bundles']) and
 | 
	
		
			
				|  |  | +        in_array($bundle->name, $field['bundles']['TripalEntity'])) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    // Create the field instance.
 | 
	
		
			
				|  |  | +    $instance = field_create_instance($details);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Helper function for the hook_create_tripalfield_instance().
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Add the field instances that corresond to the columns of the base table.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param $entity_type
 | 
	
		
			
				|  |  | + * @param $bundle
 | 
	
		
			
				|  |  | + * @param $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_instances_base(&$info, $entity_type, $bundle, $details) {
 | 
	
		
			
				|  |  | +  $fields = array();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Get Chado information
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Iterate through the columns of the table and see if fields have been
 | 
	
		
			
				|  |  | +  // created for each one. If not, then create them.
 | 
	
		
			
				|  |  | +  $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +  if (!$schema) {
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $columns = $schema['fields'];
 | 
	
		
			
				|  |  | +  foreach ($columns as $column_name => $details) {
 | 
	
		
			
				|  |  | +    // Don't create base fields for the primary key and the type_id field.
 | 
	
		
			
				|  |  | +    if ($column_name == $pkey or $column_name == $type_field) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $cvterm = tripal_get_chado_semweb_term($table_name, $column_name, array('return_object' => TRUE));
 | 
	
		
			
				|  |  | +    if (!$cvterm) {
 | 
	
		
			
				|  |  | +      // We already provided an error when creating the base field.  So
 | 
	
		
			
				|  |  | +      // don't create another one here.
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $field_name = strtolower($cvterm->dbxref_id->db_id->name . '__' . preg_replace('/ /', '_', $cvterm->name));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Skip the primary key field.
 | 
	
		
			
				|  |  | +    if ($column_name == $schema['primary key'][0]) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Skip the type field.
 | 
	
		
			
				|  |  | +    if ($table_name == $type_table and $column_name == $type_field) {
 | 
	
		
			
				|  |  | +      continue;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $base_info =  array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => 'TripalEntity',
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => ucwords(preg_replace('/_/', ' ', $column_name)),
 | 
	
		
			
				|  |  | +      'description' => '',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        'term_vocabulary' => $cvterm->dbxref_id->db_id->name,
 | 
	
		
			
				|  |  | +        'term_name' => $cvterm->name,
 | 
	
		
			
				|  |  | +        'term_accession' => $cvterm->dbxref_id->accession,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => $column_name,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Determine if the field is required.
 | 
	
		
			
				|  |  | +    if (array_key_exists('not null', $details) and $details['not null'] === TRUE) {
 | 
	
		
			
				|  |  | +      $base_info['required'] = TRUE;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Alter the field info array depending on the column details.
 | 
	
		
			
				|  |  | +    switch($details['type']) {
 | 
	
		
			
				|  |  | +      case 'char':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'text_textfield';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'varchar':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'text_textfield';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'text':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'text_textarea';
 | 
	
		
			
				|  |  | +        $base_info['widget']['settings']['format'] = filter_default_format();
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'blob':
 | 
	
		
			
				|  |  | +        // not sure how to support a blob field.
 | 
	
		
			
				|  |  | +        continue;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'int':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'number';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'float':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'number';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'numeric':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'number';
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'serial':
 | 
	
		
			
				|  |  | +        // Serial fields are most likely not needed as a field.
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'boolean':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'options_onoff';
 | 
	
		
			
				|  |  | +        $base_info['required'] = FALSE;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 'datetime':
 | 
	
		
			
				|  |  | +        $base_info['widget']['type'] = 'date_select';
 | 
	
		
			
				|  |  | +        $base_info['widget']['settings']['increment'] = 1;
 | 
	
		
			
				|  |  | +        $base_info['widget']['settings']['tz_handling'] = 'none';
 | 
	
		
			
				|  |  | +        $base_info['widget']['settings']['collapsible'] = TRUE;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // TODO: Add settings so that the minutes increment by 1.
 | 
	
		
			
				|  |  | +        // And turn off the timezone, as the Chado field doesn't support it.
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Set some default semantic web information
 | 
	
		
			
				|  |  | +    if ($column_name == 'uniquename') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Identifier';
 | 
	
		
			
				|  |  | +      $base_info['widget_type'] = 'text_textfield';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($base_info['label'] == 'Timeaccessioned') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Time Accessioned';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'Please enter the time that this record was first added to the database.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($base_info['label'] == 'Timelastmodified') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Time Last Modified';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'Please enter the time that this record was last modified. The default is the current time.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // ORGANISM TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'organism' and $column_name == 'comment') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Description';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // PUB TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'pub' and $column_name == 'uniquename') {
 | 
	
		
			
				|  |  | +      $base_info['widget_type'] = 'text_textfield';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // ANALYSIS TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'program') {
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'The program name (e.g. blastx, blastp, sim4, genscan. If the analysis was not derived from a software package then provide a very brief description of the pipeline, workflow or method.';
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Program, Pipeline, Workflow or Method Name.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'sourceuri') {
 | 
	
		
			
				|  |  | +      $base_info['widget_type'] = 'text_textfield';
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Source URL';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'The URL where the original source data was derived.  Ideally, this should link to the page where more information about the source data can be found.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'sourcename') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Source Name';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'The name of the source data. This could be a file name, data set or a small description for how the data was collected. For long descriptions use the larger description field.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'sourceversion') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Source Version';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'If hte source data set has a version include it here.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'algorithm') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Source Version';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'The name of the algorithm used to produce the dataset if different from the program.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'analysis' and $column_name == 'programversion') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Program Version';
 | 
	
		
			
				|  |  | +      $base_info['description'] = 'The version of the program used to perform this analysis. (e.g. TBLASTX 2.0MP-WashU [09-Nov-2000]. Enter "n/a" if no version is available or applicable.';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    // PROJECT TABLE
 | 
	
		
			
				|  |  | +    //
 | 
	
		
			
				|  |  | +    elseif ($table_name == 'project' and $column_name == 'description') {
 | 
	
		
			
				|  |  | +      $base_info['label'] = 'Short Description';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $info[$field_name] = $base_info;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Helper function for the hook_create_tripalfield_instance().
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Adds custom fields for base fields.  These override the settings provided
 | 
	
		
			
				|  |  | + * in the tripal_chado_create_tripalfield_instance_base() function.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param $entity_type
 | 
	
		
			
				|  |  | + * @param $bundle
 | 
	
		
			
				|  |  | + * @param $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_instances_custom(&$info, $entity_type, $bundle, $details) {
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +  $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // BASE ORGANISM_ID
 | 
	
		
			
				|  |  | +  if ($table_name != 'organism' and array_key_exists('organism_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +    $field_name = 'obi__organism';
 | 
	
		
			
				|  |  | +    $is_required = FALSE;
 | 
	
		
			
				|  |  | +    if (array_key_exists('not null', $schema['fields']['organism_id']) and
 | 
	
		
			
				|  |  | +        $schema['fields']['organism_id']['not null']) {
 | 
	
		
			
				|  |  | +      $is_required = TRUE;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $info[$field_name] =  array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Organism',
 | 
	
		
			
				|  |  | +      'description' => 'Select an organism.',
 | 
	
		
			
				|  |  | +      'required' => $is_required,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'organism_id',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'obi__organism_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'obi__organism_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // BASE DBXREF
 | 
	
		
			
				|  |  | +  if (array_key_exists('dbxref_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +    $field_name = 'data__accession';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Accession',
 | 
	
		
			
				|  |  | +      'description' => 'This field specifies the unique stable accession (ID) for
 | 
	
		
			
				|  |  | +        this record. It requires that this site have a database entry.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'dbxref_id',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'data__accession_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'data__accession_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE MD5CHECKSUM
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_checksum';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Sequence Checksum',
 | 
	
		
			
				|  |  | +      'description' => 'The MD5 checksum for the sequence. The checksum here
 | 
	
		
			
				|  |  | +        will always be unique for the raw unformatted sequence. To verify that the
 | 
	
		
			
				|  |  | +        sequence has not been corrupted, download the raw sequence and use an MD5 tool
 | 
	
		
			
				|  |  | +        to calculate the value. If the value calculated is identical the one shown
 | 
	
		
			
				|  |  | +        here, then the downloaded sequence is uncorrupted.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'md5checksum',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'data__sequence_checksum_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +          'md5_fieldname' => 'feature__md5checksum',
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'data__sequence_checksum_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE RESIDUES
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Sequence',
 | 
	
		
			
				|  |  | +      'description' => 'All available sequences for this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'residues',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'data__sequence_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'data__sequence_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURE SEQLEN
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_length';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Sequence Length',
 | 
	
		
			
				|  |  | +      'description' => 'The number of residues in the raw sequence.  This length
 | 
	
		
			
				|  |  | +        is only for the assigned raw sequence and does not represent the length of any
 | 
	
		
			
				|  |  | +        sequences derived from alignments. If this value is zero but aligned sequences
 | 
	
		
			
				|  |  | +        are present then this record has no official assigned sequence.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'seqlen',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'data__sequence_length_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'data__sequence_length_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // GENE TRANSCRIPTS
 | 
	
		
			
				|  |  | +  $rel_table = $table_name . '_relationship';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($rel_table) and $bundle->label == 'gene') {
 | 
	
		
			
				|  |  | +    $field_name = 'so__transcript';
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Transcripts',
 | 
	
		
			
				|  |  | +      'description' => 'Transcripts that are part of this gene.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $rel_table,
 | 
	
		
			
				|  |  | +        'chado_column' => '',
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'so__transcript_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'so__transcript_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // ORGANISM TYPE_ID
 | 
	
		
			
				|  |  | +//   if ($table_name == 'organism' and array_key_exists('type_id', $schema['fields'])) {
 | 
	
		
			
				|  |  | +//     $field_name = 'taxarank__infraspecific_taxon';
 | 
	
		
			
				|  |  | +//     $info[$field_name] = array(
 | 
	
		
			
				|  |  | +//       'field_name' => $field_name,
 | 
	
		
			
				|  |  | +//       'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +//       'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +//       'label' => 'Infraspecific Taxon',
 | 
	
		
			
				|  |  | +//       'description' => 'The Infraspecific Taxon.',
 | 
	
		
			
				|  |  | +//       'required' => FALSE,
 | 
	
		
			
				|  |  | +//       'settings' => array(
 | 
	
		
			
				|  |  | +//         'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +//         'chado_table' => 'organism',
 | 
	
		
			
				|  |  | +//         'chado_column' => 'type_id',
 | 
	
		
			
				|  |  | +//         'base_table' => 'organism',
 | 
	
		
			
				|  |  | +//       ),
 | 
	
		
			
				|  |  | +//       'widget' => array(
 | 
	
		
			
				|  |  | +//         'type' => 'taxarank__infraspecific_taxon_widget',
 | 
	
		
			
				|  |  | +//         'settings' => array(
 | 
	
		
			
				|  |  | +//           'display_label' => 1,
 | 
	
		
			
				|  |  | +//         ),
 | 
	
		
			
				|  |  | +//       ),
 | 
	
		
			
				|  |  | +//       'display' => array(
 | 
	
		
			
				|  |  | +//         'default' => array(
 | 
	
		
			
				|  |  | +//           'label' => 'inline',
 | 
	
		
			
				|  |  | +//           'type' => 'taxarank__infraspecific_taxon_formatter',
 | 
	
		
			
				|  |  | +//           'settings' => array(),
 | 
	
		
			
				|  |  | +//         ),
 | 
	
		
			
				|  |  | +//       ),
 | 
	
		
			
				|  |  | +//     );
 | 
	
		
			
				|  |  | +//   }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param unknown $entity_type
 | 
	
		
			
				|  |  | + * @param unknown $bundle
 | 
	
		
			
				|  |  | + * @param unknown $details
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_bundle_create_instances_linker(&$info, $entity_type, $bundle, $details) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $table_name = $details['chado_table'];
 | 
	
		
			
				|  |  | +  $type_table = $details['chado_type_table'];
 | 
	
		
			
				|  |  | +  $type_field = $details['chado_type_column'];
 | 
	
		
			
				|  |  | +  $cvterm_id  = $details['chado_cvterm_id'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // CONTACTS
 | 
	
		
			
				|  |  | +  $contact_table = $table_name . '_contact';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($contact_table)) {
 | 
	
		
			
				|  |  | +    $field_name = $table_name . '_contact';
 | 
	
		
			
				|  |  | +    $info[$field_name] =     $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Contact',
 | 
	
		
			
				|  |  | +      'description' => 'Associates an indviddual or organization with this record',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $contact_table,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +        'chado_column' => 'contact_id',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'local__contact_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'local__contact_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // DBXREF
 | 
	
		
			
				|  |  | +  $dbxref_table = $table_name . '_dbxref';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($dbxref_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__database_cross_reference';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($dbxref_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] =  array(
 | 
	
		
			
				|  |  | +      'field_name' =>  $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Database Cross Reference',
 | 
	
		
			
				|  |  | +      'description' => 'The IDs where this record may be available in other external online databases.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $dbxref_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'sbo__database_cross_reference_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'sbo__database_cross_reference_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // EXPRESSION
 | 
	
		
			
				|  |  | +  $expression_table = $table_name . '_expression';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($expression_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'go__gene_expression';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($expression_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Gene expression',
 | 
	
		
			
				|  |  | +      'description' => 'Information about the expression of this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $expression_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'go__gene_expression_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'go__gene_expression_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATURELOC
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'data__sequence_coordinates';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema('featureloc');
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Sequence Coordinates',
 | 
	
		
			
				|  |  | +      'description' => 'The locations on other genomic sequences where this
 | 
	
		
			
				|  |  | +        record has been aligned.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => 'featureloc',
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => 'feature',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'data__sequence_coordinates_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'data__sequence_coordinates_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // FEATUREPOS
 | 
	
		
			
				|  |  | +  if ($table_name == 'feature') {
 | 
	
		
			
				|  |  | +    $field_name = 'ogi__location_on_map';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema('featurepos');
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Location on Map',
 | 
	
		
			
				|  |  | +      'description' => 'The positions on a genetic map.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => 'featurepos',
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => 'feature',
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'ogi__location_on_map_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'ogi__location_on_map_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // GENOTYPE
 | 
	
		
			
				|  |  | +  $genotype_table = $table_name . '_genotype';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($genotype_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'so__genotype';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($genotype_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Genotype',
 | 
	
		
			
				|  |  | +      'description' => 'The genotypes associated with this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $genotype_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'so__genotype_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'so__genotype_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PHENOTYPE
 | 
	
		
			
				|  |  | +  $phenotype_table = $table_name . '_phenotype';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($phenotype_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__phenotype';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($phenotype_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Phenotype',
 | 
	
		
			
				|  |  | +      'description' => 'The phenotypes associated with this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $phenotype_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'sbo__phenotype_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'sbo__phenotype_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PROPERTIES
 | 
	
		
			
				|  |  | +  $prop_table = $table_name . 'prop';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($prop_table)) {
 | 
	
		
			
				|  |  | +     // Get the list of existing property types for this table.
 | 
	
		
			
				|  |  | +     $sql = 'SELECT DISTINCT type_id FROM {' . $prop_table . '}';
 | 
	
		
			
				|  |  | +     $props = chado_query($sql);
 | 
	
		
			
				|  |  | +     $schema = chado_get_schema($prop_table);
 | 
	
		
			
				|  |  | +     $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +     while ($prop = $props->fetchObject()) {
 | 
	
		
			
				|  |  | +       $term = chado_generate_var('cvterm', array('cvterm_id' => $prop->type_id));
 | 
	
		
			
				|  |  | +       $field_name = strtolower(preg_replace('/[^\w]/','_', $term->dbxref_id->db_id->name . '__' . $term->name));
 | 
	
		
			
				|  |  | +       $info[$field_name] = array(
 | 
	
		
			
				|  |  | +         'field_name' => $field_name,
 | 
	
		
			
				|  |  | +         'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +         'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +         'label' => ucwords(preg_replace('/_/', ' ', $term->name)),
 | 
	
		
			
				|  |  | +         'description' => $term->definition,
 | 
	
		
			
				|  |  | +         'required' => FALSE,
 | 
	
		
			
				|  |  | +         'settings' => array(
 | 
	
		
			
				|  |  | +           'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +           'term_vocabulary' => $term->dbxref_id->db_id->name,
 | 
	
		
			
				|  |  | +           'term_accession' => $term->dbxref_id->accession,
 | 
	
		
			
				|  |  | +           'term_name' => $term->name,
 | 
	
		
			
				|  |  | +           'base_table' => $table_name,
 | 
	
		
			
				|  |  | +           'chado_table' => $prop_table,
 | 
	
		
			
				|  |  | +           'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +         ),
 | 
	
		
			
				|  |  | +         'widget' => array(
 | 
	
		
			
				|  |  | +           'type' => 'chado_linker__prop_widget',
 | 
	
		
			
				|  |  | +           'settings' => array(
 | 
	
		
			
				|  |  | +             'display_label' => 1,
 | 
	
		
			
				|  |  | +           ),
 | 
	
		
			
				|  |  | +         ),
 | 
	
		
			
				|  |  | +         'display' => array(
 | 
	
		
			
				|  |  | +           'default' => array(
 | 
	
		
			
				|  |  | +             'label' => 'inline',
 | 
	
		
			
				|  |  | +             'type' => 'chado_linker__prop_formatter',
 | 
	
		
			
				|  |  | +             'settings' => array(),
 | 
	
		
			
				|  |  | +           ),
 | 
	
		
			
				|  |  | +         ),
 | 
	
		
			
				|  |  | +       );
 | 
	
		
			
				|  |  | +     }
 | 
	
		
			
				|  |  | +   }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // PUBLICATIONS
 | 
	
		
			
				|  |  | +  $pub_table = $table_name . '_pub';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($pub_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'schema__publication';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($pub_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Publication',
 | 
	
		
			
				|  |  | +      'description' => 'This record has been referenced or is sourced from these publications.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $pub_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'schema__publication_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'schema__publication_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // RELATIONSHIPS
 | 
	
		
			
				|  |  | +  // If the linker table does not exists then we don't want to add attach.
 | 
	
		
			
				|  |  | +  $rel_table = $table_name . '_relationship';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($rel_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'sbo__relationship';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($rel_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Relationship',
 | 
	
		
			
				|  |  | +      'description' => 'Other records with relationships to this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $rel_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'sbo__relationship_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'above',
 | 
	
		
			
				|  |  | +          'type' => 'sbo__relationship_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // SYNONYMS
 | 
	
		
			
				|  |  | +  $syn_table = $table_name . '_synonym';
 | 
	
		
			
				|  |  | +  if (chado_table_exists($syn_table)) {
 | 
	
		
			
				|  |  | +    $field_name = 'schema__alternate_name';
 | 
	
		
			
				|  |  | +    $schema = chado_get_schema($syn_table);
 | 
	
		
			
				|  |  | +    $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +    $info[$field_name] = array(
 | 
	
		
			
				|  |  | +      'field_name' => $field_name,
 | 
	
		
			
				|  |  | +      'entity_type' => $entity_type,
 | 
	
		
			
				|  |  | +      'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +      'label' => 'Synonyms',
 | 
	
		
			
				|  |  | +      'description' => 'Alternate names, aliases or synonyms for this record.',
 | 
	
		
			
				|  |  | +      'required' => FALSE,
 | 
	
		
			
				|  |  | +      'settings' => array(
 | 
	
		
			
				|  |  | +        'auto_attach' => FALSE,
 | 
	
		
			
				|  |  | +        'chado_table' => $syn_table,
 | 
	
		
			
				|  |  | +        'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        'base_table' => $table_name,
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'widget' => array(
 | 
	
		
			
				|  |  | +        'type' => 'schema__alternate_name_widget',
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'display_label' => 1,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +      'display' => array(
 | 
	
		
			
				|  |  | +        'default' => array(
 | 
	
		
			
				|  |  | +          'label' => 'inline',
 | 
	
		
			
				|  |  | +          'type' => 'schema__alternate_name_formatter',
 | 
	
		
			
				|  |  | +          'settings' => array(),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Implements hook_form_FORM_ID_alter().
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * The field_ui_field_overview_form is used for ordering and configuring the
 | 
	
		
			
				|  |  | + * fields attached to an entity.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * This function removes the property adder field as that is really not meant
 | 
	
		
			
				|  |  | + * for users to show or manage.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_form_field_ui_field_overview_form_alter(&$form, &$form_state, $form_id) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Remove the kvproperty_addr field as it isn't ever displayed. It's just used
 | 
	
		
			
				|  |  | +  // on the add/edit form of an entity for adding new property fields.
 | 
	
		
			
				|  |  | +  $fields_names = element_children($form['fields']);
 | 
	
		
			
				|  |  | +  foreach ($fields_names as $field_name) {
 | 
	
		
			
				|  |  | +    $field_info = field_info_field($field_name);
 | 
	
		
			
				|  |  | +    if ($field_info['type'] == 'kvproperty_adder') {
 | 
	
		
			
				|  |  | +      unset($form['fields'][$field_name]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if ($field_info['type'] == 'cvterm_class_adder') {
 | 
	
		
			
				|  |  | +      unset($form['fields'][$field_name]);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Implements hook_form_field_ui_field_overview_add_new().
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_form_field_ui_field_overview_add_new($new_field, $bundle) {
 | 
	
		
			
				|  |  | +  // Get the table this bundle is mapped to.
 | 
	
		
			
				|  |  | +  $term = tripal_load_term_entity(array('term_id' => $bundle->term_id));
 | 
	
		
			
				|  |  | +  $vocab = $term->vocab;
 | 
	
		
			
				|  |  | +  $params = array(
 | 
	
		
			
				|  |  | +    'vocabulary' => $vocab->vocabulary,
 | 
	
		
			
				|  |  | +    'accession' => $term->accession,
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $mapped_table = chado_get_cvterm_mapping($params);
 | 
	
		
			
				|  |  | +  $chado_table = $mapped_table->chado_table;
 | 
	
		
			
				|  |  | +  $chado_type_table = $mapped_table->chado_table;
 | 
	
		
			
				|  |  | +  $chado_type_column = $mapped_table->chado_field;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // We allow site admins to add new chado_linker__prop fields to an entity.
 | 
	
		
			
				|  |  | +  // This function will allow us to properly add them.  But at this point we
 | 
	
		
			
				|  |  | +  // don't know the controlled vocabulary term.  We'll have to use the
 | 
	
		
			
				|  |  | +  // defaults and let the user set it using the interface.
 | 
	
		
			
				|  |  | +  if ($new_field['type'] == 'chado_linker__prop') {
 | 
	
		
			
				|  |  | +    $table_name = $chado_table . 'prop';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (chado_table_exists($table_name)) {
 | 
	
		
			
				|  |  | +      $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +      $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +      $field_name = $new_field['field_name'];
 | 
	
		
			
				|  |  | +      $field_type = 'chado_linker__prop';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // First add the field.
 | 
	
		
			
				|  |  | +      field_create_field(array(
 | 
	
		
			
				|  |  | +        'field_name' => $field_name,
 | 
	
		
			
				|  |  | +        'type' => $field_type,
 | 
	
		
			
				|  |  | +        'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +        'locked' => FALSE,
 | 
	
		
			
				|  |  | +        'storage' => array(
 | 
	
		
			
				|  |  | +          'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'base_table' => $chado_table,
 | 
	
		
			
				|  |  | +          'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +          'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Now add the instance
 | 
	
		
			
				|  |  | +      field_create_instance(array(
 | 
	
		
			
				|  |  | +        'field_name' => $field_name,
 | 
	
		
			
				|  |  | +        'entity_type' => 'TripalEntity',
 | 
	
		
			
				|  |  | +        'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +        'label' => $new_field['label'],
 | 
	
		
			
				|  |  | +        'description' => '',
 | 
	
		
			
				|  |  | +        'required' => FALSE,
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'widget' => array(
 | 
	
		
			
				|  |  | +          'type' => 'chado_linker__prop_widget',
 | 
	
		
			
				|  |  | +          'settings' => array(
 | 
	
		
			
				|  |  | +            'display_label' => 1,
 | 
	
		
			
				|  |  | +          ),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'display' => array(
 | 
	
		
			
				|  |  | +          'default' => array(
 | 
	
		
			
				|  |  | +            'label' => 'inline',
 | 
	
		
			
				|  |  | +            'type' => 'chado_linker__prop_formatter',
 | 
	
		
			
				|  |  | +            'settings' => array(),
 | 
	
		
			
				|  |  | +          ),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  | +      drupal_set_message('Cannot add a property field to this entity. Chado does not support properties for this data type.', 'error');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // We allow site admins to add new chado_linker__cvterm fields to an entity.
 | 
	
		
			
				|  |  | +  // This function will allow us to properly add them.  But at this point we
 | 
	
		
			
				|  |  | +  // don't know the controlled vocabulary term.  We'll have to use the
 | 
	
		
			
				|  |  | +  // defaults and let the user set it using the interface.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if ($new_field['type'] == 'chado_linker__cvterm') {
 | 
	
		
			
				|  |  | +    $table_name = $chado_table . '_cvterm';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (chado_table_exists($table_name)) {
 | 
	
		
			
				|  |  | +      $schema = chado_get_schema($table_name);
 | 
	
		
			
				|  |  | +      $pkey = $schema['primary key'][0];
 | 
	
		
			
				|  |  | +      $field_name = $new_field['field_name'];
 | 
	
		
			
				|  |  | +      $field_type = 'chado_linker__cvterm';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // First add the field.
 | 
	
		
			
				|  |  | +      field_create_field(array(
 | 
	
		
			
				|  |  | +        'field_name' => $field_name,
 | 
	
		
			
				|  |  | +        'type' => $field_type,
 | 
	
		
			
				|  |  | +        'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
	
		
			
				|  |  | +        'locked' => FALSE,
 | 
	
		
			
				|  |  | +        'storage' => array(
 | 
	
		
			
				|  |  | +          'type' => 'field_chado_storage',
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'base_table' => $chado_table,
 | 
	
		
			
				|  |  | +          'chado_table' => $table_name,
 | 
	
		
			
				|  |  | +          'chado_column' => $pkey,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      // Now add the instance
 | 
	
		
			
				|  |  | +      field_create_instance(array(
 | 
	
		
			
				|  |  | +        'field_name' => $field_name,
 | 
	
		
			
				|  |  | +        'entity_type' => 'TripalEntity',
 | 
	
		
			
				|  |  | +        'bundle' => $bundle->name,
 | 
	
		
			
				|  |  | +        'label' => $new_field['label'],
 | 
	
		
			
				|  |  | +        'description' => '',
 | 
	
		
			
				|  |  | +        'required' => FALSE,
 | 
	
		
			
				|  |  | +        'settings' => array(
 | 
	
		
			
				|  |  | +          'auto_attach' => TRUE,
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'widget' => array(
 | 
	
		
			
				|  |  | +          'type' => 'chado_linker__cvterm_widget',
 | 
	
		
			
				|  |  | +          'settings' => array(
 | 
	
		
			
				|  |  | +            'display_label' => 1,
 | 
	
		
			
				|  |  | +          ),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        'display' => array(
 | 
	
		
			
				|  |  | +          'default' => array(
 | 
	
		
			
				|  |  | +            'label' => 'above',
 | 
	
		
			
				|  |  | +            'type' => 'chado_linker__cvterm_formatter',
 | 
	
		
			
				|  |  | +            'settings' => array(),
 | 
	
		
			
				|  |  | +          ),
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +      ));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else {
 | 
	
		
			
				|  |  | +      drupal_set_message('Cannot add a property field to this entity. Chado does not support annotations for this data type.', 'error');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Allows for altering of a field's instance setting form.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * This appears to be a Drupal hook but is actually a custom function created
 | 
	
		
			
				|  |  | + * by this module. It is called by the tripal_form_alter() function of this
 | 
	
		
			
				|  |  | + * module.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Here we put additional form elements for any field, regardless if it is
 | 
	
		
			
				|  |  | + * a tripalField or not.
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param $form
 | 
	
		
			
				|  |  | + *   The form array.  Alterations to the form can be made within this array.
 | 
	
		
			
				|  |  | + * @param $form_state
 | 
	
		
			
				|  |  | + *   The form state array.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_field_instance_settings_form_alter(&$form, $form_state) {
 | 
	
		
			
				|  |  | +  global $language;
 | 
	
		
			
				|  |  | +  $field = $form['#field'];
 | 
	
		
			
				|  |  | +  $instance = $form['#instance'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Only show the Chado mapping information for field instances that map
 | 
	
		
			
				|  |  | +  // to Chado.
 | 
	
		
			
				|  |  | +  if (!array_key_exists('chado_table',$instance['settings'])) {
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Construct a table for the vocabulary information.
 | 
	
		
			
				|  |  | +  $headers = array();
 | 
	
		
			
				|  |  | +  $rows = array();
 | 
	
		
			
				|  |  | +  $rows[] = array(
 | 
	
		
			
				|  |  | +    array(
 | 
	
		
			
				|  |  | +      'data' => 'Base Table',
 | 
	
		
			
				|  |  | +      'header' => TRUE,
 | 
	
		
			
				|  |  | +      'width' => '20%',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    $instance['settings']['base_table']
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $rows[] = array(
 | 
	
		
			
				|  |  | +    array(
 | 
	
		
			
				|  |  | +      'data' => 'Record Table',
 | 
	
		
			
				|  |  | +      'header' => TRUE,
 | 
	
		
			
				|  |  | +      'width' => '20%',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    $instance['settings']['chado_table']
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $rows[] = array(
 | 
	
		
			
				|  |  | +    array(
 | 
	
		
			
				|  |  | +      'data' => 'ID Column',
 | 
	
		
			
				|  |  | +      'header' => TRUE,
 | 
	
		
			
				|  |  | +      'width' => '20%',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    $instance['settings']['chado_column']
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $table = array(
 | 
	
		
			
				|  |  | +    'header' => $headers,
 | 
	
		
			
				|  |  | +    'rows' => $rows,
 | 
	
		
			
				|  |  | +    'attributes' => array(
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    'sticky' => FALSE,
 | 
	
		
			
				|  |  | +    'caption' => '',
 | 
	
		
			
				|  |  | +    'colgroups' => array(),
 | 
	
		
			
				|  |  | +    'empty' => '',
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $form['chado_mapping'] = array(
 | 
	
		
			
				|  |  | +    '#type' => 'fieldset',
 | 
	
		
			
				|  |  | +    '#title' => 'Chado Mapping',
 | 
	
		
			
				|  |  | +    '#description' => t('This field maps to data in Chado to the following table:'),
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $form['chado_mapping']['details'] = array(
 | 
	
		
			
				|  |  | +    '#type' => 'item',
 | 
	
		
			
				|  |  | +    '#markup' => theme_table($table),
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +<<<<<<< HEAD
 | 
	
		
			
				|  |  | +=======
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Implements hook_form_FROM_ID_alter()
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_chado_form_tripalbundle_form_alter(&$form, $form_state) {
 | 
	
		
			
				|  |  | +  global $language;
 | 
	
		
			
				|  |  | +  $bundle = $form['#bundle'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $term = entity_load('TripalTerm', array('id' => $bundle->term_id));
 | 
	
		
			
				|  |  | +  $term = reset($term);
 | 
	
		
			
				|  |  | +  $vocab = $term->vocab;
 | 
	
		
			
				|  |  | +  $params = array(
 | 
	
		
			
				|  |  | +    'vocabulary' => $vocab->vocabulary,
 | 
	
		
			
				|  |  | +    'accession' => $term->accession,
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $mapped_table = chado_get_cvterm_mapping($params);
 | 
	
		
			
				|  |  | +  $chado_table = $mapped_table->chado_table;
 | 
	
		
			
				|  |  | +  $chado_column = $mapped_table->chado_field;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Construct a table for the vocabulary information.
 | 
	
		
			
				|  |  | +  $headers = array();
 | 
	
		
			
				|  |  | +  $rows = array();
 | 
	
		
			
				|  |  | +  $rows[] = array(
 | 
	
		
			
				|  |  | +    array(
 | 
	
		
			
				|  |  | +      'data' => 'Chado Table',
 | 
	
		
			
				|  |  | +      'header' => TRUE,
 | 
	
		
			
				|  |  | +      'width' => '20%',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    $chado_table
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $rows[] = array(
 | 
	
		
			
				|  |  | +    array(
 | 
	
		
			
				|  |  | +      'data' => 'Type Column',
 | 
	
		
			
				|  |  | +      'header' => TRUE,
 | 
	
		
			
				|  |  | +      'width' => '20%',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    $chado_column
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +  $table = array(
 | 
	
		
			
				|  |  | +    'header' => $headers,
 | 
	
		
			
				|  |  | +    'rows' => $rows,
 | 
	
		
			
				|  |  | +    'attributes' => array(
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +    'sticky' => FALSE,
 | 
	
		
			
				|  |  | +    'caption' => '',
 | 
	
		
			
				|  |  | +    'colgroups' => array(),
 | 
	
		
			
				|  |  | +    'empty' => '',
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $form['chado_mapping'] = array(
 | 
	
		
			
				|  |  | +    '#type' => 'item',
 | 
	
		
			
				|  |  | +    '#title' => 'Chado Mapping',
 | 
	
		
			
				|  |  | +    '#markup' => theme_table($table),
 | 
	
		
			
				|  |  | +    '#description' => t('This content type maps to the table in Chado
 | 
	
		
			
				|  |  | +        listed above.  Chado allows multiple data types to be housed
 | 
	
		
			
				|  |  | +        in a single table. Therefore, the column that is used to
 | 
	
		
			
				|  |  | +        differentiate between data types is also listed above.'),
 | 
	
		
			
				|  |  | +    '#weight' => 0,
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +>>>>>>> a584591704c14877292a457afa4b1e793853f9f6
 |