Beispiel #1
0
        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));
        }
Beispiel #2
0
        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();
            }
        }