using System.Collections.Generic; using System.Linq; using System.Web.Mvc; using Abp.Application.Navigation; using Abp.Authorization; using Abp.Configuration; using Abp.Configuration.Startup; using Abp.Domain.Repositories; using Abp.Localization; using Abp.Runtime.Caching; using Abp.Runtime.Session; using Abp.Threading; using WePlatform.Authorization; using WePlatform.BaseInfo; using WePlatform.BaseSystem.Configuration.Ui; using WePlatform.BaseSystem.Sessions; using WePlatform.Configuration; using WePlatform.Models; using WePlatform.Models.Layout; using WePlatform.Views.Shared.SearchForm; using IwbZero.Authorization.Base.Users; using IwbZero.Runtime.Session; namespace WePlatform.Controllers { public class LayoutController : IwbControllerBase { private readonly IUserNavigationManager _userNavigationManager; private readonly ISessionAppService _sessionAppService; private readonly IMultiTenancyConfig _multiTenancyConfig; private readonly ILanguageManager _languageManager; private IRepository FunctionRepository { get; } public LayoutController( IUserNavigationManager userNavigationManager, ISessionAppService sessionAppService, IMultiTenancyConfig multiTenancyConfig, ILanguageManager languageManager, IRepository functionRepository) { _userNavigationManager = userNavigationManager; _sessionAppService = sessionAppService; _multiTenancyConfig = multiTenancyConfig; _languageManager = languageManager; FunctionRepository = functionRepository; } #region Old [ChildActionOnly] public PartialViewResult TopBarUserArea() { var model = new TopBarUserAreaViewModel(AbpSession); return PartialView("_TopBarUserArea", model); } [ChildActionOnly] public PartialViewResult SideBarNav(string activeMenu = "") { var model = new SideBarNavViewModel { MainMenu = AsyncHelper.RunSync(() => _userNavigationManager.GetMenuAsync("MainMenu", AbpSession.ToUserIdentifier())), ActiveMenuItemName = activeMenu, PageTitles = new List() }; if (!string.IsNullOrEmpty(activeMenu)) { var menu = PermissionManager.GetPermission(activeMenu); var names = GetActiveNames(menu); model.ActiveNames = names.Item1; names.Item2.Reverse(); model.PageTitles = names.Item2; } return PartialView("_SideBarNav", model); } [ChildActionOnly] public PartialViewResult SideBarUserArea() { var model = new SideBarUserAreaViewModel { LoginInformations = AsyncHelper.RunSync(() => _sessionAppService.GetCurrentLoginInformations()), IsMultiTenancyEnabled = _multiTenancyConfig.IsEnabled, }; return PartialView("_SideBarUserArea", model); } [ChildActionOnly] public PartialViewResult LanguageSelection() { var model = new LanguageSelectionViewModel { CurrentLanguage = _languageManager.CurrentLanguage, Languages = _languageManager.GetLanguages().Where(l => !l.IsDisabled).ToList() .Where(l => !l.IsDisabled) .ToList(), CurrentUrl = Request.Path }; return PartialView("_LanguageSelection", model); } [ChildActionOnly] public PartialViewResult RightSideBar() { var themeName = SettingManager.GetSettingValue(IwbSettingNames.UiTheme); var viewModel = new RightSideBarViewModel { CurrentTheme = UiThemes.All.FirstOrDefault(t => t.CssClass == themeName) }; return PartialView("_RightSideBar", viewModel); } #endregion [ChildActionOnly] public PartialViewResult UserMenu(string id) { var model = new TopBarUserAreaViewModel(AbpSession); if (string.IsNullOrEmpty(id)) { return PartialView("_UserMenuHeader", model); } return PartialView("_UserMenuSidebar", model); } [ChildActionOnly] public PartialViewResult LanguageChange() { var model = new LanguageSelectionViewModel { CurrentLanguage = _languageManager.CurrentLanguage, Languages = _languageManager.GetLanguages().Where(l => !l.IsDisabled).ToList() .Where(l => !l.IsDisabled) .ToList(), CurrentUrl = Request.Path }; return PartialView("_LanguageChange", model); } [ChildActionOnly] public PartialViewResult ToolMenu(string activeMenu = "", object searchForm = null) { var model = new List(); ViewBag.ActiveMenu = activeMenu; try { ViewBag.SearchFrom = (SearchFormViewModel)searchForm; } catch { ViewBag.SearchFrom = null; } if (string.IsNullOrEmpty(activeMenu)) { return PartialView("_ToolMenu", model); } var permission = PermissionManager.GetPermissionOrNull(activeMenu); if (permission != null) { var userName = AbpSession.GetUserName(); foreach (var child in permission.Children) { if (PermissionChecker.IsGranted(child.Name)) { var fun = AsyncHelper.RunSync(() => FunctionRepository.FirstOrDefaultAsync(a => a.PermissionName == child.Name)); if (fun.FunctionType != FunctionTypeDefinition.Button|| fun.Script.ToLower()=="none") { continue; } if (fun.Script != null && (fun.Script.ToLower().StartsWith("admin") || fun.Script.ToLower().StartsWith("_admin")) && userName != UserBase.HostAdminName && userName != UserBase.HostSystemName && userName != UserBase.AdminUserName && userName != UserBase.SystemUserName) { continue; } var menu = new ToolMenuViewModel(fun) { DisplayName = L(fun.PermissionName?.Replace(".", "") ?? "none") }; model.Add(menu); } } } return PartialView("_ToolMenu", model); } [ChildActionOnly] public PartialViewResult NavSideBar(string activeMenu = "") { var model = new SideBarNavViewModel { MainMenu = AsyncHelper.RunSync(() => _userNavigationManager.GetMenuAsync("MainMenu", AbpSession.ToUserIdentifier())), ActiveMenuItemName = activeMenu, PageTitles = new List() }; if (!string.IsNullOrEmpty(activeMenu)) { var menu = PermissionManager.GetPermission(activeMenu); var names = GetActiveNames(menu); model.ActiveNames = names.Item1; names.Item2.Reverse(); model.PageTitles = names.Item2; } return PartialView("_NavSidebar", model); } [ChildActionOnly] public PartialViewResult ControlSideBar() { var themeName = SettingManager.GetSettingValue(IwbSettingNames.UiTheme); var viewModel = new RightSideBarViewModel { CurrentTheme = UiThemes.All.FirstOrDefault(t => t.CssClass == themeName) }; return PartialView("_ControlSideBar", viewModel); } private (List, List) GetActiveNames(Permission permission) { var nameList = new List() { permission.Name }; var fun = permission.Properties.ContainsKey(IwbConsts.AuthPropertiesFunName) ? (SysFunction)permission.Properties[IwbConsts.AuthPropertiesFunName] : CacheManager.GetCache(IwbCacheNames.FunctionCache).Get(permission.Name, () => FunctionRepository.FirstOrDefault(a => a.PermissionName == permission.Name)); var pageTitles = new List() { new PageTitle(fun?.Icon ?? "", L(fun?.PermissionName)?.Replace(".", "") ?? "") }; if (permission.Parent != null) { var parent = GetActiveNames(permission.Parent); nameList.AddRange(parent.Item1); pageTitles.AddRange(parent.Item2); } return (nameList, pageTitles); } } }