You are here

function field_ui_admin_menu_map in Administration menu 7.3

Same name and namespace in other branches
  1. 8.3 admin_menu.map.inc \field_ui_admin_menu_map()

Implements hook_admin_menu_map() on behalf of Field UI module.

@todo Figure out how to fix the comment entity bundle mappings.

File

./admin_menu.map.inc, line 64
Implements hook_admin_menu_map() on behalf of core modules.

Code

function field_ui_admin_menu_map() {
  $map = array();
  foreach (entity_get_info() as $entity_type => $entity_info) {
    if (!$entity_info['fieldable']) {
      continue;
    }
    foreach ($entity_info['bundles'] as $bundle => $bundle_info) {

      // @see field_ui_menu()
      if (!isset($bundle_info['admin'])) {
        continue;
      }

      // Check access to this bundle.
      $bundle_info['admin'] += array(
        'access callback' => 'user_access',
        'access arguments' => array(
          'administer site configuration',
        ),
      );
      $access_arguments = $bundle_info['admin']['access arguments'];
      if (isset($bundle_info['admin']['real path'])) {
        $menu_item = menu_get_item($bundle_info['admin']['real path']);
        if (isset($menu_item['map'])) {
          $access_arguments = menu_unserialize(serialize($access_arguments), $menu_item['map']);
        }
      }
      if (!call_user_func_array($bundle_info['admin']['access callback'], $access_arguments)) {
        continue;
      }
      if ($fields = field_info_instances($entity_type, $bundle)) {
        $path = $bundle_info['admin']['path'];
        $argument = array();
        if (isset($bundle_info['admin']['bundle argument'])) {
          $bundle_arg = arg($bundle_info['admin']['bundle argument'], $path);
          $argument[$bundle_arg] = array(
            $bundle,
          );
        }
        $argument['%field_ui_menu'] = array_keys($fields);
        if (!isset($map["{$path}/fields/%field_ui_menu"])) {
          $map["{$path}/fields/%field_ui_menu"] = array(
            'parent' => "{$path}/fields",
            'arguments' => array(),
          );
        }
        $map["{$path}/fields/%field_ui_menu"]['arguments'][] = $argument;
      }
    }
  }
  return $map;
}