|
@@ -1,7 +1,341 @@
|
|
|
<?php
|
|
|
|
|
|
+require_once "api/tripal_fields.api.inc";
|
|
|
require_once "includes/tripal_fields.field_storage.inc";
|
|
|
-require_once "includes/tripal_fields.fields.inc";
|
|
|
+
|
|
|
+/**
|
|
|
+ * Implements hook_field_info().
|
|
|
+ */
|
|
|
+function tripal_fields_field_info() {
|
|
|
+ $fields = array(
|
|
|
+ 'organism_id' => array(
|
|
|
+ 'label' => t('Organism'),
|
|
|
+ 'description' => t('A field for specifying an organism.'),
|
|
|
+ 'default_widget' => 'tripal_fields_organism_select_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_organism_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ 'dbxref_id' => array(
|
|
|
+ 'label' => t('Cross-reference'),
|
|
|
+ 'description' => t('This record can be cross-referenced with a record in another online database. This field is intended for the most prominent reference. At a minimum, the database and accession must be provided.'),
|
|
|
+ 'default_widget' => 'tripal_fields_primary_dbxref_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_primary_dbxref_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ 'residues' => array(
|
|
|
+ 'label' => t('Residues'),
|
|
|
+ 'description' => t('A field for managing nucleotide and protein residues.'),
|
|
|
+ 'default_widget' => 'tripal_fields_residue_textarea_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_residues_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ 'md5checksum' => array(
|
|
|
+ 'label' => t('MD5 checksum'),
|
|
|
+ 'description' => t('A field for generating MD5 checksum for a sequence.'),
|
|
|
+ 'default_widget' => 'tripal_fields_md5checksum_checkbox_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_md5checksum_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ 'seqlen' => array(
|
|
|
+ 'label' => t('Sequence length'),
|
|
|
+ 'description' => t('A field for calculating the length of a sequence.'),
|
|
|
+ 'default_widget' => 'tripal_fields_seqlen_hidden_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_seqlen_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ // The field provides a widget for adding new properties
|
|
|
+ // to an entity that is connected to a base table that has a prop table
|
|
|
+ // in Chado.
|
|
|
+ 'kvproperty_adder' => array(
|
|
|
+ 'label' => t('Add a Property Type'),
|
|
|
+ 'description' => t('This record may have any number of properties. Use this field to first add the type.'),
|
|
|
+ 'default_widget' => 'tripal_fields_kvproperty_adder_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_kvproperty_adder_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ // The field provides form elements for adding a property to an entity
|
|
|
+ // that in turn gets stored in a prop table of Chado (e.g. featureprop,
|
|
|
+ // stockprop, etc).
|
|
|
+ 'kvproperty' => array(
|
|
|
+ 'label' => t('Add a Property'),
|
|
|
+ 'description' => t('Add details about this property.'),
|
|
|
+ 'default_widget' => 'tripal_fields_kvproperty_widget',
|
|
|
+ 'default_formatter' => 'tripal_fields_kvproperty_formatter',
|
|
|
+ 'settings' => array(),
|
|
|
+ 'storage' => array(
|
|
|
+ 'type' => 'field_chado_storage',
|
|
|
+ 'module' => 'tripal_fields',
|
|
|
+ 'active' => TRUE
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ return $fields;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Implements hook_field_widget_info().
|
|
|
+ */
|
|
|
+function tripal_fields_field_widget_info() {
|
|
|
+ return array(
|
|
|
+ 'tripal_fields_organism_select_widget' => array(
|
|
|
+ 'label' => t('Organism Select'),
|
|
|
+ 'field types' => array('organism_id')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_primary_dbxref_widget' => array(
|
|
|
+ 'label' => t('Cross-reference'),
|
|
|
+ 'field types' => array('dbxref_id'),
|
|
|
+ 'description' => t('This record can be cross-referenced with a record in another online database. This field is intended for the most prominent reference. At a minimum, the database and accession must be provided.'),
|
|
|
+ ),
|
|
|
+ 'tripal_fields_md5checksum_checkbox_widget' => array(
|
|
|
+ 'label' => t('MD5 Checksum Checkbox'),
|
|
|
+ 'field types' => array('md5checksum'),
|
|
|
+ ),
|
|
|
+ 'tripal_fields_residues_textarea_widget' => array(
|
|
|
+ 'label' => t('Residues'),
|
|
|
+ 'field types' => array('residues'),
|
|
|
+ ),
|
|
|
+ 'tripal_fields_seqlen_hidden_widget' => array(
|
|
|
+ 'label' => t('Sequence Length'),
|
|
|
+ 'field types' => array('seqlen'),
|
|
|
+ ),
|
|
|
+ 'tripal_fields_kvproperty_adder_widget' => array(
|
|
|
+ 'label' => t('Add a Property'),
|
|
|
+ 'field types' => array('kvproperty_adder'),
|
|
|
+ ),
|
|
|
+ 'tripal_fields_kvproperty_widget' => array(
|
|
|
+ 'label' => t('Property'),
|
|
|
+ 'field types' => array('kvproperty'),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+}
|
|
|
+/**
|
|
|
+ * Implements hook_field_formatter_info().
|
|
|
+ */
|
|
|
+function tripal_fields_field_formatter_info() {
|
|
|
+ return array(
|
|
|
+ 'tripal_fields_organism_formatter' => array(
|
|
|
+ 'label' => t('Organism'),
|
|
|
+ 'field types' => array('organism_id')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_primary_dbxref_formatter' => array(
|
|
|
+ 'label' => t('Cross-reference'),
|
|
|
+ 'field types' => array('dbxref_id')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_md5checksum_formatter' => array(
|
|
|
+ 'label' => t('MD5 checksum'),
|
|
|
+ 'field types' => array('md5checksum')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_residues_formatter' => array(
|
|
|
+ 'label' => t('Residues'),
|
|
|
+ 'field types' => array('residues')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_seqlen_formatter' => array(
|
|
|
+ 'label' => t('Sequence length'),
|
|
|
+ 'field types' => array('seqlen')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_kvproperty_adder_formatter' => array(
|
|
|
+ 'label' => t('Add a Property'),
|
|
|
+ 'field types' => array('kvproperty_adder')
|
|
|
+ ),
|
|
|
+ 'tripal_fields_kvproperty_formatter' => array(
|
|
|
+ 'label' => t('Property'),
|
|
|
+ 'field types' => array('kvproperty')
|
|
|
+ ),
|
|
|
+ );
|
|
|
+}
|
|
|
+/**
|
|
|
+ * Implements hook_field_formatter_view().
|
|
|
+ *
|
|
|
+ * Two formatters are implemented.
|
|
|
+ * - field_example_simple_text just outputs markup indicating the color that
|
|
|
+ * was entered and uses an inline style to set the text color to that value.
|
|
|
+ * - field_example_color_background does the same but also changes the
|
|
|
+ * background color of div.region-content.
|
|
|
+ *
|
|
|
+ * @see field_example_field_formatter_info()
|
|
|
+ */
|
|
|
+function tripal_fields_field_formatter_view($entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display) {
|
|
|
+
|
|
|
+ $element = array();
|
|
|
+ switch ($display['type']) {
|
|
|
+
|
|
|
+ case 'tripal_fields_organism_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/organism_id');
|
|
|
+ tripal_fields_organism_select_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_primary_dbxref_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/primary_dbxref');
|
|
|
+ tripal_fields_primary_dbxref_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_md5checksum_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/md5checksum');
|
|
|
+ tripal_fields_md5checksum_checkbox_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_residues_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/residues');
|
|
|
+ tripal_fields_residues_textarea_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_seqlen_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/seqlen');
|
|
|
+ tripal_fields_seqlen_hidden_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_kvproperty_adder_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/kvproperty_adder');
|
|
|
+ tripal_fields_kvproperty_adder_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_kvproperty_formatter':
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/kvproperty');
|
|
|
+ tripal_fields_kvproperty_formatter($element, $entity_type, $entity, $field,
|
|
|
+ $instance, $langcode, $items, $display);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return $element;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Implements hook_field_widget_form().
|
|
|
+ */
|
|
|
+function tripal_fields_field_widget_form(&$form, &$form_state, $field,
|
|
|
+ $instance, $langcode, $items, $delta, $element) {
|
|
|
+
|
|
|
+ switch ($instance['widget']['type']) {
|
|
|
+ case 'tripal_fields_organism_select_widget':
|
|
|
+ // Make sure the include files get parsed now and for the form submits.
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/organism_id');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/organism_id');
|
|
|
+ // Update the widget with the new field.
|
|
|
+ $element['value'] = tripal_fields_organism_select_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_primary_dbxref_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/primary_dbxref');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/primary_dbxref');
|
|
|
+ $element['value'] = tripal_fields_primary_dbxref_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_md5checksum_checkbox_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/md5checksum');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/md5checksum');
|
|
|
+ $element['value'] = tripal_fields_md5checksum_checkbox_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_residues_textarea_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/residues');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/residues');
|
|
|
+ $element['value'] = tripal_fields_residues_textarea_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_seqlen_hidden_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/seqlen');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/seqlen');
|
|
|
+ $element['value'] = tripal_fields_seqlen_hidden_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_kvproperty_adder_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/kvproperty_adder');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/kvproperty_adder');
|
|
|
+ $element['value'] = tripal_fields_kvproperty_adder_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ case 'tripal_fields_kvproperty_widget':
|
|
|
+ form_load_include($form_state, 'inc', 'tripal_fields', 'includes/fields/kvproperty');
|
|
|
+ module_load_include('inc', 'tripal_fields', 'includes/fields/kvproperty');
|
|
|
+ $element['value'] = tripal_fields_kvproperty_widget($form,
|
|
|
+ $form_state, $field, $instance, $langcode, $items, $delta, $element);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return $element;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * Implements hook_field_is_empty().
|
|
|
+ */
|
|
|
+function tripal_fields_field_is_empty($item, $field) {
|
|
|
+ if (empty($item['value']) && (string) $item['value'] !== '0') {
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ return FALSE;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Returns the values of the field from the $form_state.
|
|
|
+ */
|
|
|
+function tripal_fields_get_field_form_values($field_name, $form_state, $child = NULL) {
|
|
|
+ $values = array();
|
|
|
+ if (!array_key_exists('values', $form_state)) {
|
|
|
+ return $values;
|
|
|
+ }
|
|
|
+ if (array_key_exists($field_name, $form_state['values'])) {
|
|
|
+ foreach ($form_state['values'][$field_name] as $langcode => $items) {
|
|
|
+ foreach ($items as $delta => $value) {
|
|
|
+ if ($child and array_key_exists($child, $value['value'][0]) and $value['value'][0][$child]) {
|
|
|
+ $values[] = $value['value'][0][$child];
|
|
|
+ }
|
|
|
+ else if (!$child and is_array($value) and $value['value']) {
|
|
|
+ $values[] = $value['value'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $values;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Returns the values of the field from the $form_state.
|
|
|
+ */
|
|
|
+function tripal_fields_set_field_form_values($field_name, &$form_state, $newvalue, $child = NULL) {
|
|
|
+ $values = array();
|
|
|
+ foreach ($form_state['values'][$field_name] as $langcode => $items) {
|
|
|
+ foreach ($items as $delta => $value) {
|
|
|
+ if ($child and array_key_exists($child, $value['value'][0]) and $value['value'][0][$child]) {
|
|
|
+ $form_state['values'][$field_name][$langcode][$delta]['value'][0][$child] = $newvalue;
|
|
|
+ }
|
|
|
+ else if (!$child) {
|
|
|
+ $form_state['values'][$field_name][$langcode][$delta]['value'] = $newvalue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $values;
|
|
|
+}
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -16,4 +350,3 @@ function tripal_fields_theme($existing, $type, $theme, $path) {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
-
|