public async Task <OperationResult> LoadNavigationMenuDuringStartProgram(string pluginId) { var eformPlugin = await _dbContext.EformPlugins .FirstOrDefaultAsync(x => x.PluginId == pluginId); if (eformPlugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var plugin = Program.EnabledPlugins.FirstOrDefault(x => x.PluginId == pluginId); if (plugin == null) { return(new OperationDataResult <InstalledPluginsModel>(false, _localizationService.GetString("PluginNotFound"))); } var pluginMenu = plugin.GetNavigationMenu(_serviceProvider); // get all menu templates from plugin var menuTemplatesFromPlugin = new List <PluginMenuTemplateModel>(); foreach (var pluginMenuItem in pluginMenu) { if (pluginMenuItem.Type == MenuItemTypeEnum.Link) { menuTemplatesFromPlugin.Add(pluginMenuItem.MenuTemplate); } if (pluginMenuItem.Type == MenuItemTypeEnum.Dropdown) { foreach (var childMenuItem in pluginMenuItem.ChildItems) { if (childMenuItem.Type == MenuItemTypeEnum.Link) { menuTemplatesFromPlugin.Add(childMenuItem.MenuTemplate); } } } } var menuTemplatesFromDatabase = _dbContext.MenuTemplates .Where(x => x.EformPluginId == eformPlugin.Id) .ToList(); if (menuTemplatesFromDatabase.Any()) { if (menuTemplatesFromPlugin.Count() != menuTemplatesFromDatabase.Count()) { foreach (var menuTemplateFromPlugin in menuTemplatesFromPlugin) { // get all templates name that in database var menuTemplatesFromDatabaseNames = menuTemplatesFromDatabase.Select(x => x.E2EId).ToList(); // if template from plugin is not contains in database if (!menuTemplatesFromDatabaseNames.Contains(menuTemplateFromPlugin.E2EId)) { // add to database menu templates from plugin var menuTemplateToDatabase = new MenuTemplate() { Name = menuTemplateFromPlugin.Name, E2EId = menuTemplateFromPlugin.E2EId, DefaultLink = menuTemplateFromPlugin.DefaultLink, EformPluginId = eformPlugin.Id, }; _dbContext.MenuTemplates.Add(menuTemplateToDatabase); _dbContext.SaveChanges(); foreach (var translation in menuTemplateFromPlugin.Translations) { var menuTemplateTranslation = new MenuTemplateTranslation { Language = translation.Language, LocaleName = translation.LocaleName, Name = translation.Name, MenuTemplateId = menuTemplateToDatabase.Id, }; _dbContext.MenuTemplateTranslations.Add(menuTemplateTranslation); _dbContext.SaveChanges(); } if (menuTemplateFromPlugin.Permissions.Any()) { foreach (var itemPermission in menuTemplateFromPlugin.Permissions) { PermissionType newPermissionType = null; var permissionType = _dbContext.PermissionTypes.FirstOrDefault(x => x.Name == itemPermission.PermissionTypeName); if (permissionType == null) { newPermissionType = new PermissionType { Name = itemPermission.PermissionTypeName, }; _dbContext.PermissionTypes.Add(newPermissionType); _dbContext.SaveChanges(); } var permission = new Permission { PermissionName = itemPermission.PermissionName, ClaimName = itemPermission.ClaimName, PermissionTypeId = newPermissionType == null ? permissionType.Id : newPermissionType.Id }; _dbContext.Permissions.Add(permission); _dbContext.SaveChanges(); var menuTemplatePermission = new MenuTemplatePermission { MenuTemplateId = menuTemplateToDatabase.Id, PermissionId = permission.Id, }; _dbContext.MenuTemplatePermissions.Add(menuTemplatePermission); _dbContext.SaveChanges(); } } } } } } else { // Load to database all navigation menu from plugin by id var pluginMenuItemsLoader = new PluginMenuItemsLoader(_dbContext, pluginId); pluginMenuItemsLoader.Load(pluginMenu); } return(new OperationResult(true)); }
public override void Load(PluginMenuItemModel MenuItem, string pluginId, int?parentId) { var menuTemplate = new MenuTemplate() { Name = MenuItem.MenuTemplate.Name, E2EId = MenuItem.MenuTemplate.E2EId, DefaultLink = MenuItem.MenuTemplate.DefaultLink, EformPluginId = _dbContext.EformPlugins.Single(x => x.PluginId == pluginId).Id }; _dbContext.MenuTemplates.Add(menuTemplate); _dbContext.SaveChanges(); foreach (var translation in MenuItem.MenuTemplate.Translations) { var menuTemplateTranslation = new MenuTemplateTranslation { Language = translation.Language, LocaleName = translation.LocaleName, Name = translation.Name, MenuTemplateId = menuTemplate.Id, }; _dbContext.MenuTemplateTranslations.Add(menuTemplateTranslation); _dbContext.SaveChanges(); } if (MenuItem.MenuTemplate.Permissions.Any()) { foreach (var itemPermission in MenuItem.MenuTemplate.Permissions) { PermissionType newPermissionType = null; var permissionType = _dbContext.PermissionTypes.FirstOrDefault(x => x.Name == itemPermission.PermissionTypeName); if (permissionType == null) { newPermissionType = new PermissionType { Name = itemPermission.PermissionTypeName, }; _dbContext.PermissionTypes.Add(newPermissionType); _dbContext.SaveChanges(); } var permission = new Permission { PermissionName = itemPermission.PermissionName, ClaimName = itemPermission.ClaimName, PermissionTypeId = newPermissionType == null ? permissionType.Id : newPermissionType.Id }; _dbContext.Permissions.Add(permission); _dbContext.SaveChanges(); var menuTemplatePermission = new MenuTemplatePermission { MenuTemplateId = menuTemplate.Id, PermissionId = permission.Id, }; _dbContext.MenuTemplatePermissions.Add(menuTemplatePermission); _dbContext.SaveChanges(); } } var newMenuItem = new MenuItem() { E2EId = MenuItem.E2EId, Name = MenuItem.Name, Link = MenuItem.Link, Type = MenuItem.Type, Position = parentId != null ? MenuItem.Position : _dbContext.MenuItems.Where(x => x.ParentId == null).Max(x => x.Position) + MenuItem.Position + 1, MenuTemplateId = menuTemplate.Id, ParentId = parentId, }; _dbContext.MenuItems.Add(newMenuItem); _dbContext.SaveChanges(); foreach (var menuItemTranslation in MenuItem.Translations) { var translation = new MenuItemTranslation { Language = menuItemTranslation.Language, LocaleName = menuItemTranslation.LocaleName, Name = menuItemTranslation.Name, MenuItemId = newMenuItem.Id, }; _dbContext.MenuItemTranslations.Add(translation); _dbContext.SaveChanges(); } }