diff options
Diffstat (limited to 'modules/field_ui')
-rw-r--r-- | modules/field_ui/field_ui.admin.inc | 101 | ||||
-rw-r--r-- | modules/field_ui/field_ui.module | 24 |
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']])) { |