|
@@ -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'];
|
|
|
}
|
|
|
|
|
|
}
|