| 
					
				 | 
			
			
				@@ -0,0 +1,112 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<?php 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This function populates the Tripal entity tables using existing 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * data in the database. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function tripal_entities_populate_entity_tables() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Get the cvterm table and look for all of the tables that link to it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $schema = chado_get_schema('cvterm'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $referring = $schema['referring_tables']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // Perform this action in a transaction 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  $transaction = db_transaction(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  print "\nNOTE: Populating of tripal entity tables is performed using a database transaction. \n" . 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    "If the load fails or is terminated prematurely then the entire set of \n" . 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    "insertions/updates is rolled back and will not be found in the database\n\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // Iterate through the referring tables to see what records are there. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    foreach ($referring as $tablename) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // We only want to look at base tables. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if ($tablename == 'cvterm_dbxref' || $tablename == 'cvterm_relationship' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $tablename == 'cvtermpath' || $tablename == 'cvtermprop' || $tablename == 'chadoprop' || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $tablename == 'cvtermsynonym' || preg_match('/_relationship$/', $tablename) || 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          preg_match('/_cvterm$/', $tablename)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      print "Examining $tablename...\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $ref_schema = chado_get_schema($tablename); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      $fkeys = $ref_schema['foreign keys']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      foreach ($fkeys['cvterm']['columns'] as $local_id => $remote_id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Get the list of cvterm_ids from existing records in the table. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $sql = " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          SELECT $local_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          FROM { " . $tablename . "} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          GROUP BY $local_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        $results = chado_query($sql); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        while ($cvterm_id = $results->fetchField()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // Get the CV term details and add it to the tripal_entity_type table if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // it doesn't already exist. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $cvterm = chado_generate_var('cvterm', array('cvterm_id' => $cvterm_id)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // First add a record to the tripal_entity_type table. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $values = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'cv_id' => $cvterm->cv_id->cv_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'db_id' => $cvterm->dbxref_id->db_id->db_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'publish' => 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $entity_type_id = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $entity_type = chado_select_record('tripal_entity_type', array('entity_type_id'), $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (count($entity_type) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $entity_type = chado_insert_record('tripal_entity_type', $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $entity_type_id = $entity_type['entity_type_id']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $entity_type_id = $entity_type[0]->entity_type_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // Next add a record to the tripal_entity_bundle table. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $values = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'entity_type_id' => $entity_type_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'cvterm_id' => $cvterm_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'publish' => 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $bundle_id = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $bundle = chado_select_record('tripal_entity_bundle', array('bundle_id'), $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (count($bundle) == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $bundle = chado_insert_record('tripal_entity_bundle', $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $bundle_id = $bundle['bundle_id']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            $bundle_id = $bundle[0]->bundle_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // Add the table where the records are found. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $values = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'bundle_id' => $bundle_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data_table' => $tablename, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'type_table' => $tablename, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'field' => $local_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!chado_select_record('tripal_entity_bundle_source', array('bundle_source_id'), $values, array('has_record' => TRUE))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            chado_insert_record('tripal_entity_bundle_source', $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // Add the table where the records are found. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          $values = array( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'entity_type_id' => $entity_type_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'data_table' => $tablename, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'type_table' => $tablename, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            'field' => $local_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (!chado_select_record('tripal_entity_type_source', array('entity_type_id'), $values, array('has_record' => TRUE))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            chado_insert_record('tripal_entity_type_source', $values); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  catch (Exception $e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print "\n"; // make sure we start errors on new line 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    $transaction->rollback(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    watchdog_exception('tripal_ws', $e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    print "FAILED: Rolling back database changes...\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  print "\nDone.\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |