function field_ui_menu
field_ui_menu()
Implements hook_menu().
File
- modules/field_ui/field_ui.module, line 63
- Allows administrators to attach custom fields to fieldable types.
Code
function field_ui_menu() { $items['admin/reports/fields'] = array( 'title' => 'Field list', 'description' => 'Overview of fields on all entity types.', 'page callback' => 'field_ui_fields_list', 'access arguments' => array('administer content types'), 'type' => MENU_NORMAL_ITEM, 'file' => 'field_ui.admin.inc', ); // Ensure the following is not executed until field_bundles is working and // tables are updated. Needed to avoid errors on initial installation. if (defined('MAINTENANCE_MODE')) { return $items; } // Create tabs for all possible bundles. foreach (entity_get_info() as $entity_type => $entity_info) { if ($entity_info['fieldable']) { foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) { if (isset($bundle_info['admin'])) { // Extract path information from the bundle. $path = $bundle_info['admin']['path']; // Different bundles can appear on the same path (e.g. %node_type and // %comment_node_type). To allow field_ui_menu_load() to extract the // actual bundle object from the translated menu router path // arguments, we need to identify the argument position of the bundle // name string ('bundle argument') and pass that position to the menu // loader. The position needs to be casted into a string; otherwise it // would be replaced with the bundle name string. if (isset($bundle_info['admin']['bundle argument'])) { $bundle_arg = $bundle_info['admin']['bundle argument']; $bundle_pos = (string) $bundle_arg; } else { $bundle_arg = $bundle_name; $bundle_pos = '0'; } // This is the position of the %field_ui_menu placeholder in the // items below. $field_position = count(explode('/', $path)) + 1; // Extract access information, providing defaults. $access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array('access callback', 'access arguments'))); $access += array( 'access callback' => 'user_access', 'access arguments' => array('administer fields'), ); // Add the "administer fields" permission on top of the access // restriction because the field UI should only be accessible to // trusted users. if ($access['access callback'] != 'user_access' || $access['access arguments'] != array('administer fields')) { $access = array( 'access callback' => 'field_ui_admin_access', 'access arguments' => array($access['access callback'], $access['access arguments']), ); } $items["$path/fields"] = array( 'title' => 'Manage fields', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_field_overview_form', $entity_type, $bundle_arg), 'type' => MENU_LOCAL_TASK, 'weight' => 1, 'file' => 'field_ui.admin.inc', ) + $access; $items["$path/fields/%field_ui_menu"] = array( 'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'), 'title callback' => 'field_ui_menu_title', 'title arguments' => array($field_position), 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_field_edit_form', $field_position), 'file' => 'field_ui.admin.inc', ) + $access; $items["$path/fields/%field_ui_menu/edit"] = array( 'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'), 'title' => 'Edit', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_field_edit_form', $field_position), 'type' => MENU_DEFAULT_LOCAL_TASK, 'file' => 'field_ui.admin.inc', ) + $access; $items["$path/fields/%field_ui_menu/field-settings"] = array( 'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'), 'title' => 'Field settings', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_field_settings_form', $field_position), 'type' => MENU_LOCAL_TASK, 'file' => 'field_ui.admin.inc', ) + $access; $items["$path/fields/%field_ui_menu/widget-type"] = array( 'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'), 'title' => 'Widget type', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_widget_type_form', $field_position), 'type' => MENU_LOCAL_TASK, 'file' => 'field_ui.admin.inc', ) + $access; $items["$path/fields/%field_ui_menu/delete"] = array( 'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'), 'title' => 'Delete', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_field_delete_form', $field_position), 'type' => MENU_LOCAL_TASK, 'weight' => 10, 'file' => 'field_ui.admin.inc', ) + $access; // 'Manage display' tab. $items["$path/display"] = array( 'title' => 'Manage display', 'page callback' => 'drupal_get_form', 'page arguments' => array('field_ui_display_overview_form', $entity_type, $bundle_arg, 'default'), 'type' => MENU_LOCAL_TASK, 'weight' => 2, 'file' => 'field_ui.admin.inc', ) + $access; // View modes secondary tabs. // The same base $path for the menu item (with a placeholder) can be // used for all bundles of a given entity type; but depending on // administrator settings, each bundle has a different set of view // modes available for customisation. So we define menu items for all // view modes, and use an access callback to determine which ones are // actually visible for a given bundle. $weight = 0; $view_modes = array('default' => array('label' => t('Default'))) + $entity_info['view modes']; foreach ($view_modes as $view_mode => $view_mode_info) { $items["$path/display/$view_mode"] = array( 'title' => $view_mode_info['label'], 'page arguments' => array('field_ui_display_overview_form', $entity_type, $bundle_arg, $view_mode), // The access callback needs to check both the current 'custom // display' setting for the view mode, and the overall access // rules for the bundle admin pages. 'access callback' => '_field_ui_view_mode_menu_access', 'access arguments' => array_merge(array($entity_type, $bundle_arg, $view_mode, $access['access callback']), $access['access arguments']), 'type' => ($view_mode == 'default' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK), 'weight' => ($view_mode == 'default' ? -10 : $weight++), 'file' => 'field_ui.admin.inc', ); } } } } } return $items; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/modules!field_ui!field_ui.module/function/field_ui_menu/7.x