123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?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_id
- * The bundle name.
- *
- */
- function tripal_add_bundle_field($field_name, $field_info, $entity_type_name, $bundle_id) {
- $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_id, $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_id,
- );
- field_create_instance($field_instance);
- }
|