public function index()
{
// Log action by user.
Audit::log(Auth::user()->id, trans('admin/menu-builder/menu-builder.audit-log.category'), trans('admin/menu-builder/menu-builder.audit-log.msg-index'));
// Set page title and description.
$page_title = trans('admin/menu-builder/menu-builder.page.index.title');
$page_description = trans('admin/menu-builder/menu-builder.page.index.description');
// Load all menus ordered by Parent (asc), Position (asc), Label (asc) and finally ID (asc).
$menus = Menu::orderBy('parent_id', 'ASC')->orderBy('position', 'ASC')->orderBy('label', 'ASC')->orderBy('id', 'ASC')->get();
// Convert menu query result to JSON for JSTree
$menusJson = $this->menusOrmToJsTreeJson($menus);
// List label and id of all menus ordered by Label (asc).
$parents = Menu::where('separator', '0')->orderBy('label', 'ASC')->orderBy('id', 'ASC')->get()->lists('label', 'id');
// Convert to array.
$parents = $parents->toArray();
// List name and id of all routes ordered by Name (asc).
$routes = Route::whereNotNull('name')->orderBy('name', 'ASC')->get()->lists('name', 'id');
// Convert to array.
$routes = $routes->toArray();
// Add a blank option at the top.
$routes = array('blank' => '') + $routes;
// List display name and id of all permissions ordered by Name (asc).
$permissions = Permission::orderBy('name', 'ASC')->get()->lists('display_name', 'id');
// Convert to array.
$permissions = $permissions->toArray();
// Add a blank option at the top.
$permissions = array('blank' => '') + $permissions;
// Return view
return view('admin.menus.index', compact('menus', 'menusJson', 'parents', 'routes', 'permissions', 'page_title', 'page_description'));
}