<?php /** * Adds a field to an Entity bundle. * * @param $field_name * The name of the field. * @param $field_info * An associative array containing the field information. The following * key/value pairs are supported: * 'field_type' : a valid field type. May be any of the Drupal default * fields, one created by the tripal_fields module or another custom module. * 'widget_type' : a valid widget type. May be any of the Drupal default * fields, one created by the tripal_fields module or another custom module. * 'field_settings' : an array of settings that are appropriate for the * selected field type. * 'widget_settings' : an array of settings that are appropriate for the * selected widget type. * 'description' : a default description for this field. * 'label' : a label used as a header for this field. * 'is_required' : indicates if the field is required in the edit form. * 'cardinality' : indicates the number of values this field can support. * the default is 1 (meaning only one value). Use a value of * FIELD_CARDINALITY_UNLIMITED for unlimited number of values. * @param $entity_type_name * The entity type name. * @param $bundle_name * The bundle name. * */ function tripal_add_bundle_field($field_name, $field_info, $entity_type_name, $bundle_name) { $field = field_info_field($field_name); // If the field exists and is attached to this bundle then just return, // there is nothing left to do. if ($field and array_key_exists('bundles', $field) and array_key_exists($entity_type_name, $field['bundles']) and in_array($bundle_name, $field['bundles'][$entity_type_name])) { return; } // Allow other modules to alter the field information array. drupal_alter('chado_field', $field_info); $cardinality = 1; if (array_key_exists('cardinality', $field_info) and is_numeric($field_info['cardinality'])) { $cardinality = $field_info['cardinality']; } // If the field doesn't exist then create it. if (!$field) { $field = array( 'field_name' => $field_name, 'type' => $field_info['field_type'], 'cardinality' => $cardinality, 'locked' => FALSE, 'storage' => array( 'type' => 'field_chado_storage' ), 'settings' => $field_info['field_settings'], ); field_create_field($field); } // Attach the field to the bundle. $field_instance = array( 'field_name' => $field_name, 'label' => $field_info['label'], 'description' => $field_info['description'], 'widget' => array( 'type' => $field_info['widget_type'], 'settings' => $field_info['widget_settings'], ), 'entity_type' => $entity_type_name, 'required' => $field_info['is_required'], 'settings' => $field_info['field_settings'], 'bundle' => $bundle_name, ); field_create_instance($field_instance); }