function _menu_router_save

Saves data from menu_router_build() to the router table.

Related topics

1 call to _menu_router_save()
menu_router_rebuild in drupal/core/includes/menu.inc
Populates the database tables used by various menu functions.

File

drupal/core/includes/menu.inc, line 3733
API for the Drupal menu system.

Code

function _menu_router_save($menu, $masks) {

  // Delete the existing router since we have some data to replace it.
  db_truncate('menu_router')
    ->execute();

  // Prepare insert object.
  $insert = db_insert('menu_router')
    ->fields(array(
    'path',
    'load_functions',
    'to_arg_functions',
    'access_callback',
    'access_arguments',
    'page_callback',
    'page_arguments',
    'fit',
    'number_parts',
    'context',
    'tab_parent',
    'tab_root',
    'title',
    'title_callback',
    'title_arguments',
    'theme_callback',
    'theme_arguments',
    'type',
    'description',
    'description_callback',
    'description_arguments',
    'position',
    'weight',
    'include_file',
  ));
  $num_records = 0;
  foreach ($menu as $path => $item) {

    // Fill in insert object values.
    $insert
      ->values(array(
      'path' => $item['path'],
      'load_functions' => $item['load_functions'],
      'to_arg_functions' => $item['to_arg_functions'],
      'access_callback' => $item['access callback'],
      'access_arguments' => serialize($item['access arguments']),
      'page_callback' => $item['page callback'],
      'page_arguments' => serialize($item['page arguments']),
      'fit' => $item['_fit'],
      'number_parts' => $item['_number_parts'],
      'context' => $item['context'],
      'tab_parent' => $item['tab_parent'],
      'tab_root' => $item['tab_root'],
      'title' => $item['title'],
      'title_callback' => $item['title callback'],
      'title_arguments' => $item['title arguments'] ? serialize($item['title arguments']) : '',
      'theme_callback' => $item['theme callback'],
      'theme_arguments' => serialize($item['theme arguments']),
      'type' => $item['type'],
      'description' => $item['description'],
      'description_callback' => $item['description callback'],
      'description_arguments' => $item['description arguments'] ? serialize($item['description arguments']) : '',
      'position' => $item['position'],
      'weight' => $item['weight'],
      'include_file' => $item['include file'],
    ));

    // Execute in batches to avoid the memory overhead of all of those records
    // in the query object.
    if (++$num_records == 20) {
      $insert
        ->execute();
      $num_records = 0;
    }
  }

  // Insert any remaining records.
  $insert
    ->execute();

  // Store the masks.
  state()
    ->set('menu.masks', $masks);
  return $menu;
}