|
@@ -20,71 +20,49 @@ class views_handler_field_node_optional extends views_handler_field_node {
|
|
|
* Add chado_* and *_node alias'd left joins to the table
|
|
|
*/
|
|
|
function query() {
|
|
|
- parent::query();
|
|
|
- if (!preg_match('/'.$this->options[table].'/', $this->view->base_table)) {
|
|
|
- // chado_* ======================================================
|
|
|
- $drupal_chado_table_name = 'chado_'.$this->options[table];
|
|
|
-
|
|
|
- // add to table_queue--------------------------------------------
|
|
|
- $drupal_chado_table_join['table'] = $drupal_chado_table_name;
|
|
|
- $drupal_chado_table_join['num'] = 1;
|
|
|
- $drupal_chado_table_join['alias'] = $drupal_chado_table_name;
|
|
|
- $drupal_chado_table_join['relationship'] = $this->options[table];
|
|
|
-
|
|
|
- $drupal_chado_table_join['join'] = clone($this->query->table_queue[$this->options[table]]['join']);
|
|
|
- $drupal_chado_table_join['join']->table = $drupal_chado_table_name;
|
|
|
- $drupal_chado_table_join['join']->left_table = $this->options[table];
|
|
|
-
|
|
|
- $drupal_chado_table_join['join']->definition['table'] = $drupal_chado_table_name;
|
|
|
- $drupal_chado_table_join['join']->definition['left_table'] = $this->options[table];
|
|
|
-
|
|
|
- $this->query->table_queue[$drupal_chado_table_name] = $drupal_chado_table_join;
|
|
|
-
|
|
|
- // add to table--------------------------------------------------
|
|
|
- $this->query->tables[$this->view->base_table][$drupal_chado_table_name] = array(
|
|
|
- 'count' => 1,
|
|
|
- 'alias' => $drupal_chado_table_name,
|
|
|
- );
|
|
|
-
|
|
|
- // node ============================================================
|
|
|
- $drupal_node_table_alias = $this->options[table].'_node';
|
|
|
-
|
|
|
- // add to table_queue--------------------------------------------
|
|
|
- $drupal_node_table_join['table'] = 'node';
|
|
|
- $drupal_node_table_join['num'] = 1;
|
|
|
- $drupal_node_table_join['alias'] = $drupal_node_table_alias;
|
|
|
- $drupal_node_table_join['relationship'] = $this->options[table];
|
|
|
-
|
|
|
- if ($this->query->table_queue['node']['join']) {
|
|
|
- $drupal_node_table_join['join'] = clone($this->query->table_queue['node']['join']);
|
|
|
- } elseif ($this->query->table_queue[$drupal_chado_table_name]['join']) {
|
|
|
- $drupal_node_table_join['join'] = clone($this->query->table_queue[$drupal_chado_table_name]['join']);
|
|
|
- } else {
|
|
|
-
|
|
|
+
|
|
|
+ // Check what we have (ie: current table? node table? )
|
|
|
+ $chado_table = 'chado_' . $this->table;
|
|
|
+ foreach ($this->query->table_queue as $table_def) {
|
|
|
+ //check is $this->table
|
|
|
+ if ($table_def['table'] == $this->table) {
|
|
|
+ $this_table_alias = $table_def['alias'];
|
|
|
}
|
|
|
- $drupal_node_table_join['join']->table = 'node';
|
|
|
- $drupal_node_table_join['join']->field = 'nid';
|
|
|
- $drupal_node_table_join['join']->left_field = 'nid';
|
|
|
- $drupal_node_table_join['join']->left_table = $drupal_chado_table_name;
|
|
|
- $drupal_node_table_join['join']->definition['left_table'] = $drupal_chado_table_name;
|
|
|
-
|
|
|
- $this->query->table_queue[$drupal_node_table_alias] = $drupal_node_table_join;
|
|
|
-
|
|
|
- // add to table--------------------------------------------------
|
|
|
- $this->query->tables[$this->view->base_table][$drupal_node_table_alias] = array(
|
|
|
- 'count' => 1,
|
|
|
- 'alias' => $drupal_node_table_alias,
|
|
|
- );
|
|
|
|
|
|
- // add field and set alias ===========================
|
|
|
- $field_alias = $this->options[table].'_node_nid';
|
|
|
- $this->query->add_field($drupal_node_table_alias, 'nid');
|
|
|
- $this->add_additional_fields();
|
|
|
+ // check is node joined to #this->table
|
|
|
+ if ($table_def['table'] == $chado_table) {
|
|
|
+ $node_table_alias = $table_def['alias'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // First: Add the main field-----------------------------------------------
|
|
|
+ if (!$this_table_alias) {
|
|
|
+ $this_table_alias = $this->ensure_my_table();
|
|
|
+ }
|
|
|
+ $field_alias = $this->query->add_field($this_table_alias, $this->real_field);
|
|
|
+ $this->aliases[ $this->real_field ] = $field_alias;
|
|
|
+ $this->field_alias = $field_alias;
|
|
|
+
|
|
|
+ // Second: Add nid field and Joins if necessary----------------------------
|
|
|
+ // Add node join if needed
|
|
|
+ if (!$node_table_alias) {
|
|
|
+ $def['table'] = $chado_table;
|
|
|
+ $def['field'] = $this->table . '_id';
|
|
|
+ $def['left_table'] = $this_table_alias;
|
|
|
+ $def['left_field'] = $this->table . '_id';
|
|
|
|
|
|
- $this->aliases['nid'] = $field_alias;
|
|
|
- } else {
|
|
|
- $this->aliases['nid'] = 'node_nid';
|
|
|
+ $join = new views_join();
|
|
|
+ $join->definition = $def;
|
|
|
+ $join->construct();
|
|
|
+ $join->adjusted = TRUE;
|
|
|
+
|
|
|
+ $node_table_alias = $this->query->add_relationship($def['table'], $join, $def['table']);
|
|
|
}
|
|
|
+
|
|
|
+ // Finally Add Field
|
|
|
+ $field_alias = $this->query->add_field($node_table_alias, 'nid');
|
|
|
+ $this->aliases['nid'] = $field_alias;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|