|  | @@ -14,87 +14,89 @@ class views_handler_field_chado_relationship_all extends views_handler_field_pre
 | 
	
		
			
				|  |  |      $this->add_additional_fields();
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	function pre_render($values) {
 | 
	
		
			
				|  |  | -		$this->aliases['relationships'] = 'relationships';
 | 
	
		
			
				|  |  | -		$this->aliases['primary_id'] = $this->view->base_table.'_id';
 | 
	
		
			
				|  |  | -		$this->field_alias = $this->aliases['primary_id'];
 | 
	
		
			
				|  |  | -		$relationship_tablename = $this->view->base_table.'_relationship';
 | 
	
		
			
				|  |  | -		$this->aliases['relationship_primary_id'] = $relationship_tablename . '_id';
 | 
	
		
			
				|  |  | -		$table_desc = module_invoke_all('chado_'.$relationship_tablename.'_schema');
 | 
	
		
			
				|  |  | -		foreach($table_desc['foreign keys'][$this->view->base_table]['columns'] as $k => $v) {
 | 
	
		
			
				|  |  | -		  if (preg_match('/subject/',$k)) { $subject_id = $k; }
 | 
	
		
			
				|  |  | -		  if (preg_match('/object/', $k)) { $object_id = $k; }
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		$this->aliases['subject_id'] = $subject_id;
 | 
	
		
			
				|  |  | -		$this->aliases['object_id'] = $object_id;
 | 
	
		
			
				|  |  | -		  
 | 
	
		
			
				|  |  | +  function pre_render($values) {
 | 
	
		
			
				|  |  | +    $this->aliases['relationships'] = 'relationships';
 | 
	
		
			
				|  |  | +    $this->aliases['primary_id'] = $this->view->base_table . '_id';
 | 
	
		
			
				|  |  | +    $this->field_alias = $this->aliases['primary_id'];
 | 
	
		
			
				|  |  | +    $relationship_tablename = $this->view->base_table . '_relationship';
 | 
	
		
			
				|  |  | +    $this->aliases['relationship_primary_id'] = $relationship_tablename . '_id';
 | 
	
		
			
				|  |  | +    $table_desc = module_invoke_all('chado_' . $relationship_tablename . '_schema');
 | 
	
		
			
				|  |  | +    foreach ($table_desc['foreign keys'][$this->view->base_table]['columns'] as $k => $v) {
 | 
	
		
			
				|  |  | +      if (preg_match('/subject/', $k)) {
 | 
	
		
			
				|  |  | +      $subject_id = $k;}
 | 
	
		
			
				|  |  | +      if (preg_match('/object/', $k)) {
 | 
	
		
			
				|  |  | +      $object_id = $k;}
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $this->aliases['subject_id'] = $subject_id;
 | 
	
		
			
				|  |  | +    $this->aliases['object_id'] = $object_id;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      //Add values for all if possible
 | 
	
		
			
				|  |  |      if (!$this->view->result[0]->relationships) {
 | 
	
		
			
				|  |  |        //get base table primary keys
 | 
	
		
			
				|  |  |        $primary_ids = array();
 | 
	
		
			
				|  |  | -		  foreach ($this->view->result as $row_num => $row) {
 | 
	
		
			
				|  |  | -			  $primary_ids[$row_num] = $row->{$this->aliases['primary_id']};
 | 
	
		
			
				|  |  | -		  }
 | 
	
		
			
				|  |  | -		
 | 
	
		
			
				|  |  | -		  //generate results from db
 | 
	
		
			
				|  |  | -      $sql = "SELECT ".$relationship_tablename.".*, cvterm.name as type_name, "
 | 
	
		
			
				|  |  | -					."subject_parent.name as subject_name, object_parent.name as object_name "
 | 
	
		
			
				|  |  | -					."FROM ".$relationship_tablename." "
 | 
	
		
			
				|  |  | -					."LEFT JOIN ".$this->view->base_table." subject_parent ON "
 | 
	
		
			
				|  |  | -					  .$relationship_tablename.".".$subject_id."=subject_parent.".$this->aliases['primary_id']." "
 | 
	
		
			
				|  |  | -					."LEFT JOIN ".$this->view->base_table." object_parent ON "
 | 
	
		
			
				|  |  | -					  .$relationship_tablename.".".$object_id."=object_parent.".$this->aliases['primary_id']." "
 | 
	
		
			
				|  |  | -					."LEFT JOIN cvterm cvterm ON "
 | 
	
		
			
				|  |  | -					  .$relationship_tablename.".type_id = cvterm.cvterm_id "
 | 
	
		
			
				|  |  | -					."WHERE ".$relationship_tablename.".".$subject_id." IN (".implode(',',$primary_ids).") "
 | 
	
		
			
				|  |  | -					."OR ".$relationship_tablename.".".$object_id." IN (".implode(',',$primary_ids).") ";
 | 
	
		
			
				|  |  | -			$previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | -			$resource = db_query($sql);
 | 
	
		
			
				|  |  | -			tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | -			
 | 
	
		
			
				|  |  | -			//add results to views results
 | 
	
		
			
				|  |  | -			while ($r = db_fetch_object($resource)) {
 | 
	
		
			
				|  |  | -				if (in_array($r->{$subject_id}, $primary_ids)) {
 | 
	
		
			
				|  |  | -					$key = array_search($r->{$subject_id}, $primary_ids);
 | 
	
		
			
				|  |  | -					$r->{$this->aliases['primary_id']} = $r->{$subject_id};
 | 
	
		
			
				|  |  | -					$this->view->result[$key]->relationships[] = clone $r;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				if (in_array($r->{$object_id}, $primary_ids)) {
 | 
	
		
			
				|  |  | -					$key = array_search($r->{$object_id}, $primary_ids);
 | 
	
		
			
				|  |  | -					$r->{$this->aliases['primary_id']} = $r->{$object_id};
 | 
	
		
			
				|  |  | -					$this->view->result[$key]->relationships[] = clone $r;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			} //end of while
 | 
	
		
			
				|  |  | +      foreach ($this->view->result as $row_num => $row) {
 | 
	
		
			
				|  |  | +        $primary_ids[$row_num] = $row->{$this->aliases['primary_id']};
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      //generate results from db
 | 
	
		
			
				|  |  | +      $sql = "SELECT " . $relationship_tablename . ".*, cvterm.name as type_name, "
 | 
	
		
			
				|  |  | +          ."subject_parent.name as subject_name, object_parent.name as object_name "
 | 
	
		
			
				|  |  | +          ."FROM " . $relationship_tablename . " "
 | 
	
		
			
				|  |  | +          ."LEFT JOIN " . $this->view->base_table . " subject_parent ON "
 | 
	
		
			
				|  |  | +            . $relationship_tablename . "." . $subject_id . "=subject_parent." . $this->aliases['primary_id'] . " "
 | 
	
		
			
				|  |  | +          ."LEFT JOIN " . $this->view->base_table . " object_parent ON "
 | 
	
		
			
				|  |  | +            . $relationship_tablename . "." . $object_id . "=object_parent." . $this->aliases['primary_id'] . " "
 | 
	
		
			
				|  |  | +          ."LEFT JOIN cvterm cvterm ON "
 | 
	
		
			
				|  |  | +            . $relationship_tablename . ".type_id = cvterm.cvterm_id "
 | 
	
		
			
				|  |  | +          . "WHERE " . $relationship_tablename . "." . $subject_id . " IN (" . implode(',', $primary_ids) . ") "
 | 
	
		
			
				|  |  | +          . "OR " . $relationship_tablename . "." . $object_id . " IN (" . implode(',', $primary_ids) . ") ";
 | 
	
		
			
				|  |  | +      $previous_db = tripal_db_set_active('chado');
 | 
	
		
			
				|  |  | +      $resource = db_query($sql);
 | 
	
		
			
				|  |  | +      tripal_db_set_active($previous_db);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      //add results to views results
 | 
	
		
			
				|  |  | +      while ($r = db_fetch_object($resource)) {
 | 
	
		
			
				|  |  | +        if (in_array($r->{$subject_id}, $primary_ids)) {
 | 
	
		
			
				|  |  | +          $key = array_search($r->{$subject_id}, $primary_ids);
 | 
	
		
			
				|  |  | +          $r->{$this->aliases['primary_id']} = $r->{$subject_id};
 | 
	
		
			
				|  |  | +          $this->view->result[$key]->relationships[] = clone $r;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (in_array($r->{$object_id}, $primary_ids)) {
 | 
	
		
			
				|  |  | +          $key = array_search($r->{$object_id}, $primary_ids);
 | 
	
		
			
				|  |  | +          $r->{$this->aliases['primary_id']} = $r->{$object_id};
 | 
	
		
			
				|  |  | +          $this->view->result[$key]->relationships[] = clone $r;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } //end of while
 | 
	
		
			
				|  |  |      }// end of if add values
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		//for each stock in this view page, add the values
 | 
	
		
			
				|  |  | -		foreach ($values as $result) {
 | 
	
		
			
				|  |  | -			if (!empty($result->{$this->aliases['relationships']})) {
 | 
	
		
			
				|  |  | -				
 | 
	
		
			
				|  |  | -				// all relationships including the current stock
 | 
	
		
			
				|  |  | -				$relationships = $result->{$this->aliases['relationships']};
 | 
	
		
			
				|  |  | -				foreach ($relationships as $relationship) {			
 | 
	
		
			
				|  |  | -					// Add relationship to the list of items to be rendered
 | 
	
		
			
				|  |  | -					// Note: $this->aliases['primary_id'] = base table primary key
 | 
	
		
			
				|  |  | -					
 | 
	
		
			
				|  |  | -					$elements = array(
 | 
	
		
			
				|  |  | -					  $this->aliases['primary_id'] => $relationship->{$this->aliases['primary_id']},
 | 
	
		
			
				|  |  | -					  $this->aliases['relationship_primary_id'] => $relationship->{$this->aliases['relationship_primary_id']},
 | 
	
		
			
				|  |  | -					  'subject_id' => $relationship->{$this->aliases['subject_id']},
 | 
	
		
			
				|  |  | -					  'subject_name' => $relationship->subject_name,
 | 
	
		
			
				|  |  | -					  'object_id' => $relationship->{$this->aliases['object_id']},
 | 
	
		
			
				|  |  | +    //for each stock in this view page, add the values
 | 
	
		
			
				|  |  | +    foreach ($values as $result) {
 | 
	
		
			
				|  |  | +      if (!empty($result->{$this->aliases['relationships']})) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // all relationships including the current stock
 | 
	
		
			
				|  |  | +        $relationships = $result->{$this->aliases['relationships']};
 | 
	
		
			
				|  |  | +        foreach ($relationships as $relationship) {
 | 
	
		
			
				|  |  | +          // Add relationship to the list of items to be rendered
 | 
	
		
			
				|  |  | +          // Note: $this->aliases['primary_id'] = base table primary key
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          $elements = array(
 | 
	
		
			
				|  |  | +            $this->aliases['primary_id'] => $relationship->{$this->aliases['primary_id']},
 | 
	
		
			
				|  |  | +            $this->aliases['relationship_primary_id'] => $relationship->{$this->aliases['relationship_primary_id']},
 | 
	
		
			
				|  |  | +            'subject_id' => $relationship->{$this->aliases['subject_id']},
 | 
	
		
			
				|  |  | +            'subject_name' => $relationship->subject_name,
 | 
	
		
			
				|  |  | +            'object_id' => $relationship->{$this->aliases['object_id']},
 | 
	
		
			
				|  |  |              'object_name' => $relationship->object_name,
 | 
	
		
			
				|  |  |              'type_id' => $relationship->type_id,
 | 
	
		
			
				|  |  |              'type_name' => $relationship->type_name,
 | 
	
		
			
				|  |  | -					);
 | 
	
		
			
				|  |  | -					$this->items[$relationship->{$this->aliases['primary_id']}][$relationship->{$this->aliases['relationship_primary_id']}] = $elements;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +          );
 | 
	
		
			
				|  |  | +          $this->items[$relationship->{$this->aliases['primary_id']}][$relationship->{$this->aliases['relationship_primary_id']}] = $elements;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    function render_item($count, $item) {
 | 
	
		
			
				|  |  | -		return $item['subject_name'].' '.$item['type_name'].' '.$item['object_name'];
 | 
	
		
			
				|  |  | +    return $item['subject_name'] . ' ' . $item['type_name'] . ' ' . $item['object_name'];
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |