public function sep__protocol_widget::form

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

Provides the form for editing of this field.

This function corresponds to the hook_field_widget_form() function of the Drupal Field API.

This form is diplayed when the user creates a new entity or edits an existing entity. If the field is attached to the entity then the form provided by this function will be displayed.

At a minimum, the form must have a 'value' element. For Tripal, the 'value' element of a field always corresponds to the value that is presented to the end-user either directly on the page (with formatting) or via web services, or some other mechanism. However, the 'value' is sometimes not enough for a field. For example, the Tripal Chado module maps fields to table columns and sometimes those columns are foreign keys therefore, the Tripal Chado modules does not just use the 'value' but adds additional elements to help link records via FKs. But even in this case the 'value' element must always be present in the return form and in such cases it's value should be set equal to that added in the 'load' function.

Parameters

$widget:

$form: The form structure where widgets are being attached to. This might be a full form structure, or a sub-element of a larger form.

$form_state: An associative array containing the current state of the form.

$langcode: The language associated with $items.

$items: Array of default values for this field.

$delta: The order of this item in the array of subelements (0, 1, 2, etc).

$element: A form element array containing basic properties for the widget:

  • #entity_type: The name of the entity the field is attached to.
  • #bundle: The name of the field bundle the field is contained in.
  • #field_name: The name of the field.
  • #language: The language the field is being edited in.
  • #field_parents: The 'parents' space for the field in the form. Most widgets can simply overlook this property. This identifies the location where the field values are placed within $form_state['values'], and is used to access processing information for the field through the field_form_get_state() and field_form_set_state() functions.
  • #columns: A list of field storage columns of the field.
  • #title: The sanitized element label for the field instance, ready for output.
  • #description: The sanitized element description for the field instance, ready for output.
  • #required: A Boolean indicating whether the element value is required; for required multiple value fields, only the first widget's values are required.
  • #delta: The order of this item in the array of subelements; see $delta above

Overrides TripalFieldWidget::form

File

tripal_chado/includes/TripalFields/sep__protocol/sep__protocol_widget.inc, line 73

Class

sep__protocol_widget
@class Purpose:

Code

public function form(&$widget, &$form, &$form_state, $langcode, $items, $delta, $element) {
  parent::form($widget, $form, $form_state, $langcode, $items, $delta, $element);


  $settings = $this->field['settings'];
  $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'];
  $linker_field = 'chado-' . $field_table . '__protocol_id';

  $protocols =[];
  //options are all protocols
  //It could be argued that options should only be protocols where protocol_type matches the bundle base table.

  $sql = "SELECT * FROM {protocol}";
  $results = chado_query($sql);
  foreach ($results as $protocol) {
    $protocols[$protocol->protocol_id] = $protocol->name;
  }

  $widget['value'] =[
  '#type' 'select'
    '#title' $element['#title']
    '#description' $element['#description']
    '#options' $protocols
    '#empty_option' '- Select a Protocol -'
    '#required' $element['#required']
    '#weight' isset($element['#weight']) ? $element['#weight'] : 0
    '#delta' $delta
    ];

}