|  | @@ -267,10 +267,10 @@ class chado_linker__relationship extends TripalField {
 | 
	
		
			
				|  |  |        $type_id = isset($items[$delta][$field_table . '__type_id']) ? $items[$delta][$field_table . '__type_id'] : '';
 | 
	
		
			
				|  |  |        $object_id = isset($items[$delta][$field_table . '__object_id']) ? $items[$delta][$field_table . '__object_id'] : '';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      if (array_key_exists('value', $schema['fields'])) {
 | 
	
		
			
				|  |  | +      if (isset($items[$delta][$field_table . '__value'])) {
 | 
	
		
			
				|  |  |          $value = $items[$delta][$field_table . '__value'];
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      if (array_key_exists('rank', $schema['fields'])) {
 | 
	
		
			
				|  |  | +      if (isset($items[$delta][$field_table . '__rank'])) {
 | 
	
		
			
				|  |  |          $rank = $items[$delta][$field_table . '__rank'];
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -346,12 +346,22 @@ class chado_linker__relationship extends TripalField {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Set up available cvterms for selection
 | 
	
		
			
				|  |  |      $vocs = tripal_get_cv_select_options();
 | 
	
		
			
				|  |  | +    $cv_id = isset($form_state['values'][$field_name]['und'][0]['vocabulary']) ? $form_state['values'][$field_name]['und'][0]['vocabulary'] : 0;
 | 
	
		
			
				|  |  | +    // Try getting the cv_id from cvterm for existing records
 | 
	
		
			
				|  |  | +    $default_term = '';
 | 
	
		
			
				|  |  | +    if (!$cv_id && $type_id) {
 | 
	
		
			
				|  |  | +      $cvterm = tripal_get_cvterm(array('cvterm_id' => $type_id));
 | 
	
		
			
				|  |  | +      if (isset($cvterm->cv_id->cv_id)) {
 | 
	
		
			
				|  |  | +        $cv_id = $cvterm->cv_id->cv_id;
 | 
	
		
			
				|  |  | +        $default_term = $cvterm->name;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      $widget['vocabulary'] = array(
 | 
	
		
			
				|  |  |        '#type' => 'select',
 | 
	
		
			
				|  |  |        '#title' => t('Vocabulary'),
 | 
	
		
			
				|  |  |        '#options' => $vocs,
 | 
	
		
			
				|  |  |        '#required' => $element['#required'],
 | 
	
		
			
				|  |  | -      '#default_value' => $type_id,
 | 
	
		
			
				|  |  | +      '#default_value' => $cv_id,
 | 
	
		
			
				|  |  |        '#ajax' => array(
 | 
	
		
			
				|  |  |          'callback' => "chado_linker__relationship_widget_form_ajax_callback",
 | 
	
		
			
				|  |  |          'wrapper' => "$chado_table-$delta",
 | 
	
	
		
			
				|  | @@ -359,13 +369,14 @@ class chado_linker__relationship extends TripalField {
 | 
	
		
			
				|  |  |          'method' => 'replace'
 | 
	
		
			
				|  |  |        ),
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  | -    $cv_id = isset($form_state['values'][$field_name]['und'][0]['vocabulary']) ? $form_state['values'][$field_name]['und'][0]['vocabulary'] : 0;
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  |      if ($cv_id) {
 | 
	
		
			
				|  |  | -      $options = array();
 | 
	
		
			
				|  |  | +      $options = array();      
 | 
	
		
			
				|  |  |        $widget['type_name'] = array(
 | 
	
		
			
				|  |  |          '#type' => 'textfield',
 | 
	
		
			
				|  |  |          '#title' => t('Relationship Type'),
 | 
	
		
			
				|  |  |          '#size' => 15,
 | 
	
		
			
				|  |  | +        '#default_value' => $default_term,
 | 
	
		
			
				|  |  |          '#autocomplete_path' => "admin/tripal/storage/chado/auto_name/cvterm/$cv_id"
 | 
	
		
			
				|  |  |        );
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -870,7 +881,8 @@ class chado_linker__relationship extends TripalField {
 | 
	
		
			
				|  |  |      $element['relationship_types'] = array(
 | 
	
		
			
				|  |  |        '#type' => 'textarea',
 | 
	
		
			
				|  |  |        '#title' => 'Relationship Types',
 | 
	
		
			
				|  |  | -      '#description' => 'Provide terms separated by a new line',
 | 
	
		
			
				|  |  | +      '#description' => 'Provide terms separated by a new line. The term provided should be 
 | 
	
		
			
				|  |  | +        unique and distinguishable by the name.',
 | 
	
		
			
				|  |  |        '#default_value' => $instance['settings']['relationship_types'],
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -882,7 +894,24 @@ class chado_linker__relationship extends TripalField {
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  |    public static function instanceSettingsFormValidate($field, $instance, $form, &$form_state) {
 | 
	
		
			
				|  |  |      //dpm($form);dpm($form_state);
 | 
	
		
			
				|  |  | -    //form_set_error("instance][settings][relationship_types", t('blah'));
 | 
	
		
			
				|  |  | +    $value = $form_state['values']['instance']['settings']['relationship_types'];
 | 
	
		
			
				|  |  | +    $rel_types = explode(PHP_EOL, $value);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // Make sure the supplied types are valid cvterms
 | 
	
		
			
				|  |  | +    foreach($rel_types AS $type) {
 | 
	
		
			
				|  |  | +      // Ignore empty lines
 | 
	
		
			
				|  |  | +      if (trim($type) == '') {
 | 
	
		
			
				|  |  | +        continue;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $term = tripal_get_cvterm(array('name' => trim($type)));
 | 
	
		
			
				|  |  | +      // Don't save the form  if a term can not be found or it matches more than one cvterm
 | 
	
		
			
				|  |  | +      if (!isset($term->cvterm_id)) {
 | 
	
		
			
				|  |  | +        form_set_error(
 | 
	
		
			
				|  |  | +          "instance][settings][relationship_types", 
 | 
	
		
			
				|  |  | +          t("The term '@type' can not be found or matches more than one term.", array('@type' => $type))
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |