Browse Source

Stock: Implemented the properties api in stock nodes

Lacey Sanderson 11 years ago
parent
commit
e03dbdeb59
1 changed files with 108 additions and 1 deletions
  1. 108 1
      tripal_stock/includes/tripal_stock.chado_node.inc

+ 108 - 1
tripal_stock/includes/tripal_stock.chado_node.inc

@@ -290,6 +290,50 @@ function chado_stock_form($node, $form_state) {
     '#default_value' => $dbxref_database
   );
 
+  // PROPERTIES FORM
+  //---------------------------------------------
+  $ontology = variable_get('chado_stock_prop_types_cv', FALSE);
+  if (!$ontology) {
+    tripal_core_report_error(
+      'chado_stock',
+      TRIPAL_ERROR,
+      'Stock property type controlled vocabulary is not set. please set it in the Stock configuration form.'
+    );
+    tripal_core_report_error(
+      'chado_stock',
+      TRIPAL_ERROR,
+      'Unable to add properties form to the node form because stock property type controlled vocabulary is not set'
+    );
+  }
+  else {
+    // ontology name needed for properties api
+    $cv = tripal_core_chado_select('cv',array('name'),array('cv_id' => $ontology));
+    $ontology_name = $cv[0]->name;
+
+    // get the stockprop types for the property drop-down
+    $properties = array();
+    $properties[] = 'Select a Property';
+    $sql = "
+      SELECT DISTINCT CVT.cvterm_id, CVT.name, CVT.definition
+      FROM  {cvterm} CVT
+        INNER JOIN {cv} CV ON CVT.cv_id = CV.cv_id
+      WHERE
+        CV.name = :ontology AND
+        NOT CVT.is_obsolete = 1
+      ORDER BY CVT.name ASC
+    ";
+    $prop_types = chado_query($sql, array(':ontology' => $ontology_name));
+    while ($prop = $prop_types->fetchObject()) {
+      $properties[$prop->cvterm_id] = $prop->name;
+    }
+
+    $exclude = array();
+    $include = array();
+    $instructions = t('To add additional properties to the drop down. ' . l("Add terms to the ".$ontology_name." vocabulary", "admin/tripal/chado/tripal_cv/cvterm/add") . ".");
+    tripal_core_properties_form($form, $form_state, 'stockprop', 'stock_id', $ontology_name,
+      $properties, $stock_id, $exclude, $include, $instructions, 'Properties');
+  }
+
   return $form;
 }
 
@@ -303,7 +347,7 @@ function chado_stock_form($node, $form_state) {
  *
  * @ingroup tripal_stock
  */
-function chado_stock_validate($node, $form, &$form_state) {
+function chado_stock_validate(&$node, $form, &$form_state) {
 
   // remove surrounding whitespace
   $node->uniquename = trim($node->uniquename);
@@ -507,6 +551,35 @@ function chado_stock_insert($node) {
     else {
       $stock_added = FALSE;
     }
+
+    // Now add properties
+    if ($stock_added) {
+      $ontology = variable_get('chado_stock_prop_types_cv', FALSE);
+      $cv = tripal_core_chado_select('cv',array('name'),array('cv_id' => $ontology));
+      $ontology_name = $cv[0]->name;
+
+      $properties = tripal_core_properties_form_retreive($node, $ontology_name);
+      foreach ($properties as $property => $elements) {
+        foreach ($elements as $rank => $value) {
+          $success = tripal_core_insert_property(
+            'stock',
+            $stock_id,
+            $property,
+            $ontology_name,
+            $value
+          );
+
+          if (!$success) {
+            watchdog(
+              'tripal_stock',
+              'Stock Insert: Unable to insert property %cvterm %value.',
+              array('%cvterm' => $property, '%value' => $value),
+              WATCHDOG_ERROR
+            );
+          }
+        }
+      }
+    }
   } //end of adding stock to chado
   else {
     // stock already exists since this is a sync
@@ -650,6 +723,40 @@ function chado_stock_update($node) {
     $values = array('stock_id' => $node->stock_id);
     $stock = tripal_core_chado_select('stock', array('*'), $values);
   }
+
+  // now update the properties
+  if ($node->stock_id > 0) {
+    $stock_id = $node->stock_id;
+
+    $ontology = variable_get('chado_stock_prop_types_cv', FALSE);
+    $cv = tripal_core_chado_select('cv',array('name'),array('cv_id' => $ontology));
+    $ontology_name = $cv[0]->name;
+
+    // now add in the properties by first removing any the stock
+    // already has and adding the ones we have
+    tripal_core_chado_delete('stockprop', array('stock_id' => $stock_id));
+    $properties = tripal_core_properties_form_retreive($node, $ontology_name);
+    foreach ($properties as $property => $elements) {
+      foreach ($elements as $rank => $value) {
+        $success = tripal_core_insert_property(
+          'stock',
+          $stock_id,
+          $property,
+          $ontology_name,
+          $value
+        );
+
+        if (!$success) {
+          watchdog(
+            'tripal_stock',
+            'Stock Update: Unable to insert property %cvterm %value.',
+            array('%cvterm' => $property, '%value' => $value),
+            WATCHDOG_ERROR
+          );
+        }
+      }
+    }
+  }
 }
 
 /**