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}.
TRUE if the menu was rebuilt, FALSE if another thread was rebuilding in parallel and the current thread just waited for completion.
function menu_router_rebuild() {
if (!lock()
->acquire(__FUNCTION__)) {
// Wait for another request that is already doing this work.
// We choose to block here since otherwise the router item may not
// be available during routing resulting in a 404.
lock()
->wait(__FUNCTION__);
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()
->delete('menu_rebuild_needed');
} catch (Exception $e) {
$transaction
->rollback();
watchdog_exception('menu', $e);
}
lock()
->release(__FUNCTION__);
return TRUE;
}