public async Task <IActionResult> Create(LayerRuleCreateViewModel model) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageLayers)) { return(Forbid()); } var layers = await _layerService.LoadLayersAsync(); var layer = layers.Layers.FirstOrDefault(x => String.Equals(x.Name, model.Name)); if (layer == null) { return(NotFound()); } var conditionGroup = FindConditionGroup(layer.LayerRule, model.ConditionGroupId); if (conditionGroup == null) { return(NotFound()); } var condition = _factories.FirstOrDefault(x => x.Name == model.ConditionType)?.Create(); if (condition == null) { return(NotFound()); } var editor = await _displayManager.UpdateEditorAsync(condition, updater : _updateModelAccessor.ModelUpdater, isNew : true); if (ModelState.IsValid) { _conditionIdGenerator.GenerateUniqueId(condition); conditionGroup.Conditions.Add(condition); await _layerService.UpdateAsync(layers); await _notifier.SuccessAsync(H["Condition added successfully."]); return(RedirectToAction(nameof(Edit), "Admin", new { name = model.Name })); } model.Editor = editor; // If we got this far, something failed, redisplay form return(View(model)); }
public async Task <IActionResult> Create(string queryType, string name, string type, string conditionGroupId) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageLayers)) { return(Forbid()); } var layers = await _layerService.GetLayersAsync(); var layer = layers.Layers.FirstOrDefault(x => String.Equals(x.Name, name)); if (layer == null) { return(NotFound()); } var conditionGroup = FindConditionGroup(layer.LayerRule, conditionGroupId); if (conditionGroup == null) { return(NotFound()); } var condition = _factories.FirstOrDefault(x => x.Name == type)?.Create(); if (condition == null) { return(NotFound()); } var model = new LayerRuleCreateViewModel { Name = name, ConditionGroupId = conditionGroup.ConditionId, ConditionType = type, Editor = await _displayManager.BuildEditorAsync(condition, updater : _updateModelAccessor.ModelUpdater, isNew : true) }; return(View(model)); }