View source
<?php
function casetracker_basic_fields_definitions($entity_type, $bundle, $field_names = array()) {
$fields = array();
$fields['field_casetracker_description'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_description',
'type' => 'text_long',
'entity_types' => array(
'casetracker_case',
'casetracker_project',
),
'translatable' => FALSE,
'locked' => FALSE,
'module' => 'text',
'settings' => array(),
'cardinality' => 1,
),
'field_instance' => array(
'field_name' => 'field_casetracker_description',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Description'),
'required' => FALSE,
'settings' => array(
'text_processing' => '1',
'user_register_form' => FALSE,
),
'widget' => array(
'weight' => -20,
'type' => 'text_textarea',
'module' => 'text',
'active' => 1,
'settings' => array(
'rows' => 5,
),
),
'display' => array(
'default' => array(
'label' => 'above',
'type' => 'text_default',
'settings' => array(),
'module' => 'text',
'weight' => 2,
),
),
),
);
$fields['field_casetracker_project_ref'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_project_ref',
'type' => 'entityreference',
'entity_types' => array(),
'translatable' => FALSE,
'locked' => FALSE,
'settings' => array(
'target_type' => 'casetracker_project',
'handler' => 'base',
'handler_submit' => 'Change handler',
'handler_settings' => array(
'target_bundles' => array(),
),
),
'cardinality' => 1,
),
'field_instance' => array(
'field_name' => 'field_casetracker_project_ref',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Project'),
'required' => TRUE,
'settings' => array(
'user_register_form' => FALSE,
),
'widget' => array(
'weight' => 20,
'type' => 'entityreference_autocomplete',
'module' => 'entityreference',
'active' => TRUE,
'settings' => array(
'match_operator' => 'CONTAINS',
'size' => 60,
'path' => '',
),
),
'display' => array(
'default' => array(
'label' => 'above',
'type' => 'entityreference_label',
'module' => 'entityreference',
'weight' => 3,
'settings' => array(
'link' => '',
),
),
),
),
);
$fields['field_casetracker_assigned_to'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_assigned_to',
'type' => 'entityreference',
'entity_types' => array(
'casetracker_case',
),
'translatable' => TRUE,
'locked' => FALSE,
'active' => TRUE,
'cardinality' => '1',
'deleted' => '0',
'foreign keys' => array(
'node' => array(
'columns' => array(
'target_id' => 'uid',
),
'table' => 'users',
),
),
'indexes' => array(
'target_id' => array(
0 => 'target_id',
),
),
'module' => 'casetracker',
'settings' => array(
'handler' => 'base',
'handler_settings' => array(
'behaviors' => array(
'views-select-list' => array(
'status' => 0,
),
),
'sort' => array(
'direction' => 'ASC',
'field' => 'property',
'property' => 'name',
'type' => 'property',
),
'target_bundles' => array(),
),
'handler_submit' => 'Change handler',
'target_type' => 'user',
),
),
'field_instance' => array(
'field_name' => 'field_casetracker_assigned_to',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Assign to'),
'required' => FALSE,
'widget' => array(
'weight' => 6,
),
'display' => array(
'default' => array(
'label' => 'hidden',
'type' => 'hidden',
),
),
'foreign keys' => array(
'node' => array(
'columns' => array(
'target_id' => 'nid',
),
'table' => 'node',
),
),
'indexes' => array(
'target_id' => array(
0 => 'target_id',
),
),
'locked' => '0',
'module' => 'entityreference',
'settings' => array(
'handler' => 'base',
'handler_settings' => array(
'behaviors' => array(
'views-select-list' => array(
'status' => 0,
),
),
'sort' => array(
'direction' => 'ASC',
'field' => 'property',
'property' => 'name',
'type' => 'property',
),
'target_bundles' => array(),
),
'handler_submit' => 'Change handler',
'target_type' => 'user',
),
'translatable' => '0',
'type' => 'entityreference',
),
);
$fields['field_casetracker_case_status'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_case_status',
'type' => 'list_text',
'entity_types' => array(
'casetracker_case',
),
'translatable' => TRUE,
'locked' => FALSE,
'module' => 'list',
'settings' => array(
'allowed_values' => array(
'open' => t('Open'),
'resolved' => t('Resolved'),
'deferred' => t('Deferred'),
'duplicate' => t('Duplicate'),
'closed' => t('Closed'),
),
),
'cardinality' => 1,
),
'field_instance' => array(
'field_name' => 'field_casetracker_case_status',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Status'),
'required' => TRUE,
'default_value_function' => 'casetracker_case_status_set_default_value',
'widget' => array(
'weight' => 4,
),
),
);
$fields['field_casetracker_case_priority'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_case_priority',
'type' => 'list_text',
'entity_types' => array(
'casetracker_case',
),
'translatable' => TRUE,
'locked' => FALSE,
'module' => 'list',
'settings' => array(
'allowed_values' => array(
'high' => t('High'),
'normal' => t('Normal'),
'low' => t('Low'),
),
),
'cardinality' => 1,
),
'field_instance' => array(
'field_name' => 'field_casetracker_case_priority',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Priority'),
'required' => TRUE,
'widget' => array(
'weight' => 5,
),
),
);
$fields['field_casetracker_case_due_date'] = array(
'field_definition' => array(
'field_name' => 'field_casetracker_case_due_date',
'type' => 'datetime',
'module' => 'date',
'active' => TRUE,
'entity_types' => array(
'casetracker_case',
),
'translatable' => FALSE,
'locked' => FALSE,
'settings' => array(
'repeat' => 0,
'granularity' => array(
'month' => 'month',
'day' => 'day',
'year' => 'year',
),
'tz_handling' => 'site',
'timezone_db' => 'UTC',
'todate' => '',
),
'cardinality' => 1,
),
'field_instance' => array(
'field_name' => 'field_casetracker_case_due_date',
'entity_type' => $entity_type,
'bundle' => $bundle,
'label' => t('Due Date'),
'required' => FALSE,
'settings' => array(
'default_value' => 'blank',
'default_value_code' => '',
'default_value2' => 'blank',
'default_value_code2' => '',
'user_register_form' => FALSE,
),
'widget' => array(
'weight' => 2,
'type' => 'date_popup',
'module' => 'date',
'active' => 1,
'settings' => array(
'input_format' => 'm/d/Y',
'input_format_custom' => '',
'year_range' => '-3:+3',
'increment' => '15',
'label_position' => 'above',
'text_parts' => array(),
'repeat_collapsed' => 0,
),
),
),
);
if (empty($field_names)) {
return $fields;
}
else {
$fields_to_retrieve = array();
foreach ($field_names as $field_name) {
$fields_to_retrieve[] = $fields[$field_name];
}
return $fields_to_retrieve;
}
}
function _casetracker_process_fields_for_new_bundle($entity_type, $bundle, $fields) {
$fields_definitions = array();
foreach ($fields as $field) {
$fields_definitions[] = $field['field_definition'];
}
_casetracker_create_fields_if_unavailable($fields_definitions);
$fields_instances = array();
foreach ($fields as $field) {
$fields_instances[] = $field['field_instance'];
}
_casetracker_create_instances_if_unavailable($fields_instances, $entity_type, $bundle);
}
function _casetracker_create_fields_if_unavailable($fields) {
foreach ($fields as $field) {
$info = field_info_field($field['field_name']);
if (empty($info)) {
field_create_field($field);
}
}
}
function _casetracker_create_instances_if_unavailable($instances, $entity_type, $bundle) {
foreach ($instances as $instance) {
$info_instance = field_info_instance($entity_type, $instance['field_name'], $bundle);
if (empty($info_instance)) {
field_create_instance($instance);
}
}
}