ソースを参照

Fixed synonym field. Fixed issue #127

Stephen Ficklin 7 年 前
コミット
182e0fb079

+ 36 - 13
tripal_chado/includes/TripalFields/schema__alternate_name/schema__alternate_name.inc

@@ -59,9 +59,6 @@ class schema__alternate_name extends ChadoField {
     // Get the PKey for this table
     $schema = chado_get_schema($field_table);
     $pkey = $schema['primary key'][0];
-
-    // Get the FK that links to the base record.
-    $schema = chado_get_schema($field_table);
     $fkey_lcolumn = key($schema['foreign keys'][$base_table]['columns']);
     $fkey_rcolumn = $schema['foreign keys'][$base_table]['columns'][$fkey_lcolumn];
 
@@ -106,18 +103,44 @@ class schema__alternate_name extends ChadoField {
    * @see ChadoField::query()
    */
   public function query($query, $condition) {
-    $syn_linker = $this->instance['settings']['chado_table'];
-    $base_table = $this->instance['settings']['base_table'];
-    $bschema = chado_get_schema($base_table);
-    $bpkey = $bschema['primary key'][0];
-    $alias = 'syn_linker';
+    $alias = $this->field['field_name'];
     $operator = $condition['operator'];
 
-    if ($condition['column'] == 'alternatename') {
-      $this->queryJoinOnce($query, $syn_linker, $alias, "base.$bpkey = $alias.$bpkey");
-      $this->queryJoinOnce($query, 'synonym', 'SYN', "SYN.synonym_id = $alias.synonym_id");
-      $query->condition("SYN.name", $condition['value']);
-    }
+    $field_name = $this->field['field_name'];
+    $field_type = $this->field['type'];
+    $field_table = $this->instance['settings']['chado_table'];
+    $field_column = $this->instance['settings']['chado_column'];
+    $base_table = $this->instance['settings']['base_table'];
+
+    $schema = chado_get_schema($field_table);
+    $pkey = $schema['primary key'][0];
+    $fkey_lcolumn = key($schema['foreign keys'][$base_table]['columns']);
+    $fkey_rcolumn = $schema['foreign keys'][$base_table]['columns'][$fkey_lcolumn];
+
+    $this->queryJoinOnce($query, $field_table, $alias, "base.$fkey_rcolumn = $alias.$fkey_lcolumn");
+    $this->queryJoinOnce($query, 'synonym', $alias . '_SYN', $alias . "_SYN.synonym_id = $alias.synonym_id");
+    $query->condition($alias . "_SYN.name", $condition['value']);
   }
 
+  /**
+   * @see ChadoField::query()
+   */
+  public function queryOrder($query, $order) {
+    $alias = $this->field['field_name'];
+
+    $field_name = $this->field['field_name'];
+    $field_type = $this->field['type'];
+    $field_table = $this->instance['settings']['chado_table'];
+    $field_column = $this->instance['settings']['chado_column'];
+    $base_table = $this->instance['settings']['base_table'];
+
+    $schema = chado_get_schema($field_table);
+    $pkey = $schema['primary key'][0];
+    $fkey_lcolumn = key($schema['foreign keys'][$base_table]['columns']);
+    $fkey_rcolumn = $schema['foreign keys'][$base_table]['columns'][$fkey_lcolumn];
+
+    $this->queryJoinOnce($query, $field_table, $alias, "base.$fkey_rcolumn = $alias.$fkey_lcolumn", "LEFT OUTER");
+    $this->queryJoinOnce($query, 'synonym', $alias . '_SYN', $alias . "_SYN.synonym_id = $alias.synonym_id", "LEFT OUTER");
+    $query->orderBy($alias . "_SYN.name", $order['direction']);
+  }
 }

+ 3 - 2
tripal_chado/includes/TripalFields/schema__alternate_name/schema__alternate_name_formatter.inc

@@ -13,15 +13,16 @@ class schema__alternate_name_formatter extends ChadoFieldFormatter {
    */
   public function view(&$element, $entity_type, $entity, $langcode, $items, $display) {
     $list_items = array();
+
     foreach ($items as $delta => $item) {
       $list_items[] = $item['value'];
     }
     $list = 'There are no synonyms.';
-    if (count($list_items) > 1) {
+    if (count($list_items) > 0) {
       $list = array(
         'title' => '',
         'items' => $list_items,
-        'type' => 'ol',
+        'type' => 'ul',
         'attributes' => array(),
       );
       $list = theme_item_list($list);

+ 7 - 5
tripal_chado/includes/TripalFields/schema__alternate_name/schema__alternate_name_widget.inc

@@ -13,7 +13,6 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
    */
   public function form(&$widget, &$form, &$form_state, $langcode, $items, $delta, $element) {
     parent::form($widget, $form, $form_state, $langcode, $items, $delta, $element);
-
     $field_name = $this->field['field_name'];
 
     // Get the FK column that links to the base table.
@@ -26,7 +25,7 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
 
     // Get the field defaults.
     $record_id = '';
-    $fkey_value = array_key_exists('#entity', $element) and $element['#entity'] ? $element['#entity']->chado_record_id : NULL;
+    $fkey_value = (array_key_exists('#entity', $element) and $element['#entity']) ? $element['#entity']->chado_record_id : NULL;
     $synonym_id = '';
     $pub_id = '';
     $is_current = TRUE;
@@ -49,7 +48,6 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
     // Check $form_state['values'] to see if an AJAX call set the values.
     if (array_key_exists('values', $form_state) and
         array_key_exists($field_name, $form_state['values'])) {
-      $record_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__' . $pkey];
       $synonym_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__synonym_id'];
       $pub_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__pub_id'];
       $is_current = $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__is_current'];
@@ -125,6 +123,9 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
       '#required' => $element['#required'],
     );
   }
+  /**
+   * @see TripalFieldWidget::validate()
+   */
   public function validate($element, $form, &$form_state, $langcode, $delta) {
     $field_name = $this->field['field_name'];
     $field_type = $this->field['type'];
@@ -148,11 +149,11 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
       // Set the synonym_id and FK value
       $synonym = chado_generate_var('synonym', array('name' => $syn_name, 'type_id' => $syn_type));
       if ($synonym) {
-        $form_state['values'][$field_name]['und']['value'] = $synonym->synonym_id;
+        $form_state['values'][$field_name]['und'][$delta]['value'] = $synonym->name;
         $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__synonym_id'] = $synonym->synonym_id;
       }
       else {
-        $form_state['values'][$field_name]['und']['value'] = $syn_name;
+        $form_state['values'][$field_name]['und'][$delta]['value'] = $syn_name;
       }
       // If a publication is not provided then use the null pub.
       if (!$pub_id) {
@@ -199,6 +200,7 @@ class schema__alternate_name_widget extends ChadoFieldWidget {
           'synonym_sgml' => '',
         ));
         $synonym = (object) $synonym;
+        $form_state['values'][$field_name]['und'][$delta]['value'] = $synonym->name;
         $form_state['values'][$field_name]['und'][$delta]['chado-' . $table_name . '__synonym_id'] = $synonym->synonym_id;
       }
     }

+ 2 - 2
tripal_chado/includes/tripal_chado.field_storage.inc

@@ -628,8 +628,8 @@ function tripal_chado_field_storage_query($query) {
     } // end if ($sort['type'] == 'field') {
   } // end foreach ($query->order as $index => $sort) {
 
-//      dpm($cquery->__toString());
-//      dpm($cquery->getArguments());
+//       dpm($cquery->__toString());
+//       dpm($cquery->getArguments());
 
   $records = $cquery->execute();
 

+ 6 - 0
tripal_chado/includes/tripal_chado.fields.inc

@@ -1768,6 +1768,12 @@ function tripal_chado_bundle_instances_info_linker(&$info, $entity_type, $bundle
          $term = chado_generate_var('cvterm', array('cvterm_id' => $prop->type_id));
          $term = chado_expand_var($term, 'field', 'cvterm.definition');
 
+         // Skip the Publiation Type property for pubs as this is
+         // already handled by the pub.type_id field.
+         if ($term->name == 'Publication Type' and $term->cv_id->name == 'tripal_pub') {
+           continue;
+         }
+
          // The tripal_analysis_KEGG, tripal_analysis_blast, and
          // tripal_analysis_interpro modules store results in the analysisprop
          // table which is probably not the best place, but we don't want to