Browse Source

Working on showing remote content within the layout on this site

Stephen Ficklin 8 years ago
parent
commit
7f8cdc4938
1 changed files with 65 additions and 23 deletions
  1. 65 23
      tripal_ws/tripal_ws.module

+ 65 - 23
tripal_ws/tripal_ws.module

@@ -130,7 +130,7 @@ function tripal_ws_services() {
 function tripal_ws_entity_load($entities, $type) {
   foreach ($entities as $entity) {
     //if ($entiy->type = 'TripalEntity') {
-      dpm($entity);
+    //  dpm($entity);
     //}
   }
 }
@@ -141,7 +141,7 @@ function tripal_ws_load_remote_entity($site_id, $api_version, $ctype, $id) {
   $url = "https://dev.bioinfo.wsu.edu/~ccheng/tripal3/ws/v0.1/content/gene/12";
   $json = file_get_contents($url);
   $response = json_decode($json, TRUE);
-  dpm($response);
+  //dpm($response);
 
   // Set the title for this page to match the title provided.
   drupal_set_title($response['label']);
@@ -161,28 +161,70 @@ function tripal_ws_load_remote_entity($site_id, $api_version, $ctype, $id) {
   $entity->uid = 1;
   $entity->status = 1;
 
-  // Add fields.
-  $entity->feature__name = array(
-    'und' => array(
-      0 => array(
-        'value' => $response['name'],
-      ),
-    ),
-  );
-  $entity->feature__organism_id = array(
-    'und' => array(
-      0 => array(
-        'value' => $response['organism'],
-      ),
-    ),
-  );
-  $sequences_json = file_get_contents($response['sequence']);
-  $sequences = json_decode($sequences_json, TRUE);
-  $entity->feature__residues = array();
-  foreach ($sequences['member'] as $delta => $value) {
-    $entity->feature__residues['und'][$delta]['value'] = $sequences['member'][$delta];
+  // Get the fields and create a list of those that are attached to the bundle.
+  $fields = field_info_fields();
+  $my_fields = array();
+  foreach ($fields as $field) {
+    if (isset($field['bundles']['TripalEntity'])) {
+      foreach ($field['bundles']['TripalEntity'] as $bundle_name) {
+        if ($bundle_name == 'bio_data_266') {
+          $my_fields[] = $field;
+        }
+      }
+    }
   }
-  dpm($entity);
+
+  // For each field we know about that should be attached to our bundle,
+  // see if we can find a corresponding entry in the results returned from
+  // the web service call. If so, then add the field to our fake entity.
+  foreach ($my_fields as $field) {
+    // Get the semantic web term for this field.
+    $field_name = $field['field_name'];
+    $settings = $field['settings'];
+
+    // If the field does not have a semantic web mapping, then skip it.
+    if (!isset($settings['semantic_web'])) {
+      continue;
+    }
+
+    // Convert the term into it's db and accession elements and look it up
+    // for more details.
+    list($vocabulary, $accession) = explode(':', $settings['semantic_web']);
+    $term = tripal_get_term_details($vocabulary, $accession);
+
+    // Convert the term to lowercase and remove spaces so we can compare
+    // correctly.
+    $term_name = strtolower(preg_replace('/ /', '_', $term['name']));
+
+    // TODO: check for the term in the response makes the assumption
+    // that the term is the same on both sides. This may not be true. The
+    // acutal vocab and accession for both terms should be compared.
+    if (isset($response[$term_name])) {
+
+      // If this field is of type '@id' then this links out to another
+      // URL where that information can be retrieved. We'll have to
+      // handle that separately.
+      if (isset($response['@context'][$term_name]['@type']) and
+          $response['@context'][$term_name]['@type'] == '@id') {
+        continue;
+      }
+
+      // For all fields that are currently attached, add the field and
+      // value to the entity.
+      $f = array();
+      $f['und'][0]['value'] = $response[$term_name];
+      $entity->$field_name = $f;
+    }
+  }
+
+//   // For fields that are links rather than values then we
+//   $sequences_json = file_get_contents($response['sequence']);
+//   $sequences = json_decode($sequences_json, TRUE);
+//   $entity->feature__residues = array();
+//   foreach ($sequences['member'] as $delta => $value) {
+//     $entity->feature__residues['und'][$delta]['value'] = $sequences['member'][$delta];
+//   }
+//   dpm($entity);
 
   // Generate the View for this entity
   $entities = array();