taxrank__infraspecific_taxon_widget.inc

File

tripal_chado/includes/TripalFields/taxrank__infraspecific_taxon/taxrank__infraspecific_taxon_widget.inc
View source
  1. <?php
  2. class taxrank__infraspecific_taxon_widget extends ChadoFieldWidget {
  3. // The default lable for this field.
  4. public static $default_label = 'Infraspecific Taxon';
  5. // The list of field types for which this formatter is appropriate.
  6. public static $field_types = array('taxrank__infraspecific_taxon');
  7. /**
  8. *
  9. * @see TripalFieldWidget::form()
  10. */
  11. public function form(&$widget, &$form, &$form_state, $langcode, $items, $delta, $element) {
  12. parent::form($widget, $form, $form_state, $langcode, $items, $delta, $element);
  13. $settings = $this->field['settings'];
  14. $field_name = $this->field['field_name'];
  15. $field_type = $this->field['type'];
  16. $field_table = $this->instance['settings']['chado_table'];
  17. $field_column = $this->instance['settings']['chado_column'];
  18. $infra_name = '';
  19. $type_id = 0;
  20. if (count($items) > 0) {
  21. $type_id = array_key_exists('chado-organism__type_id', $items[0]) ? $items[0]['chado-organism__type_id'] : $type_id;
  22. $infra_name = array_key_exists('chado-organism__infraspecific_name', $items[0]) ? $items[0]['chado-organism__infraspecific_name'] : $infra_name;
  23. }
  24. if (array_key_exists('values', $form_state) and
  25. array_key_exists($field_name, $form_state['values'])) {
  26. $type_id = $form_state['values'][$field_name][$langcode][$delta]['infraname']['specific_epithet'];
  27. $infra_name = $form_state['values'][$field_name][$langcode][$delta]['infraname']['infraspecific_epithet'];
  28. }
  29. $widget['value'] = array(
  30. '#type' => 'value',
  31. '#value' => array_key_exists($delta, $items) ? $items[$delta]['value'] : '',
  32. );
  33. $widget['chado-organism__type_id'] = array(
  34. '#type' => 'value',
  35. '#value' => $type_id,
  36. );
  37. $widget['chado-organism__infraspecific_name'] = array(
  38. '#type' => 'value',
  39. '#value' => $infra_name,
  40. );
  41. $cv = chado_get_cv(array('name' => 'taxonomic_rank'));
  42. $terms = chado_get_cvterm_select_options($cv->cv_id);
  43. // Unfortunately the taxonomic_rank vocabulary is not properly organized
  44. // such that we only include terms below 'species'. Therefore we will
  45. // just list them here and hope we haven't missed one.
  46. $valid_terms = array('cultivar', 'subspecies', 'varietas', 'subvariety', 'forma', 'subforma');
  47. $options = array();
  48. $options[] = '--Select a rank--';
  49. foreach ($terms as $cvterm_id => $name) {
  50. if (in_array($name, $valid_terms)) {
  51. $options[$cvterm_id] = $name;
  52. }
  53. }
  54. $widget['infraname'] = array(
  55. '#type' => 'fieldset',
  56. '#title' => $element['#title'],
  57. '#collapsible' => FALSE,
  58. '#collapsed' => FALSE,
  59. '#description' => $element['#description']
  60. );
  61. $widget['infraname']['specific_epithet'] = array(
  62. '#type' => 'select',
  63. '#title' => 'Specific Epithet',
  64. '#description' => 'The rank below species. This field may be left blank if not appropriate.',
  65. '#options' => $options,
  66. '#default_value' => $type_id,
  67. );
  68. $widget['infraname']['infraspecific_epithet'] = array(
  69. '#type' => 'textfield',
  70. '#title' => 'Infraspecific Epithet',
  71. '#description' => 'The name below species.',
  72. '#default_value' => $infra_name,
  73. '#required' => $element['#required'],
  74. );
  75. }
  76. /**
  77. * @see TripalFieldWidget::validate()
  78. */
  79. public function validate($element, $form, &$form_state, $langcode, $delta) {
  80. $field_name = $this->field['field_name'];
  81. $field_table = $this->instance['settings']['chado_table'];
  82. $field_column = $this->instance['settings']['chado_column'];
  83. $type_id = $form_state['values'][$field_name]['und'][0]['infraname']['specific_epithet'];
  84. $infra_name = $form_state['values'][$field_name]['und'][0]['infraname']['infraspecific_epithet'];
  85. if ($infra_name and $type_id) {
  86. $form_state['values'][$field_name]['und'][0]['value'] = $infra_name;
  87. $form_state['values'][$field_name]['und'][0]['chado-organism__type_id'] = $type_id;
  88. $form_state['values'][$field_name]['und'][0]['chado-organism__infraspecific_name'] = $infra_name;
  89. }
  90. if ($infra_name and !$type_id) {
  91. $form_state['values'][$field_name]['und'][0]['value'] = $infra_name;
  92. $form_state['values'][$field_name]['und'][0]['chado-organism__type_id'] = '__NULL__';
  93. $form_state['values'][$field_name]['und'][0]['chado-organism__infraspecific_name'] = $infra_name;
  94. }
  95. else {
  96. $form_state['values'][$field_name]['und'][0]['chado-organism__type_id'] = '__NULL__';
  97. $form_state['values'][$field_name]['und'][0]['chado-organism__infraspecific_name'] = '__NULL__';
  98. }
  99. }
  100. }