using System.Collections.Generic;
using System.Linq;
using Abp.Application.Navigation;
using Abp.Dependency;
using Abp.Domain.Repositories;
using Abp.Localization;
using IwbZero;
using WePlatform.Authorization;
using WePlatform.BaseInfo;
using WePlatform.Configuration;
namespace WePlatform
{
///
/// This class defines menus for the application.
/// It uses ABP's menu system.
/// When you add menu items here, they are automatically appear in angular application.
/// See Views/Layout/_TopMenu.cshtml file to know how to render menu.
///
public class WePlatformNavigationProvider : NavigationProvider
{
protected readonly IIocManager IocManager;
public WePlatformNavigationProvider(IIocManager iocManager)
{
IocManager = iocManager;
}
public void Refresh(INavigationProviderContext context)
{
var itemNames = context.Manager.MainMenu.Items.Select(a => a.Name);
foreach (var name in itemNames)
{
context.Manager.MainMenu.RemoveItem(name);
}
SetNavigation(context);
}
public override void SetNavigation(INavigationProviderContext context)
{
using (var funRepository = IocManager.ResolveAsDisposable>())
{
var funs = funRepository.Object.GetAllList(a => a.IsDeleted == false);
var topFunNo = System.Configuration.ConfigurationManager.AppSettings["SystemFunction.Top.FunctionNo"] ?? "HTSystem";
var topFun = funs.FirstOrDefault(a => a.FunctionNo == topFunNo);
var topPermName = topFun?.PermissionName ?? PermissionNames.Pages;
if (topFun != null)
context.Manager.MainMenu.AddItem(new MenuItemDefinition(topPermName, L("Home"), topFun.Icon, topFun.Url,
topFun.NeedAuth, topPermName, 0, topFun));
SetChildNavigation(context.Manager.MainMenu, funs, topFunNo);
}
}
private void SetChildNavigation(MenuDefinition menu, IList list, string parentNo)
{
var funs = list.Where(a => a.ParentNo == parentNo).ToList();
if (funs.Any())
{
foreach (var fun in funs)
{
if (fun.FunctionType != FunctionTypeDefinition.Catalog &&
fun.FunctionType != FunctionTypeDefinition.Menu)
continue;
var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
fun.NeedAuth, fun.PermissionName, fun.Sort, fun);
SetChildNavigation(item, list, fun.FunctionNo);
menu.AddItem(item);
}
}
}
private void SetChildNavigation(MenuItemDefinition menu, IList list, string parentNo)
{
var funs = list.Where(a => a.ParentNo == parentNo).ToList();
if (funs.Any())
{
foreach (var fun in funs)
{
if (fun.FunctionType != FunctionTypeDefinition.Catalog &&
fun.FunctionType != FunctionTypeDefinition.Menu)
continue;
var item = new MenuItemDefinition(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), fun.Icon, fun.Url,
fun.NeedAuth, fun.PermissionName, fun.Sort, fun);
SetChildNavigation(item, list, fun.FunctionNo);
menu.AddItem(item);
}
}
}
private static ILocalizableString L(string name)
{
return new LocalizableString(name, IwbZeroConsts.LocalizationSourceName);
}
}
}