1 menu.inc menu_rebuild()

Populates the database tables used by various menu functions.

This function will clear and populate the {menu_router} table, add entries to {menu_links} for new router items, and then remove stale items from {menu_links}.

Return value

TRUE if the menu was rebuilt, FALSE if another thread was rebuilding: in parallel and the current thread just waited for completion.

Related topics

File

core/includes/menu.inc, line 2895
API for the Backdrop menu system.

Code

function menu_rebuild() {
  if (!lock_acquire('menu_rebuild')) {
    // Wait for another request that is already doing this work.
    // We choose to block here since otherwise the router item may not
    // be available in menu_execute_active_handler() resulting in a 404.
    lock_wait('menu_rebuild');
    return FALSE;
  }

  $transaction = db_transaction();

  try {
    list($menu, $masks) = menu_router_build();
    _menu_router_save($menu, $masks);
    _menu_navigation_links_rebuild($menu);
    // Clear the menu, page and block caches.
    menu_cache_clear_all();
    _menu_clear_page_cache();
    // Indicate that the menu has been successfully rebuilt.
    state_del('menu_rebuild_needed');
  }
  catch (Exception $e) {
    $transaction->rollback();
    watchdog_exception('menu', $e);
  }

  lock_release('menu_rebuild');
  return TRUE;
}