コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }