public function sio__annotation_widget::form

3.x sio__annotation_widget.inc public sio__annotation_widget::form(&$widget, &$form, &$form_state, $langcode, $items, $delta, $element)

Overrides TripalFieldWidget::form

See also

TripalFieldWidget::form()

File

tripal_chado/includes/TripalFields/sio__annotation/sio__annotation_widget.inc, line 15

Class

sio__annotation_widget

Code

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'];
  $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'];

  // Get the FK that links to the base record.
  $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];

  $vocabulary = chado_get_semweb_term('cvterm', 'cv_id');
  $accession = chado_get_semweb_term('dbxref', 'accession');
  $definition = chado_get_semweb_term('cvterm', 'definition');
  if (array_key_exists('is_not', $schema['fields'])) {
    $negation = chado_get_semweb_term($field_table, 'is_not');
  }

  // Get the field defaults.
  $record_id = '';
  $fk_value = '';
  $cvterm_id = '';
  $pub_id = '';
  $is_not = FALSE;
  $cvterm_name = '';
  $cv_id = '';
  $cvterm = NULL;
  $pub_name = '';

  // If the field already has a value then it will come through the $items
  // array.  This happens when editing an existing record.
  if (array_key_exists($delta, $items)) {
    // Check for element values that correspond to fields in the Chado table.
    $record_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $field_table . '__' . $pkey, $record_id);
    $fk_value = tripal_get_field_item_keyval($items, $delta, 'chado-' . $field_table . '__' . $fkey_lcolumn, $fk_value);
    $cvterm_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $field_table . '__cvterm_id', $cvterm_id);

    if (array_key_exists('pub_id', $schema['fields'])) {
      $pub_name = tripal_get_field_item_keyval($items, $delta, 'pub', $pub_name);
      $pub_id = tripal_get_field_item_keyval($items, $delta, 'chado-' . $field_table . '__pub_id', $pub_id);
    }
    if (array_key_exists('is_not', $schema['fields'])) {
      $is_not = tripal_get_field_item_keyval($items, $delta, 'chado-' . $field_table . '__is_not', $is_not);
    }

    if ($cvterm_id) {
      $cvterm = chado_generate_var('cvterm', array('cvterm_id' => $cvterm_id));
      $cv_id = $cvterm->cv_id->cv_id;
      $cvterm_name = $cvterm->name;
    }
  }

  // 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-' . $field_table . '__' . $pkey];
    $fk_value = $form_state['values'][$field_name]['und'][$delta]['chado-' . $field_table . '__' . $fkey_lcolumn];
    $cvterm_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $field_table . '__cvterm_id'];

    if (array_key_exists('pub_id', $schema['fields'])) {
      $pub_name = $form_state['values'][$field_name]['und'][$delta]['pub'];
      $pub_id = $form_state['values'][$field_name]['und'][$delta]['chado-' . $field_table . '__pub_id'];
    }
    if (array_key_exists('is_not', $schema['fields'])) {
      $is_not = $form_state['values'][$field_name]['und'][$delta]['chado-' . $field_table . '__is_not'];
    }
    $cvterm_name = $form_state['values'][$field_name]['und'][$delta]['cvterm_name'];
    $cv_id = $form_state['values'][$field_name]['und'][$delta]['cv_id'];
    $cvterm = chado_generate_var('cvterm', array(
      'cv_id' => $cv_id,
      'name' => $cvterm_name,
    ));
    if (!$cvterm) {
      $cvterm_name = '';
    }
  }

  $widget['#prefix'] = "<span id='$field_name-sio--annotation-$delta'>";
  $widget['#suffix'] = "</span>";

  // The value field isn't really used but it's needed because if
  // it doesn't have a value the element won't be considered for
  // insert/update.
  $widget['value'] = array(
    '#type' => 'value',
    '#value' => $cvterm_id,
  );

  $widget['chado-' . $field_table . '__' . $pkey] = array(
    '#type' => 'value',
    '#default_value' => $record_id,
  );
  $widget['chado-' . $field_table . '__cvterm_id'] = array(
    '#type' => 'value',
    '#default_value' => $cvterm_id,
  );
  $widget['chado-' . $field_table . '__' . $fkey_lcolumn] = array(
    '#type' => 'value',
    '#default_value' => $fk_value,
  );

  $cvs = chado_get_cv_select_options();
  $widget['cv_id'] = array(
    '#type' => 'select',
    '#title' => t('Vocabulary'),
    '#options' => $cvs,
    '#default_value' => $cv_id,
    '#required' => $element['#required'],
    '#attributes' => array('style' => 'width: 200px;'),
    '#ajax' => array(
      'callback' => "sio__annotation_widget_form_ajax_callback",
      'wrapper' => "$field_name-sio--annotation-$delta",
      'effect' => 'fade',
      'method' => 'replace'
    ),
  );
  $cv_schema = chado_get_schema('cvterm');
  $widget['cvterm_name'] = array(
    '#type' => 'textfield',
    '#title' => t('Term Name'),
    '#default_value' => $cvterm_name,
    '#maxlength' => array_key_exists('length', $cv_schema['fields']['name']) ? $cv_schema['fields']['name']['length'] : 255,
    '#autocomplete_path' => 'admin/tripal/storage/chado/auto_name/cvterm/' . $cv_id,
    '#disabled' => $cv_id ? FALSE : TRUE,
  );

  if (array_key_exists('pub_id', $schema['fields'])) {
    $widget['pub'] = array(
      '#type' => 'textfield',
      '#title' => t('Publication'),
      '#default_value' => $pub_name,
      '#autocomplete_path' => 'admin/tripal/storage/chado/auto_name/pub',
      '#maxlength' => 100000,
      '#disabled' => $cv_id ? FALSE : TRUE,
    );
    $widget['chado-' . $field_table . '__pub_id'] = array(
      '#type' => 'value',
      '#default_value' => $pub_id ? $pub_id : '',
    );
  }

  if (array_key_exists('is_not', $schema['fields'])) {
    $widget['chado-' . $field_table . '__is_not'] = array(
      '#type' => 'checkbox',
      '#title' => t('Negate this term (NOT)'),
      '#default_value' => $is_not,
      '#required' => $element['#required'],
      '#disabled' => $cv_id ? FALSE : TRUE,
    );
  }
  if (array_key_exists('rank', $schema['fields'])) {
    $widget['chado-' . $field_table . '__rank'] = array(
      '#type' => 'value',
      '#default_value' => $delta,
    );
  }
}