public async Task <IActionResult> Render() { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ContentPreview)) { return(Unauthorized()); } var contentItemType = Request.Form["ContentItemType"]; var contentItem = await _contentManager.NewAsync(contentItemType); // Assign the ids from the currently edited item so that validation thinks // it's working on the same item. For instance if drivers are checking name unicity // they need to think this is the same existing item (AutoroutePart). var contentItemId = Request.Form["PreviewContentItemId"]; var contentItemVersionId = Request.Form["PreviewContentItemVersionId"]; int.TryParse(Request.Form["PreviewId"], out var contentId); contentItem.Id = contentId; contentItem.ContentItemId = contentItemId; contentItem.ContentItemVersionId = contentItemVersionId; contentItem.CreatedUtc = _clock.UtcNow; contentItem.ModifiedUtc = _clock.UtcNow; contentItem.PublishedUtc = _clock.UtcNow; // TODO: we should probably get this value from the main editor as it might impact validators var model = await _contentItemDisplayManager.UpdateEditorAsync(contentItem, this, true); if (!ModelState.IsValid) { var errors = new List <string>(); foreach (var modelState in ValidationHelpers.GetModelStateList(ViewData, false)) { for (var i = 0; i < modelState.Errors.Count; i++) { var modelError = modelState.Errors[i]; var errorText = ValidationHelpers.GetModelErrorMessageOrDefault(modelError); errors.Add(errorText); } } return(StatusCode(500, new { errors = errors })); } model = await _contentItemDisplayManager.BuildDisplayAsync(contentItem, this, "Detail"); return(View(model)); }
public async Task <IActionResult> Render() { if (!await _authorizationService.AuthorizeAsync(User, Permissions.ContentPreview)) { return(Unauthorized()); } var contentItemType = Request.Form["ContentItemType"]; var contentItem = await _contentManager.NewAsync(contentItemType); // Assign the ids from the currently edited item so that validation thinks // it's working on the same item. For instance if drivers are checking name unicity // they need to think this is the same existing item (AutoroutePart). var contentItemId = Request.Form["PreviewContentItemId"]; var contentItemVersionId = Request.Form["PreviewContentItemVersionId"]; // Unique contentItem.Id that only Preview is using such that another // stored document can't have the same one in the IContentManagerSession index contentItem.Id = -1; contentItem.ContentItemId = contentItemId; contentItem.ContentItemVersionId = contentItemVersionId; contentItem.CreatedUtc = _clock.UtcNow; contentItem.ModifiedUtc = _clock.UtcNow; contentItem.PublishedUtc = _clock.UtcNow; contentItem.Published = true; // TODO: we should probably get this value from the main editor as it might impact validators var model = await _contentItemDisplayManager.UpdateEditorAsync(contentItem, this, true); if (!ModelState.IsValid) { var errors = new List <string>(); foreach (var modelState in ValidationHelpers.GetModelStateList(ViewData, false)) { for (var i = 0; i < modelState.Errors.Count; i++) { var modelError = modelState.Errors[i]; var errorText = ValidationHelpers.GetModelErrorMessageOrDefault(modelError); errors.Add(errorText); } } return(StatusCode(500, new { errors = errors })); } var previewAspect = await _contentManager.PopulateAspectAsync(contentItem, new PreviewAspect()); if (!String.IsNullOrEmpty(previewAspect.PreviewUrl)) { // The PreviewPart is configured, we need to set the fake content item _contentManagerSession.Store(contentItem); if (!previewAspect.PreviewUrl.StartsWith('/')) { previewAspect.PreviewUrl = "/" + previewAspect.PreviewUrl; } Request.HttpContext.Items["PreviewPath"] = previewAspect.PreviewUrl; return(Ok()); } model = await _contentItemDisplayManager.BuildDisplayAsync(contentItem, this, "Detail"); return(View(model)); }