public PageService( IPageRepository pageRepositiry, IPageCollectionRepository pageCollectionRepositiry, IPageMetadataManager pageMetadataManager, IWebsiteContext websiteContext, Url.IPageUrlHelper pageUrlHelper, Views.IViewLocator viewLocator, IOptions <PagesOptions> options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } this.pageRepositiry = pageRepositiry ?? throw new ArgumentNullException(nameof(pageRepositiry)); this.pageCollectionRepositiry = pageCollectionRepositiry ?? throw new ArgumentNullException(nameof(pageCollectionRepositiry)); this.pageMetadataManager = pageMetadataManager ?? throw new ArgumentNullException(nameof(pageMetadataManager)); this.websiteContext = websiteContext ?? throw new ArgumentNullException(nameof(websiteContext)); this.pageUrlHelper = pageUrlHelper ?? throw new ArgumentNullException(nameof(pageUrlHelper)); this.viewLocator = viewLocator ?? throw new ArgumentNullException(nameof(viewLocator)); this.options = options.Value; }
public async Task <IActionResult> ChangeModelTypeAsync([FromQuery] Guid editId, [FromQuery] string modelPath, [FromQuery] string modelType, [FromServices] IContentMetadataManager contentMetadataManager, [FromServices] Views.IViewLocator viewLocator) { if (modelType == null) { return(BadRequest()); } var editSession = await pageContentService.FindEditByIdAsync(editId); if (editSession == null) { return(BadRequest()); } var page = await pageService.FindPageByIdAsync(editSession.PageId); if (page == null) { return(BadRequest()); } if (modelPath == null) { modelPath = string.Empty; } var newModelType = contentMetadataManager.GetMetadata(modelType); var pageContent = await pageContentService.GetContentAsync(editSession); var pageContentExplorer = ContentExplorer.Create(contentMetadataManager, pageContent); var contentExplorer = pageContentExplorer.Navigate(modelPath); if (contentExplorer == null) { return(BadRequest()); } contentExplorer.Field.ChangeType(contentExplorer.Model, modelType); var newItem = newModelType.CreateModelInstance(); var view = viewLocator.FindView(newModelType.ModelType); if (view != null && view.DefaultModelData != null) { newItem = newModelType.ConvertDictionaryToContentModel(view.DefaultModelData); } return(Ok()); }