Esempio n. 1
0
        public void Process(BlogMLBlog blogml)
        {
            Log.Info("Fetching Tags.");

            using (var query = new OxiteReader("SELECT * FROM oxite_Tag"))
            {
                var tags = query.Execute();

                foreach (var tag in tags)
                {
                    var category = new BlogMLCategory
                    {
                        Approved     = true,
                        DateCreated  = tag.CreatedDate,
                        DateModified = tag.CreatedDate,
                        Description  = tag.TagName,
                        ID           = tag.TagID.ToString(),
                        ParentRef    = tag.TagID.ToString() == tag.ParentTagID.ToString() ? "0" : tag.ParentTagID.ToString(),
                        Title        = tag.TagName
                    };

                    blogml.Categories.Add(category);
                }
            }

            Log.InfoFormat("Finished adding {0} tags.", blogml.Categories.Count);
        }
 public LinkCategory ConvertCategory(BlogMLCategory category)
 {
     return(new LinkCategory
     {
         Title = category.Title.Left(MaxCategoryTitleLength),
         Description = category.Description,
         IsActive = category.Approved,
         CategoryType = CategoryType.PostCollection
     });
 }
        public void ConvertCategory_WithTitleTooLong_TruncatesTitleToMaxLength()
        {
            // arrange
            var title    = new string('a', 151);
            var category = new BlogMLCategory {
                Title = title
            };
            var mapper = new BlogMLImportMapper();

            // act
            LinkCategory linkCategory = mapper.ConvertCategory(category);

            // assert
            Assert.AreEqual(150, linkCategory.Title.Length);
        }
Esempio n. 4
0
        private string UpdateCategoriesGetRef(ref List <BlogMLCategory> categories, string categoryName, DateTime created)
        {
            string categoryRef = null;

            if (categories.Count > 0)
            {
                for (int i = 0; i < categories.Count; i++)
                {
                    if (categories[i].Title == categoryName)
                    {
                        // if we have evidence of an earlier date for this category update it now
                        if (categories[i].DateCreated > created)
                        {
                            categories[i].DateCreated  = created;
                            categories[i].DateModified = DateTime.UtcNow;
                        }

                        categoryRef = categories[i].ID;
                        break;
                    }
                }
            }

            // add a new category if not already in the list
            if (categoryRef == null)
            {
                // no ID in blogger so use a GUID
                categoryRef = Guid.NewGuid().ToString();

                BlogMLCategory category = new BlogMLCategory();
                category.Approved     = true;
                category.DateCreated  = created;
                category.DateModified = DateTime.UtcNow;
                category.Description  = categoryName;
                category.ID           = categoryRef;
                category.Title        = categoryName;

                categories.Add(category);
            }

            return(categoryRef);
        }
        private void AddBlogCategories(BlogMLDocument blogMlDoc, string tagGroup)
        {
            var categories = _applicationContext.Services.TagService.GetAllContentTags(tagGroup);

            foreach (var category in categories)
            {
                if (category.NodeCount == 0)
                {
                    continue;
                }

                var blogMlCategory = new BlogMLCategory();
                blogMlCategory.Id             = category.Id.ToString();
                blogMlCategory.CreatedOn      = category.CreateDate;
                blogMlCategory.LastModifiedOn = category.UpdateDate;
                blogMlCategory.ApprovalStatus = BlogMLApprovalStatus.Approved;
                blogMlCategory.ParentId       = "0";
                blogMlCategory.Title          = new BlogMLTextConstruct(category.Text);
                blogMlDoc.Categories.Add(blogMlCategory);
            }
        }
