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; //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 }// 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']}, '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; } } } } function render_item($count, $item) { return $item['subject_name'].' '.$item['type_name'].' '.$item['object_name']; } }