Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }