예제 #1
0
        private List <GenericBlogPost> GetPostsFromXML(XDocument xml)
        {
            var xmlPosts = xml.Descendants("item")
                           .Where(t => t.Element(wp + "post_type").Value == "post")
                           .Where(t => t.Element(wp + "status").Value == "publish");

            var posts = new List <GenericBlogPost>();

            foreach (XElement p in xmlPosts)
            {
                GenericBlogPost post = new GenericBlogPost();

                post.Creator         = p.Element(dc + "creator").Value;
                post.Title           = p.Element("title").Value;
                post.AttachmentUrl   = (string)p.Element(wp + "attachment_url") ?? String.Empty;
                post.PostName        = p.Element(wp + "post_name").Value;
                post.Link            = p.Element("link").Value;
                post.PublicationDate = DateTime.Parse(p.Element("pubDate").Value);
                post.Content         = p.Element(content + "encoded").Value;
                post.AllowComments   = (p.Element(wp + "comment_status").Value == "open") ? true : false;
                post.Tags            = p.Elements("category").Where(b => (string)b.Attribute("domain") == "post_tag").Select(c => c.Value).ToList();
                post.Categories      = p.Elements("category").Where(b => (string)b.Attribute("domain") == "category").Select(c => c.Value).ToList();
                //post.Meta = p.Elements(wp + "postmeta").Count() > 0 ?
                //    p.Elements(wp + "postmeta")
                //    .Where(x => x.Element(wp + "meta_key").Value != "enclosure")
                //    .ToDictionary(
                //        m => m.Element(wp + "meta_key").Value,
                //        m => m.Element(wp + "meta_value").Value
                //    ) : null;
                post.Meta     = null;
                post.Comments = (p.Elements(wp + "comment").Count() > 0 ? p.Elements(wp + "comment")
                                 .Select(c => new GenericPostComment
                {
                    Author = c.Element(wp + "comment_author").Value,
                    AuthorEmail = c.Element(wp + "comment_author_email").Value,
                    AuthorIP = c.Element(wp + "comment_author_IP").Value,
                    AuthorURL = c.Element(wp + "comment_author_url").Value,
                    CommentDate = DateTime.Parse(c.Element(wp + "comment_date").Value),
                    CommentDateGMT = DateTime.Parse(c.Element(wp + "comment_date_gmt").Value),
                    Content = c.Element(wp + "comment_content").Value,
                    Status = (c.Element(wp + "comment_approved").Value == "1") ? StatusConstants.Published : StatusConstants.WaitingForApproval,
                    Type = c.Element(wp + "comment_type").Value,
                    Parent = int.Parse(c.Element(wp + "comment_parent").Value),
                    UserId = int.Parse(c.Element(wp + "comment_user_id").Value)
                }).ToArray() : null);

                posts.Add(post);
            }

            return(posts);
        }
예제 #2
0
        private void ImportPost(Guid blogId, GenericBlogPost post)
        {
            Guid masterBlogPostId = Guid.NewGuid();

            BlogPost blogPost = SFBlogsManager.CreateBlogPost(masterBlogPostId);

            Blog blog = SFBlogsManager.GetBlogs().Where(b => b.Id == blogId).SingleOrDefault();

            blogPost.Parent = blog;

            masterBlogPostId = blogPost.Id;

            blogPost.Title = post.Title;
            blogPost.DateCreated = post.DateCreated;
            blogPost.PublicationDate = post.PublicationDate;
            blogPost.LastModified = post.PublicationDate;

            string content = ParseContent(post.Content);

            content = ImportAndLinkContentImages(content, post.Title, blog.Title);

            blogPost.Content = content;

            blogPost.Summary = post.Summary;
            blogPost.AllowComments = post.AllowComments;
            blogPost.UrlName = post.PostName ?? Regex.Replace(post.Title.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
            blogPost.Owner = Guid.Empty;

            PostAuthor author = _authors.Where(a => a.Username == post.Creator).FirstOrDefault();

            if (author != null)
            {
                User user = SFUserManager.GetUserByEmail(author.Email);

                if (user != null)
                {
                    blogPost.Owner = user.Id;
                }
            }

            if (ddlCategoriesImportMode.SelectedIndex > 0)
            {
                if (post.Categories != null && post.Categories.Count > 0)
                {
                    foreach (string category in post.Categories)
                    {
                        HierarchicalTaxon taxon;

                        taxon = SFTaxonomyManager.GetTaxa<HierarchicalTaxon>().Where(t => t.Name == category).FirstOrDefault();

                        if (taxon == null && ddlCategoriesImportMode.SelectedIndex > 1)
                        {
                            taxon = CreateCategory(category);
                        }

                        if (taxon != null)
                        {
                            blogPost.Organizer.AddTaxa("Category", taxon.Id);
                        }
                    }
                }
            }

            if (ddlTagsImportMode.SelectedIndex > 0)
            {
                if (post.Tags != null && post.Tags.Count > 0)
                {
                    foreach (string tag in post.Tags)
                    {
                        FlatTaxon taxon;

                        taxon = SFTaxonomyManager.GetTaxa<FlatTaxon>().Where(t => t.Name == tag).FirstOrDefault();

                        if (taxon == null && ddlTagsImportMode.SelectedIndex > 1)
                        {
                            taxon = CreateTag(tag);
                        }

                        if (taxon != null)
                        {
                            blogPost.Organizer.AddTaxa("Tags", taxon.Id);
                        }
                    }
                }
            }

            if (post.AttachmentUrl != String.Empty)
            {
                string imageSrc = post.AttachmentUrl;

                string imgFile = Path.GetFileName(imageSrc);

                var sfImages = App.WorkWith().Images().Where(i => i.Status == ContentLifecycleStatus.Master).Get().ToList();

                var sfImg = sfImages.Where(i => Path.GetFileName(i.FilePath) == imgFile.ToLower()).FirstOrDefault();

                if (sfImg != null)
                {
                    blogPost.CreateRelation(sfImg, "Thumbnail");
                }
                else
                {
                    if (ImportImage(imageSrc, post.Title, blog.Title))
                    {
                        sfImg = App.WorkWith().Images().Where(i => i.Status == ContentLifecycleStatus.Master).Get().ToList().Where(i => Path.GetFileName(i.FilePath) == imgFile.ToLower()).FirstOrDefault();

                        blogPost.CreateRelation(sfImg, "Thumbnail");
                    }
                }
            }

            if (post.Meta != null)
            {
                if (post.Meta.ContainsKey("_yoast_wpseo_title"))
                {
                    blogPost.SetValue("SEOTitle", post.Meta["_yoast_wpseo_title"]);
                }

                if (post.Meta.ContainsKey("_yoast_wpseo_metadesc"))
                {
                    blogPost.SetValue("SEOMetaDescription", post.Meta["_yoast_wpseo_metadesc"]);
                }

                if (post.Meta.ContainsKey("_yoast_wpseo_focuskw"))
                {
                    blogPost.SetValue("SEOMetaKeywords", post.Meta["_yoast_wpseo_focuskw"]);
                }
            }

            SFBlogsManager.RecompileItemUrls(blogPost);
            SFBlogsManager.Lifecycle.PublishWithSpecificDate(blogPost, post.PublicationDate);
            SFBlogsManager.SaveChanges();

            var bag = new Dictionary<string, string>();
            bag.Add("ContentType", typeof(BlogPost).FullName);
            WorkflowManager.MessageWorkflow(masterBlogPostId, typeof(BlogPost), null, "Publish", false, bag);

            if (chkImportComments.Checked)
            {
                if (post.Comments != null && post.Comments.Count() > 0)
                {
                    foreach (var comment in post.Comments)
                    {
                        CreateBlogPostComment(masterBlogPostId, comment);
                    }
                }
            }

            var dbg = _importLog;
        }
예제 #3
0
        private List<GenericBlogPost> GetPostsFromXML(XDocument xml)
        {
            var xmlPosts = xml.Descendants("item")
                .Where(t => t.Element(wp + "post_type").Value == "post")
                .Where(t => t.Element(wp + "status").Value == "publish");

            var posts = new List<GenericBlogPost>();

            foreach (XElement p in xmlPosts)
            {
                GenericBlogPost post = new GenericBlogPost();

                post.Creator = p.Element(dc + "creator").Value;
                post.Title = p.Element("title").Value;
                post.AttachmentUrl = (string)p.Element(wp + "attachment_url") ?? String.Empty;
                post.PostName = p.Element(wp + "post_name").Value;
                post.Link = p.Element("link").Value;
                post.PublicationDate = DateTime.Parse(p.Element("pubDate").Value);
                post.Content = p.Element(content + "encoded").Value;
                post.AllowComments = (p.Element(wp + "comment_status").Value == "open") ? true : false;
                post.Tags = p.Elements("category").Where(b => (string)b.Attribute("domain") == "post_tag").Select(c => c.Value).ToList();
                post.Categories = p.Elements("category").Where(b => (string)b.Attribute("domain") == "category").Select(c => c.Value).ToList();
                post.Meta = p.Elements(wp + "postmeta").Count() > 0 ?
                    p.Elements(wp + "postmeta")
                    .Where(x => x.Element(wp + "meta_key").Value != "enclosure")
                    .ToDictionary(
                        m => m.Element(wp + "meta_key").Value,
                        m => m.Element(wp + "meta_value").Value
                    ) : null;
                post.Comments = (p.Elements(wp + "comment").Count() > 0 ? p.Elements(wp + "comment")
                    .Select(c => new GenericPostComment
                    {
                        Author = c.Element(wp + "comment_author").Value,
                        AuthorEmail = c.Element(wp + "comment_author_email").Value,
                        AuthorIP = c.Element(wp + "comment_author_IP").Value,
                        AuthorURL = c.Element(wp + "comment_author_url").Value,
                        CommentDate = DateTime.Parse(c.Element(wp + "comment_date").Value),
                        CommentDateGMT = DateTime.Parse(c.Element(wp + "comment_date_gmt").Value),
                        Content = c.Element(wp + "comment_content").Value,
                        Status = (c.Element(wp + "comment_approved").Value == "1") ? StatusConstants.Published : StatusConstants.WaitingForApproval,
                        Type = c.Element(wp + "comment_type").Value,
                        Parent = int.Parse(c.Element(wp + "comment_parent").Value),
                        UserId = int.Parse(c.Element(wp + "comment_user_id").Value)
                    }).ToArray() : null);
                
                posts.Add(post);
            }

            return posts;
        }
예제 #4
0
        private void ImportPost(Guid blogId, GenericBlogPost post)
        {
            Guid masterBlogPostId = Guid.NewGuid();

            BlogPost blogPost = SFBlogsManager.CreateBlogPost(masterBlogPostId);

            Blog blog = SFBlogsManager.GetBlogs().Where(b => b.Id == blogId).SingleOrDefault();

            blogPost.Parent = blog;

            masterBlogPostId = blogPost.Id;

            blogPost.Title           = post.Title;
            blogPost.DateCreated     = post.DateCreated;
            blogPost.PublicationDate = post.PublicationDate;
            blogPost.LastModified    = post.PublicationDate;

            string content = ParseContent(post.Content);

            content = ImportAndLinkContentImages(content, post.Title, blog.Title);

            blogPost.Content = content;

            blogPost.Summary       = post.Summary;
            blogPost.AllowComments = post.AllowComments;
            blogPost.UrlName       = post.PostName ?? Regex.Replace(post.Title.ToLower(), @"[^\w\-\!\$\'\(\)\=\@\d_]+", "-");
            blogPost.Owner         = Guid.Empty;

            PostAuthor author = _authors.Where(a => a.Username == post.Creator).FirstOrDefault();

            if (author != null)
            {
                User user = SFUserManager.GetUserByEmail(author.Email);

                if (user != null)
                {
                    blogPost.Owner = user.Id;
                }
            }

            if (ddlCategoriesImportMode.SelectedIndex > 0)
            {
                if (post.Categories != null && post.Categories.Count > 0)
                {
                    foreach (string category in post.Categories)
                    {
                        HierarchicalTaxon taxon;

                        taxon = SFTaxonomyManager.GetTaxa <HierarchicalTaxon>().Where(t => t.Name == category).FirstOrDefault();

                        if (taxon == null && ddlCategoriesImportMode.SelectedIndex > 1)
                        {
                            taxon = CreateCategory(category);
                        }

                        if (taxon != null)
                        {
                            blogPost.Organizer.AddTaxa("Category", taxon.Id);
                        }
                    }
                }
            }

            if (ddlTagsImportMode.SelectedIndex > 0)
            {
                if (post.Tags != null && post.Tags.Count > 0)
                {
                    foreach (string tag in post.Tags)
                    {
                        FlatTaxon taxon;

                        taxon = SFTaxonomyManager.GetTaxa <FlatTaxon>().Where(t => t.Name == tag).FirstOrDefault();

                        if (taxon == null && ddlTagsImportMode.SelectedIndex > 1)
                        {
                            taxon = CreateTag(tag);
                        }

                        if (taxon != null)
                        {
                            blogPost.Organizer.AddTaxa("Tags", taxon.Id);
                        }
                    }
                }
            }

            if (post.AttachmentUrl != String.Empty)
            {
                string imageSrc = post.AttachmentUrl;

                string imgFile = Path.GetFileName(imageSrc);

                var sfImages = App.WorkWith().Images().Where(i => i.Status == ContentLifecycleStatus.Master).Get().ToList();

                var sfImg = sfImages.Where(i => Path.GetFileName(i.FilePath) == imgFile.ToLower()).FirstOrDefault();

                if (sfImg != null)
                {
                    blogPost.CreateRelation(sfImg, "Thumbnail");
                }
                else
                {
                    if (ImportImage(imageSrc, post.Title, blog.Title))
                    {
                        sfImg = App.WorkWith().Images().Where(i => i.Status == ContentLifecycleStatus.Master).Get().ToList().Where(i => Path.GetFileName(i.FilePath) == imgFile.ToLower()).FirstOrDefault();

                        blogPost.CreateRelation(sfImg, "Thumbnail");
                    }
                }
            }

            if (post.Meta != null)
            {
                if (post.Meta.ContainsKey("_yoast_wpseo_title"))
                {
                    blogPost.SetValue("SEOTitle", post.Meta["_yoast_wpseo_title"]);
                }

                if (post.Meta.ContainsKey("_yoast_wpseo_metadesc"))
                {
                    blogPost.SetValue("SEOMetaDescription", post.Meta["_yoast_wpseo_metadesc"]);
                }

                if (post.Meta.ContainsKey("_yoast_wpseo_focuskw"))
                {
                    blogPost.SetValue("SEOMetaKeywords", post.Meta["_yoast_wpseo_focuskw"]);
                }
            }

            SFBlogsManager.RecompileItemUrls(blogPost);
            SFBlogsManager.Lifecycle.PublishWithSpecificDate(blogPost, post.PublicationDate);
            SFBlogsManager.SaveChanges();

            var bag = new Dictionary <string, string>();

            bag.Add("ContentType", typeof(BlogPost).FullName);
            WorkflowManager.MessageWorkflow(masterBlogPostId, typeof(BlogPost), null, "Publish", false, bag);

            if (chkImportComments.Checked)
            {
                if (post.Comments != null && post.Comments.Count() > 0)
                {
                    foreach (var comment in post.Comments)
                    {
                        CreateBlogPostComment(masterBlogPostId, comment);
                    }
                }
            }

            var dbg = _importLog;
        }