|
@@ -15,53 +15,60 @@ class chado_linker__contact_widget extends ChadoFieldWidget {
|
|
|
parent::form($widget, $form, $form_state, $langcode, $items, $delta, $element);
|
|
|
|
|
|
$field_name = $this->field['field_name'];
|
|
|
+ $field_type = $this->field['type'];
|
|
|
+ $base_table = $this->instance['settings']['base_table'];
|
|
|
+ $chado_table = $this->instance['settings']['chado_table'];
|
|
|
+ $chado_column = $this->instance['settings']['chado_column'];
|
|
|
+ $instance = $this->instance;
|
|
|
|
|
|
// Get the FK column that links to the base table.
|
|
|
- $table_name = $this->instance['settings']['chado_table'];
|
|
|
- $base_table = $this->instance['settings']['base_table'];
|
|
|
- $schema = chado_get_schema($table_name);
|
|
|
+ $schema = chado_get_schema($chado_table);
|
|
|
$pkey = $schema['primary key'][0];
|
|
|
- $fkeys = array_values($schema['foreign keys'][$base_table]['columns']);
|
|
|
- $fkey = $fkeys[0];
|
|
|
+ $lfkey_field = key($schema['foreign keys'][$base_table]['columns']);
|
|
|
|
|
|
// Get the field defaults.
|
|
|
$record_id = '';
|
|
|
- $fkey_value = array_key_exists('#entity', $element) and $element['#entity'] ? $element['#entity']->chado_record_id : NULL;
|
|
|
+ $fk_value = array_key_exists('#entity', $element) and $element['#entity'] ? $element['#entity']->chado_record_id : NULL;
|
|
|
$contact_id = '';
|
|
|
$name = '';
|
|
|
+ $value = '';
|
|
|
+
|
|
|
|
|
|
// If the field already has a value then it will come through the $items
|
|
|
// array. This happens when editing an existing record.
|
|
|
- if (count($items) > 0 and array_key_exists($delta, $items)) {
|
|
|
- $record_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $table_name . '__' . $pkey, $record_id);
|
|
|
- $contact_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $table_name . '__contact_id', $contact_id);
|
|
|
- if ($contact_id) {
|
|
|
- $contact = chado_generate_var('contact', array('contact_id' => $contact_id));
|
|
|
- $name = $contact->name;
|
|
|
+ if (count($items) > 0) {
|
|
|
+ // Check for element values that correspond to fields in the Chado table.
|
|
|
+ $fk_value = tripal_get_field_item_keyval($items, 0, 'chado-' . $chado_table . '__' . $lfkey_field, $fk_value);
|
|
|
+ if (array_key_exists($delta, $items)) {
|
|
|
+ $record_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $chado_table . '__' . $pkey, $record_id);
|
|
|
+ $contact_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $chado_table . '__contact_id', $contact_id);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $schema = chado_get_schema('contact');
|
|
|
+ // Check $form_state['values'] to see if an AJAX call set the values.
|
|
|
+ if (array_key_exists('values', $form_state) and array_key_exists($delta, $form_state['values'])) {
|
|
|
+ $record_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__' . $pkey];
|
|
|
+ $fk_value = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__' . $lfkey_field];
|
|
|
+ $contact_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__contact_id'];
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- $widget['#table_name'] = $table_name;
|
|
|
- $widget['#fkey_field'] = $fkey;
|
|
|
- $widget['#prefix'] = "<span id='$table_name-$delta'>";
|
|
|
- $widget['#suffix'] = "</span>";
|
|
|
+ $schema = chado_get_schema('contact');
|
|
|
|
|
|
$widget['value'] = array(
|
|
|
'#type' => 'value',
|
|
|
'#value' => array_key_exists($delta, $items) ? $items[$delta]['value'] : '',
|
|
|
);
|
|
|
|
|
|
- $widget['chado-' . $table_name . '__' . $pkey] = array(
|
|
|
+ $widget['chado-' . $chado_table . '__' . $pkey] = array(
|
|
|
'#type' => 'value',
|
|
|
'#default_value' => $record_id,
|
|
|
);
|
|
|
- $widget['chado-' . $table_name . '__' . $fkey] = array(
|
|
|
+ $widget['chado-' . $chado_table . '__' . $lfkey_field] = array(
|
|
|
'#type' => 'value',
|
|
|
- '#default_value' => $fkey_value,
|
|
|
+ '#default_value' => $fk_value,
|
|
|
);
|
|
|
- $widget['chado-' . $table_name . '__contact_id'] = array(
|
|
|
+ $widget['chado-' . $chado_table . '__contact_id'] = array(
|
|
|
'#type' => 'value',
|
|
|
'#default_value' => $contact_id,
|
|
|
);
|
|
@@ -73,7 +80,7 @@ class chado_linker__contact_widget extends ChadoFieldWidget {
|
|
|
'#autocomplete_path' => 'admin/tripal/storage/chado/auto_name/contact',
|
|
|
'#ajax' => array(
|
|
|
'callback' => "chado_linker__contact_widget_form_ajax_callback",
|
|
|
- 'wrapper' => "$table_name-$delta",
|
|
|
+ 'wrapper' => "$chado_table-$delta",
|
|
|
'effect' => 'fade',
|
|
|
'method' => 'replace'
|
|
|
),
|
|
@@ -87,41 +94,30 @@ class chado_linker__contact_widget extends ChadoFieldWidget {
|
|
|
* @see TripalFieldWidget::submit()
|
|
|
*/
|
|
|
public function submit($form, &$form_state, $entity_type, $entity, $langcode, $delta) {
|
|
|
- // Get the FK column that links to the base table.
|
|
|
- $table_name = $this->instance['settings']['chado_table'];
|
|
|
+ $field_name = $this->field['field_name'];
|
|
|
+ $field_type = $this->field['type'];
|
|
|
$base_table = $this->instance['settings']['base_table'];
|
|
|
- $schema = chado_get_schema($table_name);
|
|
|
+ $chado_table = $this->instance['settings']['chado_table'];
|
|
|
+ $chado_column = $this->instance['settings']['chado_column'];
|
|
|
+ $instance = $this->instance;
|
|
|
+ $schema = chado_get_schema($chado_table);
|
|
|
+
|
|
|
$pkey = $schema['primary key'][0];
|
|
|
- $fkeys = array_values($schema['foreign keys'][$base_table]['columns']);
|
|
|
- $fkey = $fkeys[0];
|
|
|
- $field_name = $this->field['field_name'];
|
|
|
+ $lfkey_field = key($schema['foreign keys'][$base_table]['columns']);
|
|
|
|
|
|
// Get the field values.
|
|
|
- $fkey_value = isset($form_state['values'][$field_name][$langcode][$delta]['value']) ? $form_state['values'][$field_name][$langcode][$delta]['value'] : '';
|
|
|
- $contact_id = isset($form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__contact_id']) ? $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__contact_id'] : '';
|
|
|
- $name = isset($form_state['values'][$field_name][$langcode][$delta]['name']) ? $form_state['values'][$field_name][$langcode][$delta]['name'] : '';
|
|
|
+ $record_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__' . $pkey];
|
|
|
+ $fk_value = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__' . $lfkey_field];
|
|
|
+ $contact_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $chado_table . '__contact_id'];
|
|
|
+ $name = $form_state['values'][$field_name]['und'][$delta]['name'];
|
|
|
|
|
|
// If the user provided a name then we want to set the foreign key
|
|
|
// value to be the chado_record_id
|
|
|
- if ($name and !$contact_id) {
|
|
|
+ if ($name) {
|
|
|
$contact = chado_generate_var('contact', array('name' => $name));
|
|
|
- $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__contact_id'] = $contact->contact_id;
|
|
|
- }
|
|
|
-
|
|
|
- // In the widgetForm function we automatically add the foreign key
|
|
|
- // record. But if the user did not provide a contact we want to take
|
|
|
- // it out so that the Chado field_storage infrastructure won't try to
|
|
|
- // write a record.
|
|
|
- if (!$name and !$contact_id) {
|
|
|
- $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__' . $fkey] = '';
|
|
|
- }
|
|
|
-
|
|
|
- // If the user removed the contact from the contact_name field
|
|
|
- // then we want to clear out the rest of the hidden values.
|
|
|
- // Leave the primary key so the record can be deleted.
|
|
|
- if (!$name and $contact_id) {
|
|
|
- $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__' . $fkey] = '';
|
|
|
- $form_state['values'][$field_name][$langcode][$delta]['chado-' . $table_name . '__contact_id'] = '';
|
|
|
+ $form_state['values'][$field_name][$langcode][$delta]['chado-' . $chado_table . '__contact_id'] = $contact->contact_id;
|
|
|
+ $form_state['values'][$field_name][$langcode][$delta]['value'] = $name;
|
|
|
}
|
|
|
+ dpm($form_state['values']);
|
|
|
}
|
|
|
}
|