summaryrefslogtreecommitdiff
path: root/modules/field_ui
diff options
context:
space:
mode:
Diffstat (limited to 'modules/field_ui')
-rw-r--r--modules/field_ui/field_ui.admin.inc101
-rw-r--r--modules/field_ui/field_ui.module24
2 files changed, 71 insertions, 54 deletions
diff --git a/modules/field_ui/field_ui.admin.inc b/modules/field_ui/field_ui.admin.inc
index f48e03db5..4b68e1428 100644
--- a/modules/field_ui/field_ui.admin.inc
+++ b/modules/field_ui/field_ui.admin.inc
@@ -15,14 +15,16 @@ function field_ui_fields_list() {
$bundles = field_info_bundles();
$header = array(t('Field name'), t('Field type'), t('Used in'));
$rows = array();
- foreach ($instances as $bundle => $info) {
- foreach ($info as $field_name => $instance) {
- $field = field_info_field($field_name);
- $admin_path = _field_ui_bundle_admin_path($bundle);
- $rows[$field_name]['data'][0] = $field['locked'] ? t('@field_name (Locked)', array('@field_name' => $field_name)) : $field_name;
- $rows[$field_name]['data'][1] = t($field_types[$field['type']]['label']);
- $rows[$field_name]['data'][2][] = l($bundles[$bundle]['label'], $admin_path . '/fields');
- $rows[$field_name]['class'] = $field['locked'] ? array('menu-disabled') : array('');
+ foreach ($instances as $obj_type => $bundles) {
+ foreach ($bundles as $bundle => $info) {
+ foreach ($info as $field_name => $instance) {
+ $field = field_info_field($field_name);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
+ $rows[$field_name]['data'][0] = $field['locked'] ? t('@field_name (Locked)', array('@field_name' => $field_name)) : $field_name;
+ $rows[$field_name]['data'][1] = t($field_types[$field['type']]['label']);
+ $rows[$field_name]['data'][2][] = l($bundles[$bundle]['label'], $admin_path . '/fields');
+ $rows[$field_name]['class'] = $field['locked'] ? array('menu-disabled') : array('');
+ }
}
}
foreach ($rows as $field_name => $cell) {
@@ -42,8 +44,8 @@ function field_ui_fields_list() {
/**
* Helper function to display a message about inactive fields.
*/
-function field_ui_inactive_message($bundle) {
- $inactive_instances = field_ui_inactive_instances($bundle);
+function field_ui_inactive_message($obj_type, $bundle) {
+ $inactive_instances = field_ui_inactive_instances($obj_type, $bundle);
if (!empty($inactive_instances)) {
$field_types = field_info_field_types();
$widget_types = field_info_widget_types();
@@ -68,8 +70,8 @@ function field_ui_inactive_message($bundle) {
function field_ui_field_overview_form($form, &$form_state, $obj_type, $bundle) {
$bundle = field_extract_bundle($obj_type, $bundle);
- field_ui_inactive_message($bundle);
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ field_ui_inactive_message($obj_type, $bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
// When displaying the form, make sure the list of fields is up-to-date.
if (empty($form_state['post'])) {
@@ -77,7 +79,7 @@ function field_ui_field_overview_form($form, &$form_state, $obj_type, $bundle) {
}
// Gather bundle information.
- $instances = field_info_instances($bundle);
+ $instances = field_info_instances($obj_type, $bundle);
$field_types = field_info_field_types();
$widget_types = field_info_widget_types();
@@ -88,6 +90,7 @@ function field_ui_field_overview_form($form, &$form_state, $obj_type, $bundle) {
$form += array(
'#tree' => TRUE,
+ '#object_type' => $obj_type,
'#bundle' => $bundle,
'#fields' => array_keys($instances),
'#extra' => array_keys($extra),
@@ -223,7 +226,7 @@ function field_ui_field_overview_form($form, &$form_state, $obj_type, $bundle) {
}
// Additional row: add existing field.
- $existing_field_options = field_ui_existing_field_options($bundle);
+ $existing_field_options = field_ui_existing_field_options($obj_type, $bundle);
if ($existing_field_options && $widget_type_options) {
$weight++;
array_unshift($existing_field_options, t('- Select an existing field -'));
@@ -274,9 +277,9 @@ function template_preprocess_field_ui_field_overview_form(&$vars) {
drupal_add_js(drupal_get_path('module', 'field_ui') . '/field_ui.js');
// Add settings for the update selects behavior.
$js_fields = array();
- foreach (field_ui_existing_field_options($form['#bundle']) as $field_name => $fields) {
+ foreach (field_ui_existing_field_options($form['#object_type'], $form['#bundle']) as $field_name => $fields) {
$field = field_info_field($field_name);
- $instance = field_info_instance($field_name, $form['#bundle']);
+ $instance = field_info_instance($form['#object_type'], $field_name, $form['#bundle']);
$js_fields[$field_name] = array('label' => $instance['label'], 'type' => $field['type'], 'widget' => $instance['widget']['type']);
}
drupal_add_js(array('fieldWidgetTypes' => field_ui_widget_type_options(), 'fields' => $js_fields), 'setting');
@@ -444,14 +447,15 @@ function _field_ui_field_overview_form_validate_add_existing($form, &$form_state
*/
function field_ui_field_overview_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
+ $obj_type = $form['#object_type'];
$bundle = $form['#bundle'];
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
// Update field weights.
$extra = array();
foreach ($form_values as $key => $values) {
if (in_array($key, $form['#fields'])) {
- $instance = field_read_instance($key, $bundle);
+ $instance = field_read_instance($obj_type, $key, $bundle);
$instance['widget']['weight'] = $values['weight'];
foreach($instance['display'] as $build_mode => $display) {
$instance['display'][$build_mode]['weight'] = $values['weight'];
@@ -484,6 +488,7 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
);
$instance = array(
'field_name' => $field['field_name'],
+ 'object_type' => $obj_type,
'bundle' => $bundle,
'label' => $values['label'],
'widget' => array(
@@ -555,17 +560,17 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
function field_ui_display_overview_form($form, &$form_state, $obj_type, $bundle, $build_modes_selector = 'basic') {
$bundle = field_extract_bundle($obj_type, $bundle);
- field_ui_inactive_message($bundle);
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ field_ui_inactive_message($obj_type, $bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
// Gather type information.
- $entity = field_info_bundle_entity($bundle);
- $instances = field_info_instances($bundle);
+ $instances = field_info_instances($obj_type, $bundle);
$field_types = field_info_field_types();
- $build_modes = field_ui_build_modes_tabs($entity, $build_modes_selector);
+ $build_modes = field_ui_build_modes_tabs($obj_type, $build_modes_selector);
$form += array(
'#tree' => TRUE,
+ '#object_type' => $obj_type,
'#bundle' => $bundle,
'#fields' => array_keys($instances),
'#contexts' => $build_modes_selector,
@@ -621,7 +626,7 @@ function template_preprocess_field_ui_display_overview_form(&$vars) {
$form = &$vars['form'];
$contexts_selector = $form['#contexts'];
- $vars['contexts'] = field_ui_build_modes_tabs(field_info_bundle_entity($form['#bundle']), $contexts_selector);
+ $vars['contexts'] = field_ui_build_modes_tabs($form['#object_type'], $contexts_selector);
$order = _field_ui_overview_order($form, $form['#fields']);
if (empty($order)) {
@@ -657,7 +662,7 @@ function field_ui_display_overview_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
foreach ($form_values as $key => $values) {
if (in_array($key, $form['#fields'])) {
- $instance = field_info_instance($key, $form['#bundle']);
+ $instance = field_info_instance($form['#object_type'], $key, $form['#bundle']);
foreach ($instance['display'] as $build_mode => $display) {
if (isset($values[$build_mode])) {
$instance['display'][$build_mode] = array_merge($instance['display'][$build_mode], $values[$build_mode]);
@@ -757,16 +762,16 @@ function field_ui_formatter_options($field_type = NULL) {
/**
* Return an array of existing field to be added to a bundle.
*/
-function field_ui_existing_field_options($bundle) {
+function field_ui_existing_field_options($obj_type, $bundle) {
$options = array();
$field_types = field_info_field_types();
- foreach (field_info_instances() as $bundle_name => $instances) {
+ foreach (field_info_instances($obj_type) as $bundle_name => $instances) {
// No need to look in the current bundle.
if ($bundle_name != $bundle) {
foreach ($instances as $instance) {
$field = field_info_field($instance['field_name']);
// Don't show locked fields or fields already in the current bundle.
- if (empty($field['locked']) && !field_info_instance($field['field_name'], $bundle)) {
+ if (empty($field['locked']) && !field_info_instance($obj_type, $field['field_name'], $bundle)) {
$text = t('@type: @field (@label)', array(
'@type' => $field_types[$field['type']]['label'],
'@label' => t($instance['label']), '@field' => $instance['field_name'],
@@ -847,6 +852,7 @@ function field_ui_field_settings_form($form, &$form_state, $obj_type, $bundle, $
'#markup' => t('%field has no field settings.', array('%field' => $instance['label'])),
);
}
+ $form['#object_type'] = $obj_type;
$form['#bundle'] = $bundle;
$form['submit'] = array('#type' => 'submit', '#value' => t('Save field settings'));
@@ -863,8 +869,9 @@ function field_ui_field_settings_form_submit($form, &$form_state) {
// Merge incoming form values into the existing field.
$field = field_info_field($field_values['field_name']);
+ $obj_type = $form['#object_type'];
$bundle = $form['#bundle'];
- $instance = field_info_instance($field['field_name'], $bundle);
+ $instance = field_info_instance($obj_type, $field['field_name'], $bundle);
// Update the field.
$field = array_merge($field, $field_values);
@@ -872,12 +879,12 @@ function field_ui_field_settings_form_submit($form, &$form_state) {
try {
field_update_field($field);
drupal_set_message(t('Updated field %label field settings.', array('%label' => $instance['label'])));
- $form_state['redirect'] = field_ui_next_destination($bundle);
+ $form_state['redirect'] = field_ui_next_destination($obj_type, $bundle);
}
catch (FieldException $e) {
drupal_set_message(t('Attempt to update field %label failed: %message.', array('%label' => $instance['label'], '%message' => $e->getMessage())), 'error');
// TODO: Where do we go from here?
- $form_state['redirect'] = field_ui_next_destination($bundle);
+ $form_state['redirect'] = field_ui_next_destination($obj_type, $bundle);
}
}
@@ -922,6 +929,7 @@ function field_ui_widget_type_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
$instance = $form['#instance'];
$bundle = $instance['bundle'];
+ $obj_type = $instance['object_type'];
// Set the right module information.
$widget_type = field_info_widget_types($form_values['widget_type']);
@@ -937,7 +945,7 @@ function field_ui_widget_type_form_submit($form, &$form_state) {
drupal_set_message(t('There was a problem changing the widget for field %label.', array('%label' => $instance['label'])));
}
- $form_state['redirect'] = field_ui_next_destination($bundle);
+ $form_state['redirect'] = field_ui_next_destination($obj_type, $bundle);
}
/**
@@ -946,8 +954,9 @@ function field_ui_widget_type_form_submit($form, &$form_state) {
function field_ui_field_delete_form($form, &$form_state, $obj_type, $bundle, $instance) {
$bundle = field_extract_bundle($obj_type, $bundle);
$field = field_info_field($instance['field_name']);
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
+ $form['object_type'] = array('#type' => 'value', '#value' => $obj_type);
$form['bundle'] = array('#type' => 'value', '#value' => $bundle);
$form['field_name'] = array('#type' => 'value', '#value' => $field['field_name']);
@@ -972,11 +981,13 @@ function field_ui_field_delete_form($form, &$form_state, $obj_type, $bundle, $in
*/
function field_ui_field_delete_form_submit($form, &$form_state) {
$form_values = $form_state['values'];
+ $field_name = $form_values['field_name'];
+ $bundle = $form_values['bundle'];
+ $obj_type = $form_values['object_type'];
$field = field_info_field($form_values['field_name']);
- $instance = field_info_instance($form_values['field_name'], $form_values['bundle']);
+ $instance = field_info_instance($obj_type, $field_name, $bundle);
$bundles = field_info_bundles();
- $bundle = $form_values['bundle'];
- $bundle_label = $bundles[$bundle]['label'];
+ $bundle_label = $bundles[$obj_type][$bundle]['label'];
if (!empty($bundle) && $field && !$field['locked'] && $form_values['confirm']) {
field_delete_instance($instance);
@@ -990,7 +1001,7 @@ function field_ui_field_delete_form_submit($form, &$form_state) {
drupal_set_message(t('There was a problem removing the %field from the %type content type.', array('%field' => $instance['label'], '%type' => $bundle_label)));
}
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
$form_state['redirect'] = field_ui_get_destinations(array($admin_path . '/fields'));
}
@@ -1021,8 +1032,8 @@ function field_ui_field_edit_form($form, &$form_state, $obj_type, $bundle, $inst
$form['instance'] = array(
'#tree' => TRUE,
'#type' => 'fieldset',
- '#title' => t('%type settings', array('%type' => $bundles[$bundle]['label'])),
- '#description' => t('These settings apply only to the %field field when used in the %type type.', array('%field' => $instance['label'], '%type' => $bundles[$bundle]['label'])),
+ '#title' => t('%type settings', array('%type' => $bundles[$obj_type][$bundle]['label'])),
+ '#description' => t('These settings apply only to the %field field when used in the %type type.', array('%field' => $instance['label'], '%type' => $bundles[$obj_type][$bundle]['label'])),
'#pre_render' => array('field_ui_field_edit_instance_pre_render'),
);
@@ -1031,6 +1042,10 @@ function field_ui_field_edit_form($form, &$form_state, $obj_type, $bundle, $inst
'#type' => 'value',
'#value' => $instance['field_name'],
);
+ $form['instance']['object_type'] = array(
+ '#type' => 'value',
+ '#value' => $obj_type,
+ );
$form['instance']['bundle'] = array(
'#type' => 'value',
'#value' => $bundle,
@@ -1293,13 +1308,13 @@ function field_ui_field_edit_form_submit($form, &$form_state) {
}
// Update the instance settings.
- $instance = field_info_instance($instance_values['field_name'], $instance_values['bundle']);
+ $instance = field_info_instance($instance_values['object_type'], $instance_values['field_name'], $instance_values['bundle']);
$instance = array_merge($instance, $instance_values);
field_update_instance($instance);
drupal_set_message(t('Saved %label configuration.', array('%label' => $instance['label'])));
- $form_state['redirect'] = field_ui_next_destination($instance['bundle']);
+ $form_state['redirect'] = field_ui_next_destination($instance['object_type'], $instance['bundle']);
}
/**
@@ -1317,13 +1332,13 @@ function field_ui_get_destinations($destinations) {
/**
* Return the next redirect path in a multipage sequence.
*/
-function field_ui_next_destination($bundle) {
+function field_ui_next_destination($obj_type, $bundle) {
$destinations = !empty($_REQUEST['destinations']) ? $_REQUEST['destinations'] : array();
if (!empty($destinations)) {
unset($_REQUEST['destinations']);
return field_ui_get_destinations($destinations);
}
- $admin_path = _field_ui_bundle_admin_path($bundle);
+ $admin_path = _field_ui_bundle_admin_path($obj_type, $bundle);
return $admin_path . '/fields';
}
diff --git a/modules/field_ui/field_ui.module b/modules/field_ui/field_ui.module
index 7fa03fcad..99dd8c057 100644
--- a/modules/field_ui/field_ui.module
+++ b/modules/field_ui/field_ui.module
@@ -67,7 +67,7 @@ function field_ui_menu() {
$items["$path/fields/%field_ui_menu"] = array(
'title callback' => 'field_ui_menu_label',
'title arguments' => array($instance_position),
- 'load arguments' => array($bundle_arg),
+ 'load arguments' => array($obj_type, $bundle_arg),
'page callback' => 'drupal_get_form',
'page arguments' => array('field_ui_field_edit_form', $obj_type, $bundle_arg, $instance_position),
'type' => MENU_LOCAL_TASK,
@@ -75,7 +75,7 @@ function field_ui_menu() {
) + $access;
$items["$path/fields/%field_ui_menu/edit"] = array(
'title' => 'Edit instance settings',
- 'load arguments' => array($bundle_arg),
+ 'load arguments' => array($obj_type, $bundle_arg),
'page callback' => 'drupal_get_form',
'page arguments' => array('field_ui_field_edit_form', $obj_type, $bundle_arg, $instance_position),
'type' => MENU_DEFAULT_LOCAL_TASK,
@@ -83,7 +83,7 @@ function field_ui_menu() {
) + $access;
$items["$path/fields/%field_ui_menu/field-settings"] = array(
'title' => 'Edit field settings',
- 'load arguments' => array($bundle_arg),
+ 'load arguments' => array($obj_type, $bundle_arg),
'page callback' => 'drupal_get_form',
'page arguments' => array('field_ui_field_settings_form', $obj_type, $bundle_arg, $instance_position),
'type' => MENU_LOCAL_TASK,
@@ -91,7 +91,7 @@ function field_ui_menu() {
) + $access;
$items["$path/fields/%field_ui_menu/widget-type"] = array(
'title' => 'Change widget type',
- 'load arguments' => array($bundle_arg),
+ 'load arguments' => array($obj_type, $bundle_arg),
'page callback' => 'drupal_get_form',
'page arguments' => array('field_ui_widget_type_form', $obj_type, $bundle_arg, $instance_position),
'type' => MENU_LOCAL_TASK,
@@ -99,7 +99,7 @@ function field_ui_menu() {
) + $access;
$items["$path/fields/%field_ui_menu/delete"] = array(
'title' => 'Delete instance',
- 'load arguments' => array($bundle_arg),
+ 'load arguments' => array($obj_type, $bundle_arg),
'page callback' => 'drupal_get_form',
'page arguments' => array('field_ui_field_delete_form', $obj_type, $bundle_arg, $instance_position),
'type' => MENU_LOCAL_TASK,
@@ -134,8 +134,8 @@ function field_ui_menu() {
/**
* Menu loader; Load a field instance based on its name.
*/
-function field_ui_menu_load($field_name, $bundle_name) {
- if ($instance = field_info_instance($field_name, $bundle_name)) {
+function field_ui_menu_load($field_name, $obj_type, $bundle_name) {
+ if ($instance = field_info_instance($obj_type, $field_name, $bundle_name)) {
return $instance;
}
return FALSE;
@@ -270,8 +270,8 @@ function field_ui_field_attach_delete_bundle($bundle) {
/**
* Helper function to create the right administration path for a bundle.
*/
-function _field_ui_bundle_admin_path($bundle_name) {
- $bundles = field_info_bundles();
+function _field_ui_bundle_admin_path($obj_type, $bundle_name) {
+ $bundles = field_info_bundles($obj_type);
$bundle_info = $bundles[$bundle_name];
return isset($bundle_info['admin']['real path']) ? $bundle_info['admin']['real path'] : $bundle_info['admin']['path'];
}
@@ -279,7 +279,7 @@ function _field_ui_bundle_admin_path($bundle_name) {
/**
* Helper function to identify inactive fields within a bundle.
*/
-function field_ui_inactive_instances($bundle_name = NULL) {
+function field_ui_inactive_instances($obj_type, $bundle_name = NULL) {
if (!empty($bundle_name)) {
$inactive = array($bundle_name => array());
$params = array('bundle' => $bundle_name);
@@ -288,7 +288,9 @@ function field_ui_inactive_instances($bundle_name = NULL) {
$inactive = array();
$params = array();
}
- $active_instances = field_info_instances();
+ $params['object_type'] = $obj_type;
+
+ $active_instances = field_info_instances($obj_type);
$all_instances = field_read_instances($params, array('include_inactive' => TRUE));
foreach ($all_instances as $instance) {
if (!isset($active_instances[$instance['bundle']][$instance['field_name']])) {