|  | @@ -586,7 +586,7 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |            continue;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if ($stanza === TRUE && (substr($line, 0, 3) === "id:")) {
 | 
	
		
			
				|  |  | -          $parts = explode(':', $line);
 | 
	
		
			
				|  |  | +          $parts = explode(':', $line, 2);
 | 
	
		
			
				|  |  |            $short_name = strtolower($parts[1]);
 | 
	
		
			
				|  |  |            $short_name = preg_replace('/\s+/', '', $short_name);
 | 
	
		
			
				|  |  |            break;
 | 
	
	
		
			
				|  | @@ -608,6 +608,8 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |          else {
 | 
	
		
			
				|  |  |            $results = $short_name;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        print_r('$results');
 | 
	
		
			
				|  |  | +        print_r($results);
 | 
	
		
			
				|  |  |          $defaultcv = tripal_insert_cv(strtoupper($results), '');
 | 
	
		
			
				|  |  |          $this->newcvs[$defaultcv->name] = $defaultcv->cv_id;
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -632,7 +634,9 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |      if (!$this->processTerms($defaultcv, $default_db)) {
 | 
	
		
			
				|  |  |        throw new Exception('Cannot add terms from this ontology');
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    // Empty the temp table.
 | 
	
		
			
				|  |  | +    $sql = "DELETE FROM {tripal_obo_temp}";
 | 
	
		
			
				|  |  | +    chado_query($sql);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /**
 | 
	
	
		
			
				|  | @@ -776,7 +780,7 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |      // Check the id isn't a reference to another term.
 | 
	
		
			
				|  |  |      //TODO: Check chado for the accession, so we can avoid lookups where possible.
 | 
	
		
			
				|  |  |      if (strpos($t['id'], ':')) {
 | 
	
		
			
				|  |  | -      $pair = explode(":", $t['id']);
 | 
	
		
			
				|  |  | +      $pair = explode(":", $t['id'], 2);
 | 
	
		
			
				|  |  |        $ontology_id = $pair[0];
 | 
	
		
			
				|  |  |        $accession_num = $pair[1];
 | 
	
		
			
				|  |  |        if (is_numeric($accession_num) && ($ontology_id != $default_db)) {
 | 
	
	
		
			
				|  | @@ -1072,56 +1076,95 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |        elseif (strpos($objname, ':')) {
 | 
	
		
			
				|  |  |          $term_id = $objname;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        $reference_term = TRUE;
 | 
	
		
			
				|  |  | -      $pair = explode(":", $term_id);    
 | 
	
		
			
				|  |  | +      $pair = explode(":", $term_id, 2);
 | 
	
		
			
				|  |  |        $ontology_id = $pair[0];
 | 
	
		
			
				|  |  |        $accession_num = $pair[1];
 | 
	
		
			
				|  |  |        $rel_name = '';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (is_numeric($accession_num)) {
 | 
	
		
			
				|  |  | -        $results = $this->oboEbiLookup($term_id, 'term');
 | 
	
		
			
				|  |  | -        if (isset($results['label'])) {
 | 
	
		
			
				|  |  | -          $rel_name = $results['label'];
 | 
	
		
			
				|  |  | -          $oterm = $results;
 | 
	
		
			
				|  |  | -        } 
 | 
	
		
			
				|  |  | -        if (empty($rel_name)) {
 | 
	
		
			
				|  |  | -          $results = $this->oboEbiLookup($term_id, 'query');
 | 
	
		
			
				|  |  | -          if (array_key_exists('docs', $results['response'])){
 | 
	
		
			
				|  |  | -            if(!empty($results['response']['docs'])) {
 | 
	
		
			
				|  |  | -              if (count($results['response']['docs']) > 1) {
 | 
	
		
			
				|  |  | -                foreach ($results['response']['docs'] as $doc) {
 | 
	
		
			
				|  |  | -                  if ($doc['obo_id'] == $term_id) {
 | 
	
		
			
				|  |  | -                    $rel_name = $doc['label'];
 | 
	
		
			
				|  |  | -                    $oterm = $doc;
 | 
	
		
			
				|  |  | +        // Before running the oboEbiLookup check for it in the local chado and
 | 
	
		
			
				|  |  | +        // the tripal_obo_temp table.
 | 
	
		
			
				|  |  | +        // $term_with_quotes = '"' . $term_id . '"';
 | 
	
		
			
				|  |  | +        $sql = " 
 | 
	
		
			
				|  |  | +          SELECT * 
 | 
	
		
			
				|  |  | +          FROM {tripal_obo_temp} tot
 | 
	
		
			
				|  |  | +          WHERE tot.id = :term_id 
 | 
	
		
			
				|  |  | +          ";
 | 
	
		
			
				|  |  | +        $result = chado_query($sql, array(':term_id' => $term_id . '_lookup'))->fetchObject();
 | 
	
		
			
				|  |  | +        $oterm = unserialize(base64_decode($result->stanza));
 | 
	
		
			
				|  |  | +        if (empty($oterm['label'])){
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          // Is this ontology is in the local chado?
 | 
	
		
			
				|  |  | +          $sql = "SELECT * FROM {db} db WHERE db.name = :ontology_id ";
 | 
	
		
			
				|  |  | +          $db = chado_query($sql, array(':ontology_id' => $ontology_id, ))->fetchObject();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          if (!empty($db)){
 | 
	
		
			
				|  |  | +            // Find the accession.
 | 
	
		
			
				|  |  | +            $sql = "
 | 
	
		
			
				|  |  | +              SELECT * 
 | 
	
		
			
				|  |  | +              FROM {dbxref} dbx 
 | 
	
		
			
				|  |  | +              WHERE dbx.db_id = :db_id 
 | 
	
		
			
				|  |  | +              AND accession = :accession_num ";
 | 
	
		
			
				|  |  | +            $v = chado_query($sql, array(':db_id' => $db->db_id, ':accession_num' => $accession_num))->fetchObject();
 | 
	
		
			
				|  |  | +            if (!empty($dbxref)) {
 | 
	
		
			
				|  |  | +              $sql = "SELECT * FROM {cvterm} WHERE dbxref_id = $dbxref->dbxref_id ";
 | 
	
		
			
				|  |  | +              $oterm = chado_query($sql)->fetchObject();
 | 
	
		
			
				|  |  | +              $rel_name = $oterm->name;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          
 | 
	
		
			
				|  |  | +          if (empty($dbxref)){
 | 
	
		
			
				|  |  | +            $results = $this->oboEbiLookup($term_id, 'term');
 | 
	
		
			
				|  |  | +            if (isset($results['label'])) {
 | 
	
		
			
				|  |  | +              $rel_name = $results['label'];
 | 
	
		
			
				|  |  | +              $oterm = $results;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (empty($rel_name)) {
 | 
	
		
			
				|  |  | +              $results = $this->oboEbiLookup($term_id, 'query');
 | 
	
		
			
				|  |  | +              if (array_key_exists('docs', $results['response'])) {
 | 
	
		
			
				|  |  | +                if (!empty($results['response']['docs'])) {
 | 
	
		
			
				|  |  | +                  if (count($results['response']['docs']) > 1) {
 | 
	
		
			
				|  |  | +                    foreach ($results['response']['docs'] as $doc) {
 | 
	
		
			
				|  |  | +                      if ($doc['obo_id'] == $term_id) {
 | 
	
		
			
				|  |  | +                        $rel_name = $doc['label'];
 | 
	
		
			
				|  |  | +                        $oterm = $doc;
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  } else {
 | 
	
		
			
				|  |  | +                    $rel_name = $results['response']['docs'][0]['label'];
 | 
	
		
			
				|  |  | +                    $oterm = $results['response']['docs'][0];
 | 
	
		
			
				|  |  |                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -              } 
 | 
	
		
			
				|  |  | -              else {
 | 
	
		
			
				|  |  | -                $rel_name = $results['response']['docs'][0]['label'];
 | 
	
		
			
				|  |  | -                $oterm = $results['response']['docs'][0];
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        } 
 | 
	
		
			
				|  |  | -        if (empty($rel_name)) {
 | 
	
		
			
				|  |  | +            if (empty($rel_name)) {
 | 
	
		
			
				|  |  |            // The first search doesn't work, so let's try a broader one.
 | 
	
		
			
				|  |  | -          $results = $this->oboEbiLookup($term_id, 'query-non-local');
 | 
	
		
			
				|  |  | -          if (!empty($results)) {
 | 
	
		
			
				|  |  | -            if (array_key_exists('docs', $results['response'])) {
 | 
	
		
			
				|  |  | -              if (!empty($results['response']['docs'])) {
 | 
	
		
			
				|  |  | -                foreach ($results['response']['docs'] as $item) {
 | 
	
		
			
				|  |  | -                  if ($item['obo_id'] == $term_id) {
 | 
	
		
			
				|  |  | +              $results = $this->oboEbiLookup($term_id, 'query-non-local');
 | 
	
		
			
				|  |  | +              if (!empty($results)) {
 | 
	
		
			
				|  |  | +                if (array_key_exists('docs', $results['response'])) {
 | 
	
		
			
				|  |  | +                  if (!empty($results['response']['docs'])) {
 | 
	
		
			
				|  |  | +                    foreach ($results['response']['docs'] as $item) {
 | 
	
		
			
				|  |  | +                      if ($item['obo_id'] == $term_id) {
 | 
	
		
			
				|  |  |                      //Found the first place a label is other than the accession is used, so take
 | 
	
		
			
				|  |  |                      // that info and then end the loop.
 | 
	
		
			
				|  |  | -                    $rel_name = $item['label'];
 | 
	
		
			
				|  |  | -                    $oterm = $item;
 | 
	
		
			
				|  |  | -                    break;
 | 
	
		
			
				|  |  | +                        $rel_name = $item['label'];
 | 
	
		
			
				|  |  | +                        $oterm = $item;
 | 
	
		
			
				|  |  | +                        break;
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  |                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | +          // Write the term to the tripal_obo_temp table for future reference
 | 
	
		
			
				|  |  | +          $values = array(
 | 
	
		
			
				|  |  | +            'id' => $term_id . '_lookup',
 | 
	
		
			
				|  |  | +            'stanza' => base64_encode(serialize($oterm)),
 | 
	
		
			
				|  |  | +            'type' => 'lookup',
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          chado_insert_record('tripal_obo_temp', $values);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }    
 | 
	
	
		
			
				|  | @@ -1158,8 +1201,8 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |      // Get the object term.
 | 
	
		
			
				|  |  |      if ($reference_term === TRUE && !empty($oterm)) {
 | 
	
		
			
				|  |  |        $objterm = array();
 | 
	
		
			
				|  |  | -      $objterm['id'] = $oterm['label'];
 | 
	
		
			
				|  |  | -      $objterm['name'] = $oterm['obo_id'];
 | 
	
		
			
				|  |  | +      $objterm['id'] = $oterm['obo_id'];
 | 
	
		
			
				|  |  | +      $objterm['name'] = $oterm['label'];
 | 
	
		
			
				|  |  |        if (array_key_exists('def', $oterm)) {
 | 
	
		
			
				|  |  |          $objterm['definition'] = $oterm['def'];
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -1198,6 +1241,8 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |      $objterm['cv_name' ] = $defaultcv;
 | 
	
		
			
				|  |  |      $objterm['is_relationship'] = $object_is_relationship;
 | 
	
		
			
				|  |  |      $objterm['db_name'] = $default_db;
 | 
	
		
			
				|  |  | +    print_r('$objterm');
 | 
	
		
			
				|  |  | +    print_r($objterm);
 | 
	
		
			
				|  |  |      $objcvterm = tripal_insert_cvterm($objterm, array('update_existing' => TRUE));
 | 
	
		
			
				|  |  |      if (!$objcvterm) {
 | 
	
		
			
				|  |  |        throw new Exception("Cannot add cvterm " . $objterm['name']);
 | 
	
	
		
			
				|  | @@ -1464,6 +1509,8 @@ class OBOImporter extends TripalImporter {
 | 
	
		
			
				|  |  |     * @ingroup tripal_obo_loader
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  |    private function addCvtermDbxref($cvterm, $xref) {
 | 
	
		
			
				|  |  | +    print_r('addCvtermDbxref');
 | 
	
		
			
				|  |  | +    print_r($cvterm);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      $dbname = preg_replace('/^(.+?):.*$/', '$1', $xref);
 | 
	
		
			
				|  |  |      $accession = preg_replace('/^.+?:\s*(.*?)(\{.+$|\[.+$|\s.+$|\".+$|$)/', '$1', $xref);
 |