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;
}