private static HtmlBuilder NavigationMenu( this HtmlBuilder hb, Context context, SiteSettings ss, long siteId, string referenceType) { var canManageGroups = context.UserSettings?.DisableGroupAdmin != true; var canManageSite = siteId != 0 && context.CanManageSite(ss: ss, site: true); var canManageDepts = Permissions.CanManageTenant(context: context); var canManageUsers = Permissions.CanManageTenant(context: context); var canManageRegistrations = Permissions.CanManageRegistrations(context: context); var canManageTenants = Permissions.CanManageTenant(context: context) || context.UserSettings?.EnableManageTenant == true; var canManageTrashBox = CanManageTrashBox(context: context, ss: ss); return(hb.Ul( id: "NavigationMenu", action: () => hb .Li( id: "NewMenuContainer", action: () => hb .Div(action: () => hb .A( href: NewHref( context: context, ss: ss), attributes: SiteIndex( context: context, ss: ss) ? new HtmlAttributes() .OnClick("$p.templates($(this));") .DataAction("Templates") .DataMethod("post") : null, action: () => hb .Span(css: "ui-icon ui-icon-plus") .Text(text: Displays.New(context: context)))), _using: ss.ReferenceType == "Sites" && context.Action == "index" ? context.CanManageSite(ss: ss) : context.CanCreate(ss: ss) && ss.ReferenceType != "Wikis" && context.Action != "trashbox") .Li( id: "ViewModeMenuContainer", css: "sub-menu", action: () => hb .Div( attributes: new HtmlAttributes().DataId("ViewModeMenu"), action: () => hb .Span(css: "ui-icon ui-icon-triangle-1-e") .Text(text: Displays.View(context: context))) .ViewModeMenu( context: context, ss: ss), _using: Def.ViewModeDefinitionCollection .Any(o => o.ReferenceType == referenceType)) .Li( id: "SettingsMenuContainer", css: "sub-menu", action: () => hb .Div( attributes: new HtmlAttributes().DataId("SettingsMenu"), action: () => hb .Span(css: "ui-icon ui-icon-gear") .Text(text: Displays.Manage(context: context))) .SettingsMenu( context: context, ss: ss, siteId: siteId, canManageSite: canManageSite, canManageDepts: canManageDepts, canManageGroups: canManageGroups, canManageUsers: canManageUsers, canManageRegistrations: canManageRegistrations, canManageTenants: canManageTenants, canManageTrashBox: canManageTrashBox), _using: canManageSite || canManageDepts || canManageGroups || canManageUsers) .Li( id: "HelpMenuContainer", css: "sub-menu", action: () => hb .Div( attributes: new HtmlAttributes().DataId("HelpMenu"), action: () => hb .Span(css: "ui-icon ui-icon-help") .Text(text: Displays.HelpMenu(context: context))) .HelpMenu(context: context)) .Li( id: "AccountMenuContainer", css: "sub-menu", action: () => hb .Div( attributes: new HtmlAttributes() .DataId("AccountMenu") .Id("AccountUserName"), action: () => hb .Span(css: "ui-icon ui-icon-person") .Text(text: SiteInfo.UserName( context: context, userId: context.UserId))) .AccountMenu(context: context)))); }
private static bool Using( Context context, SiteSettings ss, string referenceType, long siteId, NavigationMenu menu) { var canManageGroups = context.UserSettings?.AllowGroupAdministration(context: context) == true; var canCreateGroups = context.UserSettings?.AllowGroupCreation(context: context) == true; var canManageSite = siteId != 0 && context.CanManageSite( ss: ss, site: true); var canManageDepts = Permissions.CanManageTenant(context: context); var canManageUsers = Permissions.CanManageUser(context: context); var canManageRegistrations = Permissions.CanManageRegistrations(context: context); var canManageTenants = Permissions.CanManageTenant(context: context) || context.UserSettings?.EnableManageTenant == true; var canManageTrashBox = CanManageTrashBox( context: context, ss: ss); var canUseApi = context.UserSettings?.AllowApi(context: context) == true; var canUnlockSite = ss.LockedTable() && ss.LockedTableUser.Id == context.UserId; switch (menu.MenuId) { case "NewMenu": return(ss.ReferenceType == "Sites" && context.Action == "index" ? context.CanManageSite(ss: ss) : ss.ReferenceType == "Groups" ? canCreateGroups : context.CanCreate(ss: ss) && ss.ReferenceType != "Wikis" && context.Action != "trashbox"); case "ViewModeMenu": return(Def.ViewModeDefinitionCollection .Any(o => o.ReferenceType == referenceType)); case "SettingsMenu": return(canManageSite || canManageDepts || canManageGroups || canManageUsers || canUnlockSite); case "SettingsMenu_SiteSettings": return(canManageSite); case "SettingsMenu_DeptAdmin": return(canManageDepts); case "SettingsMenu_GroupAdmin": return(canManageGroups); case "SettingsMenu_UserAdmin": return(canManageUsers); case "SettingsMenu_Registrations": return(canManageRegistrations); case "SettingsMenu_TrashBox": return(canManageTrashBox); case "SettingsMenu_TenantAdmin": return(canManageTenants); case "SettingsMenu_ImportSitePackage": return(Parameters.SitePackage.Import && canManageSite && ss.IsSite(context: context) && ss.ReferenceType == "Sites" || (context.Controller == "items" && ss.SiteId == 0 && context.UserSettings?.AllowCreationAtTopSite(context: context) == true)); case "SettingsMenu_ExportSitePackage": return(Parameters.SitePackage.Export && canManageSite && ss.IsSite(context: context)); case "AccountMenu_ShowStartGuide": return(context.UserSettings?.ShowStartGuideAvailable(context: context) == true); case "AccountMenu_EditProfile": return(Parameters.Service.ShowProfiles); case "AccountMenu_ChangePassword": return(Parameters.Service.ShowChangePassword); case "AccountMenu_ApiSettings": return(Parameters.Api.Enabled && context.ContractSettings.Api != false && canUseApi); case "LockTableMenu_LockTable": case "LockTableMenu_ForceUnlockTable": return(canManageSite && ss.AllowLockTable == true); case "LockTableMenu_UnlockTable": return(ss.AllowLockTable == true); case "AccountMenu_Responsive": return(context.Mobile); default: return(true); } }