Browse Source

go loading problem updates

Shawna 7 years ago
parent
commit
0f6bd97518
1 changed files with 107 additions and 101 deletions
  1. 107 101
      tripal_chado/api/modules/tripal_chado.cv.api.inc

+ 107 - 101
tripal_chado/api/modules/tripal_chado.cv.api.inc

@@ -400,7 +400,8 @@ function tripal_update_cvtermpath_root_loop($rootid, $cvid){
   $ttype->condition($db_or);
   $result = $ttype->execute()->fetchObject();
 
-  $result = tripal_update_cvtermpath_loop($rootid, $rootid, $cvid, $result->cvterm_id, 0, 0, array());
+  // If the variables are the loop components run passed it.
+  tripal_update_cvtermpath_loop($rootid, $rootid, $cvid, $result->cvterm_id, 0, 0, array());
 
   $cterm = db_query(
     'SELECT *
@@ -411,14 +412,7 @@ function tripal_update_cvtermpath_root_loop($rootid, $cvid){
   );
 
   while($cterm_result = $cterm->fetchAssoc()) {
-    if ($result === 'LOOP'){
-      watchdog('debug', '<pre>$result: ' . print_r($result, TRUE) . '</pre>');
-
-      continue;
-    }
-    else {
-      tripal_update_cvtermpath_root_loop($cterm_result['subject_id'], $cvid);
-    }
+    tripal_update_cvtermpath_root_loop($cterm_result['subject_id'], $cvid);
   }
 }
 
@@ -432,7 +426,6 @@ function tripal_update_cvtermpath_root_loop($rootid, $cvid){
  * @return multitype:
  */
 function tripal_update_cvtermpath_loop($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $array_of_children){
-
   // Check to see if a row with these values already exists.
   chado_set_active('chado');
   $count =  db_query(
@@ -449,6 +442,27 @@ function tripal_update_cvtermpath_loop($origin, $child_id, $cv_id, $type_id, $de
 
   try{
     if($count_total == 0) {
+      // Build the ID.
+      $children_id = $origin . '|' . $child_id . '|' . $cv_id . '|' . $type_id;
+      // Now check if the most recent entry already exists in the array.
+      if ($increment_of_depth != 0) {
+        // Search the $array_of_children for the new $child_id in the build_id column.
+        foreach ($array_of_children as $key => $val) {
+          if ($val['build_id'] == $children_id) {
+            // If the search returns something check for a possible loop.
+            $result_of_loop_checker = tripal_update_cvtermpath_loop_checker($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, 0, $val, [], $depth);
+            watchdog('debug', '<pre>tripal_update_cvtermpath_loop  $result_of_loop_checker: ' . print_r($result_of_loop_checker, TRUE) . '</pre>');
+            if (!empty($result_of_loop_checker)) {
+              watchdog('debug', 'Loop found exit the loop function');
+              break;
+            }
+          }
+          if (!empty($result_of_loop_checker)) {
+            watchdog('debug', 'Loop 2 found exit the loop function');
+            return $result_of_loop_checker;
+          }
+        }
+      }
       // If row with values does not already exist write to table.
       chado_set_active('chado');
 
@@ -461,43 +475,25 @@ function tripal_update_cvtermpath_loop($origin, $child_id, $cv_id, $type_id, $de
           'pathdistance' => $depth,
         ));
       $rows = $query->execute();
-      //watchdog('debug', '<pre>$rows: ' . print_r($rows, TRUE) . '</pre>');
-
-     // if($rows) {
-        // Build the ID.
-        $children_id = $origin . '|' . $child_id . '|' . $cv_id . '|' . $type_id;
-        // Now check if the most recent entry already exists in the array.
-        if ($increment_of_depth != 0) {
-          // Search the $array_of_children for the new $child_id in the build_id column.
-          foreach ($array_of_children as $key => $val) {
-            if ($val['build_id'] == $children_id) {
-              // If the search returns something check for a possible loop.
-              $result_of_loop_checker = tripal_update_cvtermpath_loop_checker($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, 0, $val, [], $depth);
-              watchdog('debug', '<pre>tripal_update_cvtermpath_loop  $result_of_loop_checker: ' . print_r($result_of_loop_checker, TRUE) . '</pre>');
-              if ($result_of_loop_checker) {
-                watchdog('debug', 'Loop found exit the loop function');
-                return 'LOOP';
-              }
-            }
-          }
-        }
-        // Then add that new entry to the $array_of_children.
-        $array_of_children[$increment_of_depth] = [
-          'build_id' => $children_id,
-          'depth' => $depth
-        ];
-
-        $query = db_select('cvterm_relationship', 'cvtr')
-          ->fields('cvtr')
-          ->condition('cvtr.object_id', $child_id, '=')
-          ->execute();
-        $cterm = $query->fetchAll();
-
-        foreach ($cterm as $item) {
-          $increment_of_depth++;
-          tripal_update_cvtermpath_loop($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $array_of_children);
-        }
-     // }
+
+      // Then add that new entry to the $array_of_children.
+      $array_of_children[$increment_of_depth] = [
+        'build_id' => $children_id,
+        'depth' => $depth
+      ];
+
+      $query = db_select('cvterm_relationship', 'cvtr')
+        ->fields('cvtr')
+        ->condition('cvtr.object_id', $child_id, '=')
+        ->execute();
+      $cterm = $query->fetchAll();
+
+      foreach ($cterm as $item) {
+        watchdog('debug', 'tripal_update_cvtermpath_loop ');
+        $increment_of_depth++;
+        tripal_update_cvtermpath_loop($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $array_of_children);
+
+      }
     }
   }
   catch(Exception $e){
@@ -521,76 +517,86 @@ function tripal_update_cvtermpath_loop($origin, $child_id, $cv_id, $type_id, $de
  * @return bool
  */
 function tripal_update_cvtermpath_loop_checker($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $distance_between_parent_child, $possible_start_of_loop, $array_of_possible_loop, $depth_at_start_of_loop){
-    chado_set_active('chado');
-    $query = db_select('cvterm_relationship', 'cvtr')
-      ->fields('cvtr')
-      ->condition('cvtr.object_id', $child_id, '=')
-      ->execute();
-    $cterm = $query->fetchAll();
-
-    foreach ($cterm as $item){
-      if ($distance_between_parent_child > 0){
-        // Search the $array_of_children for the new $child_id in the build_id column.
-        foreach ($array_of_possible_loop as $key => $val) {
-          if ($val['build_id'] === $possible_start_of_loop['build_id']) {
-            $possible_loop_starts = $val;
-            // If the search returns something check for a possible loop.
-            if (!empty($possible_loop_starts)) {
-              $result = tripal_update_cvtermpath_loop_checker_traverse($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, array(), 0);
-              watchdog('debug', '<pre>tripal_update_cvtermpath_loop_checker  $result: '. print_r($result, TRUE) .'</pre>');
-              if(!empty($result)){
-                return $result;
-              }
+  chado_set_active('chado');
+  $query = db_select('cvterm_relationship', 'cvtr')
+    ->fields('cvtr')
+    ->condition('cvtr.object_id', $child_id, '=')
+    ->execute();
+  $cterm = $query->fetchAll();
+
+  foreach ($cterm as $item){
+    if ($distance_between_parent_child > 0){
+      // Search the $array_of_children for the new $child_id in the build_id column.
+      foreach ($array_of_possible_loop as $key => $val) {
+        if ($val['build_id'] === $possible_start_of_loop['build_id']) {
+          // If the search returns something check for a possible loop.
+          if (!empty($val)) {
+            $result = tripal_update_cvtermpath_loop_checker_traverse($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, array(), 0);
+            watchdog('debug', '<pre>tripal_update_cvtermpath_loop_checker  $result: '. print_r($result, TRUE) .'</pre>');
+            if(!empty($result)){
+              break 2;
             }
           }
         }
       }
-      elseif($loop_found !== TRUE){}
+    }
       $increment_of_depth++;
       $distance_between_parent_child++;
-      $children_id = $origin .'|' .$item->subject_id .'|' .$cv_id.'|' .$item->type_id;
-      $array_of_possible_loop[$distance_between_parent_child] = array('build_id' => $children_id);
-      $result = tripal_update_cvtermpath_loop_checker($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $distance_between_parent_child, $possible_start_of_loop, $array_of_possible_loop, $depth_at_start_of_loop);
+      $children_id = $origin . '|' . $item->subject_id . '|' . $cv_id . '|' . $item->type_id;
+      $array_of_possible_loop[$distance_between_parent_child] = ['build_id' => $children_id];
+      tripal_update_cvtermpath_loop_checker($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $distance_between_parent_child, $possible_start_of_loop, $array_of_possible_loop, $depth_at_start_of_loop);
       if($result !== FALSE){
         return $result;
       }
-    }
-  return FALSE;
+
+  }
+  if (!empty($result)) {
+    return $result;
+  }
+  else {
+    return FALSE;
+  }
 }
 
-function tripal_update_cvtermpath_loop_checker_traverse($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, $traverse_of_loop, $increment){
-    if($increment > 10){
-      die();
+function tripal_update_cvtermpath_loop_checker_traverse($origin, $child_id, $cv_id, $type_id, $depth, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, $traverse_of_loop, $increment) {
+  if ($increment > 10) {
+    die();
+  }
+  chado_set_active('chado');
+  $query = db_select('cvterm_relationship', 'cvtr')
+    ->fields('cvtr')
+    ->condition('cvtr.object_id', $child_id, '=')
+    ->execute();
+  $cterm = $query->fetchAll();
+
+  foreach ($cterm as $item) {
+    if ($array_of_possible_loop === $traverse_of_loop) {
+      watchdog('debug', '<pre>$array_of_possible_loop: ' . print_r($array_of_possible_loop, TRUE) . '</pre>');
+      watchdog('debug', '<pre>$traverse_of_loop: ' . print_r($traverse_of_loop, TRUE) . '</pre>');
+      watchdog('debug', 'LOOP');
+      //Report the loop.
+      $loop_found = $item;
+      break;
     }
-    chado_set_active('chado');
-    $query = db_select('cvterm_relationship', 'cvtr')
-      ->fields('cvtr')
-      ->condition('cvtr.object_id', $child_id, '=')
-      ->execute();
-    $cterm = $query->fetchAll();
-
-    foreach ($cterm as $item){
-      if($array_of_possible_loop === $traverse_of_loop){
-        watchdog('debug', '<pre>$array_of_possible_loop: '. print_r($array_of_possible_loop, TRUE) .'</pre>');
-        watchdog('debug', '<pre>$traverse_of_loop: '. print_r($traverse_of_loop, TRUE) .'</pre>');
-        watchdog('debug', 'LOOP');
-        //Report the loop.
-        return $item;
-      }
-      elseif($array_of_possible_loop != $traverse_of_loop) {
-        $increment_of_depth++;
-        $increment++;
-        $children_id = $origin . '|' . $item->subject_id . '|' . $cv_id . '|' . $item->type_id;
-        $traverse_of_loop[$increment] = ['build_id' => $children_id];
-        $result = tripal_update_cvtermpath_loop_checker_traverse($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, $traverse_of_loop, $increment);
-        if($result !== FALSE){
-          return $result;
-        }
+    elseif ($array_of_possible_loop != $traverse_of_loop) {
+      $increment_of_depth++;
+      $increment++;
+      $children_id = $origin . '|' . $item->subject_id . '|' . $cv_id . '|' . $item->type_id;
+      $traverse_of_loop[$increment] = ['build_id' => $children_id];
+      $result = tripal_update_cvtermpath_loop_checker_traverse($origin, $item->subject_id, $cv_id, $item->type_id, $depth + 1, $increment_of_depth, $possible_start_of_loop, $array_of_possible_loop, $traverse_of_loop, $increment);
+      if ($result !== FALSE) {
+        return $result;
       }
     }
+  }
+  if ($loop_found) {
+    return $loop_found;
+  }
+  else {
     return FALSE;
-}
 
+  }
+}
 /*
  *
  * @param $origin