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) { try { var oldUrl = FixUrl(blogML.PostUrl); var blogPostModel = MapViewModel(blogML, true, modifications.First(m => m.Id == blogML.ID)); BlogPostImportResult blogPostResult; 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 = blogPost.Title, PageUrl = blogPost.PageUrl, Id = blogPost.Id.ToString(), Success = true }; createdBlogPosts.Add(blogPostResult); if (createRedirects && 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); } } } catch (Exception exc) { var failedBlogPost = new BlogPostImportResult { Title = blogML.Title, PageUrl = blogML.PostUrl, Success = false, ErrorMessage = exc.Message, Id = blogML.ID }; createdBlogPosts.Add(failedBlogPost); Log.Error("Failed to import blog post.", exc); } } } return createdBlogPosts; }
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; }
private bool ValidateModel(BlogPostViewModel blogPostModel, BlogMLPost blogML, out BlogPostImportResult failedResult) { failedResult = null; if (string.IsNullOrWhiteSpace(blogML.ID)) { failedResult = new BlogPostImportResult { Title = 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.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.Title, PageUrl = blogML.PostUrl, Success = false, ErrorMessage = exc.Message, Id = blogML.ID }; return false; } return true; }
private BlogPostViewModel MapViewModel(BlogMLPost blogML, bool useOriginalUrls, BlogPostImportResult modification = null, List<string> unsavedUrls = null) { var model = new BlogPostViewModel { Title = blogML.PostName ?? blogML.Title, IntroText = blogML.Excerpt != null ? blogML.Excerpt.UncodedText : null, LiveFromDate = blogML.DateCreated.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 if (useOriginalUrls) { model.BlogUrl = blogService.CreateBlogPermalink(FixUrl(blogML.PostUrl), unsavedUrls); } else { model.BlogUrl = blogService.CreateBlogPermalink(blogML.Title, unsavedUrls); } return model; }
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 && categories != null && categories.Count > 0) { for (var i = 0; i < blogML.Categories.Count; i++) { var category = blogML.Categories[i]; if (blogPostModel.Categories == null) { blogPostModel.Categories = new List<LookupKeyValue>(); } if (categories.ContainsKey(category.Ref)) { blogPostModel.Categories.Add(new LookupKeyValue() { Key = categories[category.Ref].ToLowerInvariantString() }); } } } string[] error; var blogPost = blogService.SaveBlogPost(blogPostModel, null, principal, out error); if (blogPost == null) { blogPostResult = new BlogPostImportResult { Title = blogML.PostName ?? blogML.Title, Success = false, ErrorMessage = error.Length > 0 ? error[0] : string.Empty }; createdBlogPosts.Add(blogPostResult); continue; } 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; }
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; }