Esempio n. 6
0
        //============================================================
        //	CLASS SUMMARY
        //============================================================
        /// <summary>
        /// Provides example code for the BlogMLPost class.
        /// </summary>
        public static void ClassExample()
        {
            #region BlogMLPost
            BlogMLDocument document = new BlogMLDocument();

            document.RootUrl     = new Uri("/blogs/default.aspx");
            document.GeneratedOn = new DateTime(2006, 9, 5, 18, 22, 10);
            document.Title       = new BlogMLTextConstruct("BlogML 2.0 Example");
            document.Subtitle    = new BlogMLTextConstruct("This is some sample blog content for BlogML 2.0");

            BlogMLAuthor administrator = new BlogMLAuthor();
            administrator.Id             = "2100";
            administrator.CreatedOn      = new DateTime(2006, 8, 10, 8, 44, 35);
            administrator.LastModifiedOn = new DateTime(2006, 9, 4, 13, 46, 38);
            administrator.ApprovalStatus = BlogMLApprovalStatus.Approved;
            administrator.EmailAddress   = "*****@*****.**";
            administrator.Title          = new BlogMLTextConstruct("admin");
            document.Authors.Add(administrator);

            document.ExtendedProperties.Add("CommentModeration", "Anonymous");
            document.ExtendedProperties.Add("SendTrackback", "yes");

            BlogMLCategory category1 = new BlogMLCategory();
            category1.Id             = "1018";
            category1.CreatedOn      = new DateTime(2006, 9, 5, 17, 54, 58);
            category1.LastModifiedOn = new DateTime(2006, 9, 5, 17, 54, 58);
            category1.ApprovalStatus = BlogMLApprovalStatus.Approved;
            category1.Description    = "Sample Category 1";
            category1.ParentId       = "0";
            category1.Title          = new BlogMLTextConstruct("Category 1");
            document.Categories.Add(category1);

            BlogMLCategory category2 = new BlogMLCategory();
            category2.Id             = "1019";
            category2.CreatedOn      = new DateTime(2006, 9, 5, 17, 54, 59);
            category2.LastModifiedOn = new DateTime(2006, 9, 5, 17, 54, 59);
            category2.ApprovalStatus = BlogMLApprovalStatus.Approved;
            category2.Description    = "Sample Category 2";
            category2.ParentId       = "0";
            category2.Title          = new BlogMLTextConstruct("Category 2");
            document.Categories.Add(category2);

            BlogMLCategory category3 = new BlogMLCategory();
            category3.Id             = "1020";
            category3.CreatedOn      = new DateTime(2006, 9, 5, 17, 55, 0);
            category3.LastModifiedOn = new DateTime(2006, 9, 5, 17, 55, 0);
            category3.ApprovalStatus = BlogMLApprovalStatus.NotApproved;
            category3.Description    = "Sample Category 3";
            category3.ParentId       = "0";
            category3.Title          = new BlogMLTextConstruct("Category 3");
            document.Categories.Add(category3);

            //  Create a blog entry
            BlogMLPost post = new BlogMLPost();
            post.Id             = "34";
            post.CreatedOn      = new DateTime(2006, 9, 5, 3, 19, 0);
            post.LastModifiedOn = new DateTime(2006, 9, 5, 3, 19, 0);
            post.ApprovalStatus = BlogMLApprovalStatus.Approved;
            post.Url            = new Uri("/blogs/archive/2006/09/05/Sample-Blog-Post.aspx");
            post.PostType       = BlogMLPostType.Normal;
            post.Views          = "0";
            post.Title          = new BlogMLTextConstruct("Sample Blog Post");
            post.Content        = new BlogMLTextConstruct("<p>This is <b>HTML encoded</b> content.&nbsp;</p>", BlogMLContentType.Html);
            post.Name           = new BlogMLTextConstruct("Sample Blog Post");

            post.Categories.Add("1018");
            post.Categories.Add("1020");

            post.Authors.Add("2100");

            BlogMLComment comment = new BlogMLComment();
            comment.Id             = "35";
            comment.CreatedOn      = new DateTime(2006, 9, 5, 11, 36, 50);
            comment.LastModifiedOn = new DateTime(2006, 9, 5, 11, 36, 50);
            comment.Title          = new BlogMLTextConstruct("re: Sample Blog Post");
            comment.Content        = new BlogMLTextConstruct("This is a test comment.");
            post.Comments.Add(comment);
            #endregion
        }
        //============================================================
        //	PRIVATE METHODS
        //============================================================
        #region FillDocumentCollections(BlogMLDocument document, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings)
        /// <summary>
        /// Modifies the <see cref="BlogMLDocument"/> collection entities to match the supplied <see cref="XPathNavigator"/> data source.
        /// </summary>
        /// <param name="document">The <see cref="BlogMLDocument"/> to be filled.</param>
        /// <param name="source">The <see cref="XPathNavigator"/> to extract information from.</param>
        /// <param name="manager">The <see cref="XmlNamespaceManager"/> used to resolve XML namespace prefixes.</param>
        /// <param name="settings">The <see cref="SyndicationResourceLoadSettings"/> used to configure the fill operation.</param>
        /// <remarks>
        ///     This method expects the supplied <paramref name="source"/> to be positioned on the XML element that represents a <see cref="BlogMLDocument"/>.
        /// </remarks>
        /// <exception cref="ArgumentNullException">The <paramref name="document"/> is a null reference (Nothing in Visual Basic).</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="source"/> is a null reference (Nothing in Visual Basic).</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="manager"/> is a null reference (Nothing in Visual Basic).</exception>
        /// <exception cref="ArgumentNullException">The <paramref name="settings"/> is a null reference (Nothing in Visual Basic).</exception>
        private static void FillDocumentCollections(BlogMLDocument document, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings)
        {
            //------------------------------------------------------------
            //	Validate parameter
            //------------------------------------------------------------
            Guard.ArgumentNotNull(document, "document");
            Guard.ArgumentNotNull(source, "source");
            Guard.ArgumentNotNull(manager, "manager");
            Guard.ArgumentNotNull(settings, "settings");

            //------------------------------------------------------------
            //	Attempt to extract syndication information
            //------------------------------------------------------------
            XPathNodeIterator authorsIterator            = source.Select("blog:authors/blog:author", manager);
            XPathNodeIterator extendedPropertiesIterator = source.Select("blog:extended-properties/blog:property", manager);
            XPathNodeIterator categoriesIterator         = source.Select("blog:categories/blog:category", manager);
            XPathNodeIterator postsIterator = source.Select("blog:posts/blog:post", manager);

            if (authorsIterator != null && authorsIterator.Count > 0)
            {
                while (authorsIterator.MoveNext())
                {
                    BlogMLAuthor author = new BlogMLAuthor();
                    if (author.Load(authorsIterator.Current, settings))
                    {
                        document.Authors.Add(author);
                    }
                }
            }

            if (extendedPropertiesIterator != null && extendedPropertiesIterator.Count > 0)
            {
                while (extendedPropertiesIterator.MoveNext())
                {
                    if (extendedPropertiesIterator.Current.HasAttributes)
                    {
                        string propertyName  = extendedPropertiesIterator.Current.GetAttribute("name", String.Empty);
                        string propertyValue = extendedPropertiesIterator.Current.GetAttribute("value", String.Empty);

                        if (!String.IsNullOrEmpty(propertyName) && !document.ExtendedProperties.ContainsKey(propertyName))
                        {
                            document.ExtendedProperties.Add(propertyName, propertyValue);
                        }
                    }
                }
            }

            if (categoriesIterator != null && categoriesIterator.Count > 0)
            {
                while (categoriesIterator.MoveNext())
                {
                    BlogMLCategory category = new BlogMLCategory();
                    if (category.Load(categoriesIterator.Current, settings))
                    {
                        document.Categories.Add(category);
                    }
                }
            }

            if (postsIterator != null && postsIterator.Count > 0)
            {
                int counter = 0;
                while (postsIterator.MoveNext())
                {
                    BlogMLPost post = new BlogMLPost();
                    counter++;

                    if (post.Load(postsIterator.Current, settings))
                    {
                        if (settings.RetrievalLimit != 0 && counter > settings.RetrievalLimit)
                        {
                            break;
                        }

                        ((Collection <BlogMLPost>)document.Posts).Add(post);
                    }
                }
            }
        }
