public async Task <IActionResult> Create(string suggestion, string returnUrl = null) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManagePlacements)) { return(Forbid()); } var template = new PlacementNode[] { new PlacementNode() }; var viewModel = new EditShapePlacementViewModel { Creating = true, ShapeType = suggestion, Nodes = JsonConvert.SerializeObject(template, Formatting.Indented) }; ViewData["ReturnUrl"] = returnUrl; return(View("Edit", viewModel)); }
public async Task <IActionResult> Edit(string shapeType, string displayType = null, string contentType = null, string contentPart = null, string differentiator = null, string returnUrl = null) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManagePlacements)) { return(Forbid()); } var placementNodes = (await _placementsManager.GetShapePlacementsAsync(shapeType))?.ToList() ?? new List <PlacementNode>(); if (!placementNodes.Any() || ShouldCreateNode(placementNodes, displayType, contentType, contentPart, differentiator)) { var generatedNode = new PlacementNode { DisplayType = displayType, Differentiator = differentiator }; if (!string.IsNullOrEmpty(contentType)) { generatedNode.Filters.Add("contentType", new JArray(contentType)); } if (!string.IsNullOrEmpty(contentPart)) { generatedNode.Filters.Add("contentPart", new JArray(contentPart)); } placementNodes.Add(generatedNode); } var viewModel = new EditShapePlacementViewModel { ShapeType = shapeType, Nodes = JsonConvert.SerializeObject(placementNodes, Formatting.Indented) }; ViewData["ReturnUrl"] = returnUrl; return(View(viewModel)); }
public async Task <IActionResult> Edit(EditShapePlacementViewModel viewModel, string submit, string returnUrl = null) { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManagePlacements)) { return(Forbid()); } ViewData["ReturnUrl"] = returnUrl; if (viewModel.Creating && await _placementsManager.GetShapePlacementsAsync(viewModel.ShapeType) != null) { // Prevent overriding existing rules on creation _notifier.Warning(H["Placement rules for \"{0}\" already exists. Please edit existing rule.", viewModel.ShapeType]); return(View(viewModel)); } try { IEnumerable <PlacementNode> placementNodes = JsonConvert.DeserializeObject <PlacementNode[]>(viewModel.Nodes) ?? new PlacementNode[0]; // Remove empty nodes placementNodes = placementNodes.Where(node => !IsEmpty(node)); if (placementNodes.Any()) { // Save await _placementsManager.UpdateShapePlacementsAsync(viewModel.ShapeType, placementNodes); viewModel.Creating = false; _notifier.Success(H["The \"{0}\" placement have been saved.", viewModel.ShapeType]); } else if (viewModel.Creating) { _notifier.Warning(H["The \"{0}\" placement is empty.", viewModel.ShapeType]); return(View(viewModel)); } else { // Remove if empty await _placementsManager.RemoveShapePlacementsAsync(viewModel.ShapeType); _notifier.Success(H["The \"{0}\" placement has been deleted.", viewModel.ShapeType]); } } catch (JsonReaderException jsonException) { _notifier.Error(H["An error occurred while parsing the placement<br/>{0}", jsonException.Message]); return(View(viewModel)); } catch (Exception e) { _notifier.Error(H["An error occurred while saving the placement."]); _logger.LogError(e, "An error occurred while saving the placement."); return(View(viewModel)); } if (submit != "SaveAndContinue") { return(RedirectToReturnUrlOrIndex(returnUrl)); } return(View(viewModel)); }