Exemplo n.º 1
0
        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());
        }