Esempio n. 8
0
        public void WriteWXRDocument(BlogMLBlog blogData, string baseUrl, string fileName)
        {
            XmlTextWriter writer = new XmlTextWriter(fileName, new UTF8Encoding(false));

            writer.Formatting = Formatting.Indented;

            writer.WriteStartDocument();
            writer.WriteStartElement("rss");
            writer.WriteAttributeString("version", "2.0");
            writer.WriteAttributeString("xmlns", "content", null, "http://purl.org/rss/1.0/modules/content/");
            writer.WriteAttributeString("xmlns", "wfw", null, "http://wellformedweb.org/CommentAPI/");
            writer.WriteAttributeString("xmlns", "dc", null, "http://purl.org/dc/elements/1.1/");
            writer.WriteAttributeString("xmlns", "wp", null, "http://wordpress.org/export/1.0/");

            // Write Blog Info.
            writer.WriteStartElement("channel");
            writer.WriteElementString("title", String.Join(" ", blogData.Title));
            writer.WriteElementString("link", baseUrl + blogData.RootUrl);
            writer.WriteElementString("description", "Exported Blog");
            writer.WriteElementString("pubDate", blogData.DateCreated.ToString("ddd, dd MMM yyyy HH:mm:ss +0000"));
            writer.WriteElementString("generator", "http://wordpress.org/?v=MU");
            writer.WriteElementString("language", "en");
            writer.WriteElementString("wp:wxr_version", "1.0");
            writer.WriteElementString("wp:base_site_url", blogData.RootUrl);
            writer.WriteElementString("wp:base_blog_url", blogData.RootUrl);

            // Create tags (currently not in use with BlogML document)
            //for(int i = 0; i <= tagCount - 1; i++)
            //{
            //    writer.WriteStartElement("wp:tag");
            //    writer.WriteElementString("wp:tag_slug", tags[0].ToString().Replace(' ', '-'));
            //    writer.WriteStartElement("wp:tag_name");
            //    writer.WriteCData(tags[0].ToString());
            //    writer.WriteEndElement(); // wp:tag_name
            //    writer.WriteEndElement(); // sp:tag
            //}

            // Create categories
            if (blogData.categories != null)
            {
                BlogMLCategory currCategory = null;
                for (int i = 0; i <= blogData.categories.Count - 1; i++)
                {
                    currCategory = blogData.categories[i];
                    writer.WriteStartElement("wp:category");
                    writer.WriteElementString("wp:category_nicename", string.Join(" ", currCategory.Title).ToLower().Replace(' ', '-'));
                    writer.WriteElementString("wp:category_parent", "");
                    writer.WriteStartElement("wp:cat_name");
                    writer.WriteCData(string.Join(" ", currCategory.Title));
                    writer.WriteEndElement(); // wp:cat_name
                    writer.WriteEndElement(); // wp:category
                }
            }

            // TODO: Swap code so that all posts are processed, not just first 5.
            for (int i = 0; i <= blogData.Posts.Count - 1; i++)
            {
                string postXml = WritePost(blogData.Posts[i], blogData, baseUrl);
                writer.WriteRaw(postXml);
            }

            writer.WriteEndElement(); // channel
            writer.WriteEndElement(); // rss

            writer.Flush();
            writer.Close();
        }