private BlogPostViewModel MapViewModel(BlogMLPost blogML, BlogPostImportResult modification = null, List <string> unsavedUrls = null) { var model = new BlogPostViewModel { Title = blogML.PostName ?? blogML.Title, MetaTitle = blogML.Title, IntroText = blogML.Excerpt != null ? blogML.Excerpt.UncodedText : null, LiveFromDate = blogML.DateCreated.ToLocalTime().Date, LiveToDate = null, DesirableStatus = ContentStatus.Published, Content = blogML.Content != null ? blogML.Content.UncodedText : null }; if (modification != null) { model.BlogUrl = modification.PageUrl; model.Title = modification.Title; } else { model.BlogUrl = blogService.CreateBlogPermalink(blogML.PostName ?? blogML.Title, unsavedUrls); } return(model); }
public List <BlogPostImportResult> ValidateImport(BlogMLBlog blogPosts, bool useOriginalUrls = false) { List <BlogPostImportResult> result = new List <BlogPostImportResult>(); var unsavedUrls = new List <string>(); if (blogPosts != null && blogPosts.Posts != null) { foreach (var blogML in blogPosts.Posts) { var blogPostModel = MapViewModel(blogML, useOriginalUrls, null, unsavedUrls); unsavedUrls.Add(blogPostModel.BlogUrl); BlogPostImportResult blogPost; if (!ValidateModel(blogPostModel, blogML, out blogPost)) { result.Add(blogPost); continue; } blogPost = new BlogPostImportResult { Title = blogPostModel.Title, PageUrl = blogPostModel.BlogUrl, Success = true, Id = blogML.ID }; result.Add(blogPost); } } return(result); }
public List <BlogPostImportResult> ValidateImport(BlogMLBlog blogPosts) { List <BlogPostImportResult> result = new List <BlogPostImportResult>(); var unsavedUrls = new List <string>(); if (blogPosts != null && blogPosts.Posts != null) { foreach (var blogML in blogPosts.Posts) { // Validate authors if (blogML.Authors != null && blogML.Authors.Count > 0 && (blogPosts.Authors == null || blogPosts.Authors.All(a => a.ID != blogML.Authors[0].Ref))) { var failedResult = CreateFailedResult(blogML); failedResult.ErrorMessage = string.Format(BlogGlobalization.ImportBlogPosts_AuthorByRefNotFound_Message, blogML.Authors[0].Ref); result.Add(failedResult); continue; } var blogPostModel = MapViewModel(blogML, null, unsavedUrls); unsavedUrls.Add(blogPostModel.BlogUrl); BlogPostImportResult blogPost; if (!ValidateModel(blogPostModel, blogML, out blogPost)) { result.Add(blogPost); continue; } blogPost = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogPostModel.BlogUrl, Success = true, Id = blogML.ID }; result.Add(blogPost); } // Validate for duplicate IDS result .Where(bp => bp.Success) .GroupBy(bp => bp.Id) .Where(group => group.Count() > 1) .ToList() .ForEach(group => group .ToList() .ForEach( bp => { bp.Success = false; bp.ErrorMessage = string.Format(BlogGlobalization.ImportBlogPosts_DuplicateId_Message, group.Key); })); } return(result); }
private bool ValidateModel(BlogPostViewModel blogPostModel, BlogMLPost blogML, out BlogPostImportResult failedResult) { failedResult = null; if (string.IsNullOrWhiteSpace(blogML.ID)) { failedResult = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogML.PostUrl, Success = false, ErrorMessage = BlogGlobalization.ImportBlogPosts_ImportingBlogPostIdIsNotSet_Message, Id = blogML.ID }; return(false); } var validationContext = new ValidationContext(blogPostModel, null, null); var validationResults = new List <ValidationResult>(); if (!Validator.TryValidateObject(blogPostModel, validationContext, validationResults, true) && validationResults.Count > 0) { failedResult = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogML.PostUrl, Success = false, ErrorMessage = validationResults[0].ErrorMessage, Id = blogML.ID }; return(false); } try { pageService.ValidatePageUrl(blogPostModel.BlogUrl); } catch (Exception exc) { failedResult = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogML.PostUrl, Success = false, ErrorMessage = exc.Message, Id = blogML.ID }; return(false); } return(true); }
private List <BlogPostImportResult> ImportBlogPosts(IPrincipal principal, IDictionary <string, Guid> authors, IDictionary <string, Guid> categories, List <BlogMLPost> blogs, List <BlogPostImportResult> modifications, bool createRedirects = false) { var createdBlogPosts = new List <BlogPostImportResult>(); if (blogs != null) { foreach (var blogML in blogs) { BlogPostViewModel blogPostModel = null; try { blogPostModel = MapViewModel(blogML, modifications.First(m => m.Id == blogML.ID)); BlogPostImportResult blogPostResult = null; if (!ValidateModel(blogPostModel, blogML, out blogPostResult)) { createdBlogPosts.Add(blogPostResult); continue; } if (blogML.Authors != null && blogML.Authors.Count > 0) { blogPostModel.AuthorId = authors[blogML.Authors[0].Ref]; } if (blogML.Categories != null && blogML.Categories.Count > 0) { blogPostModel.CategoryId = categories[blogML.Categories[0].Ref]; } var blogPost = blogService.SaveBlogPost(blogPostModel, principal); blogPostResult = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogPost.PageUrl, Id = blogPost.Id.ToString(), Success = true }; createdBlogPosts.Add(blogPostResult); if (createRedirects) { var oldUrl = TryValidateOldUrl(blogML.PostUrl); if (oldUrl != null && oldUrl != blogPostModel.BlogUrl) { var redirect = redirectService.GetPageRedirect(oldUrl); if (redirect == null) { redirect = redirectService.CreateRedirectEntity(oldUrl, blogPostModel.BlogUrl); repository.Save(redirect); unitOfWork.Commit(); Events.PageEvents.Instance.OnRedirectCreated(redirect); } else { blogPostResult.WarnMessage = string.Format(BlogGlobalization.ImportBlogPosts_RedirectWasAlreadyCreatedFor_Message, blogML.PostUrl); } } else if (oldUrl == null) { blogPostResult.WarnMessage = string.Format(BlogGlobalization.ImportBlogPosts_FailedToCreateRedirectFor_Message, blogML.PostUrl); } } } catch (Exception exc) { var failedBlogPost = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, PageUrl = blogPostModel != null && blogPostModel.BlogUrl != null ? blogPostModel.BlogUrl : blogML.PostUrl, Success = false, ErrorMessage = exc.Message, Id = blogML.ID }; createdBlogPosts.Add(failedBlogPost); Log.Error("Failed to import blog post.", exc); } } } return(createdBlogPosts); }