Exemplo n.º 1
0
 public static CategoryPostItem CreateFromEntry(Entry entry, IDasBlogSettings dasBlogSettings)
 {
     return(new CategoryPostItem
     {
         Category = entry.GetSplitCategories().FirstOrDefault(),
         BlogTitle = entry.Title,
         BlogId = dasBlogSettings.GeneratePostUrl(entry),
         Date = entry.CreatedLocalTime
     });
 }
Exemplo n.º 2
0
        /// <param name="dt">if non-null then the post must be dated on that date</param>
        public Entry GetBlogPost(string posttitle, DateTime?dt)
        {
            if (dt == null)
            {
                posttitle = posttitle.Replace(dasBlogSettings.SiteConfiguration.TitlePermalinkSpaceReplacement, string.Empty)
                            .Replace(".aspx", string.Empty);

                return(dataService.GetEntry(posttitle));
            }
            else
            {
                var entries = dataService.GetEntriesForDay(dt.Value, null, null, 1, 10, null);

                return(entries.FirstOrDefault(e => dasBlogSettings.GeneratePostUrl(e)
                                              .EndsWith(posttitle, StringComparison.OrdinalIgnoreCase)));
            }
        }
Exemplo n.º 3
0
        public ProfilePost(IDasBlogSettings dasBlogSettings)
        {
            _dasBlogSettings = dasBlogSettings;

            CreateMap <Entry, PostViewModel>()
            .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title))
            .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content ?? string.Empty))
            .ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description ?? string.Empty))
            .ForMember(dest => dest.Categories, opt => opt.MapFrom(src => ConvertCategory(src.Categories)))
            .ForMember(dest => dest.EntryId, opt => opt.MapFrom(src => src.EntryId))
            .ForMember(dest => dest.AllowComments, opt => opt.MapFrom(src => src.AllowComments))
            .ForMember(dest => dest.IsPublic, opt => opt.MapFrom(src => src.IsPublic))
            .ForMember(dest => dest.Syndicated, opt => opt.MapFrom(src => src.Syndicated))
            .ForMember(dest => dest.PermaLink, opt => opt.MapFrom(src => _dasBlogSettings.GeneratePostUrl(src)))
            .ForMember(dest => dest.ImageUrl, opt => opt.MapFrom(src => src.Content.FindFirstImage()))
            .ForMember(dest => dest.VideoUrl, opt => opt.MapFrom(src => src.Content.FindFirstYouTubeVideo()))
            .ForMember(dest => dest.CreatedDateTime, opt => opt.MapFrom(src => src.CreatedLocalTime))
            .ForMember(dest => dest.ModifiedDateTime, opt => opt.MapFrom(src => src.ModifiedLocalTime));

            CreateMap <PostViewModel, Entry>()
            .ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title))
            .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content ?? string.Empty))
            .ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description ?? string.Empty))
            .ForMember(dest => dest.Categories, opt => opt.MapFrom(src => string.Join(";", src.AllCategories.Where(x => x.Checked).Select(x => x.Category))))
            .ForMember(dest => dest.EntryId, opt => opt.MapFrom(src => src.EntryId))
            .ForMember(dest => dest.AllowComments, opt => opt.MapFrom(src => src.AllowComments))
            .ForMember(dest => dest.IsPublic, opt => opt.MapFrom(src => src.IsPublic))
            .ForMember(dest => dest.Syndicated, opt => opt.MapFrom(src => src.Syndicated))
            .ForMember(dest => dest.CreatedUtc, opt => opt.MapFrom(src => src.CreatedDateTime))
            .ForMember(dest => dest.ModifiedLocalTime, opt => opt.MapFrom(src => src.ModifiedDateTime));

            CreateMap <CategoryCacheEntry, CategoryViewModel>()
            .ForMember(dest => dest.Category, opt => opt.MapFrom(src => src.DisplayName))
            .ForMember(dest => dest.CategoryUrl, opt => opt.MapFrom(src => ConvertCategory(src.DisplayName).FirstOrDefault().CategoryUrl));

            CreateMap <CategoryViewModel, CategoryCacheEntry>()
            .ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.Category));

            CreateMap <Comment, CommentViewModel>()
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Author))
            .ForMember(dest => dest.Text, opt => opt.MapFrom(src => src.Content))
            .ForMember(dest => dest.GravatarHashId, opt => opt.MapFrom(src => Utils.GetGravatarHash(src.AuthorEmail)))
            .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.CreatedLocalTime))
            .ForMember(dest => dest.HomePageUrl, opt => opt.MapFrom(src => src.AuthorHomepage))
            .ForMember(dest => dest.BlogPostId, opt => opt.MapFrom(src => src.TargetEntryId))
            .ForMember(dest => dest.CommentId, opt => opt.MapFrom(src => src.EntryId))
            .ForMember(dest => dest.SpamState, opt => opt.MapFrom(src => src.SpamState))
            .ForMember(dest => dest.IsPublic, opt => opt.MapFrom(src => src.IsPublic));;

            CreateMap <AddCommentViewModel, Comment>()
            .ForMember(dest => dest.Author, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.Content, opt => opt.MapFrom(src => src.Content))
            .ForMember(dest => dest.AuthorEmail, opt => opt.MapFrom(src => src.Email))
            .ForMember(dest => dest.TargetEntryId, opt => opt.MapFrom(src => src.TargetEntryId))
            .ForMember(dest => dest.AuthorHomepage, opt => opt.MapFrom(src => src.HomePage));

            CreateMap <Entry, CategoryPostItem>()
            .ForMember(dest => dest.BlogTitle, opt => opt.MapFrom(src => src.Title))
            .ForMember(dest => dest.BlogId, opt => opt.MapFrom(src => _dasBlogSettings.GeneratePostUrl(src)))
            .ForMember(dest => dest.Category, opt => opt.MapFrom(src => src.GetSplitCategories().FirstOrDefault()))
            .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.CreatedLocalTime));

            CreateMap <Tag, TagViewModel>()
            .ForMember(dest => dest.Allowed, opt => opt.MapFrom(src => src.Allowed))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.Attributes, opt => opt.MapFrom(src => src.Attributes));

            CreateMap <TagViewModel, Tag>()
            .ForMember(dest => dest.Allowed, opt => opt.MapFrom(src => src.Allowed))
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
            .ForMember(dest => dest.Attributes, opt => opt.MapFrom(src => src.Attributes));

            CreateMap <ValidCommentTags, ValidCommentTagsViewModel>()
            .ForMember(dest => dest.Tag, opt => opt.MapFrom(src => src.Tag));

            CreateMap <ValidCommentTagsViewModel, ValidCommentTags>()
            .ForMember(dest => dest.Tag, opt => opt.MapFrom(src => src.Tag));
        }
Exemplo n.º 4
0
        public urlset GetGoogleSiteMap()
        {
            var root = new urlset();

            root.url = new urlCollection();

            //Default first...
            var basePage = new url(dasBlogSettings.GetBaseUrl(), DateTime.Now, changefreq.daily, 1.0M);

            root.url.Add(basePage);

            var archivePage = new url(dasBlogSettings.RelativeToRoot("archive"), DateTime.Now, changefreq.daily, 1.0M);

            root.url.Add(archivePage);

            var categorpage = new url(dasBlogSettings.RelativeToRoot("category"), DateTime.Now, changefreq.daily, 1.0M);

            root.url.Add(categorpage);

            //All Pages
            var entryCache = dataService.GetEntries(false);

            foreach (var e in entryCache)
            {
                if (e.IsPublic)
                {
                    //Start with a RARE change freq...newer posts are more likely to change more often.
                    // The older a post, the less likely it is to change...
                    var freq = changefreq.daily;

                    //new stuff?
                    if (e.CreatedLocalTime < DateTime.Now.AddMonths(-9))
                    {
                        freq = changefreq.yearly;
                    }
                    else if (e.CreatedLocalTime < DateTime.Now.AddDays(-30))
                    {
                        freq = changefreq.monthly;
                    }
                    else if (e.CreatedLocalTime < DateTime.Now.AddDays(-7))
                    {
                        freq = changefreq.weekly;
                    }
                    if (e.CreatedLocalTime > DateTime.Now.AddDays(-2))
                    {
                        freq = changefreq.hourly;
                    }

                    //Add comments pages, since comments have indexable content...
                    // Only add comments if we aren't showing comments on permalink pages already
                    if (dasBlogSettings.SiteConfiguration.ShowCommentsWhenViewingEntry == false)
                    {
                        var commentPage = new url(dasBlogSettings.GetCommentViewUrl(e.CompressedTitle), e.CreatedLocalTime, freq, 0.7M);
                        root.url.Add(commentPage);
                    }

                    //then add permalinks
                    var permaPage = new url(dasBlogSettings.RelativeToRoot(dasBlogSettings.GeneratePostUrl(e)), e.CreatedLocalTime, freq, 0.9M);
                    root.url.Add(permaPage);
                }
            }

            //All Categories
            var catCache = dataService.GetCategories();

            foreach (var cce in catCache)
            {
                if (cce.IsPublic)
                {
                    var catname = Entry.InternalCompressTitle(cce.Name, dasBlogSettings.SiteConfiguration.TitlePermalinkSpaceReplacement).ToLower();
                    var caturl  = new url(dasBlogSettings.GetCategoryViewUrl(catname), DateTime.Now, changefreq.weekly, 0.6M);
                    root.url.Add(caturl);
                }
            }

            return(root);
        }
Exemplo n.º 5
0
        private RssRoot GetRssCore(string category, int maxDayCount, int maxEntryCount)
        {
            EntryCollection entries = null;

            //We only build the entries if blogcore doesn't exist and we'll need them later...
            if (dataService.GetLastEntryUpdate() == DateTime.MinValue)
            {
                entries = BuildEntries(category, maxDayCount, maxEntryCount);
            }

            var documentRoot = new RssRoot();;

            //However, if we made it this far, the not-modified check didn't work, and we may not have entries...
            if (entries == null)
            {
                entries = BuildEntries(category, maxDayCount, maxEntryCount);
            }

            documentRoot.Namespaces.Add("dc", "http://purl.org/dc/elements/1.1/");
            documentRoot.Namespaces.Add("trackback", "http://madskills.com/public/xml/rss/module/trackback/");
            documentRoot.Namespaces.Add("pingback", "http://madskills.com/public/xml/rss/module/pingback/");
            documentRoot.Namespaces.Add("webfeeds", "http://webfeeds.org/rss/1.0");
            if (dasBlogSettings.SiteConfiguration.EnableComments)
            {
                documentRoot.Namespaces.Add("wfw", "http://wellformedweb.org/CommentAPI/");
                documentRoot.Namespaces.Add("slash", "http://purl.org/rss/1.0/modules/slash/");
            }
            if (dasBlogSettings.SiteConfiguration.EnableGeoRss)
            {
                documentRoot.Namespaces.Add("georss", "http://www.georss.org/georss");
            }

            var ch = new RssChannel();

            if (category == null)
            {
                ch.Title = dasBlogSettings.SiteConfiguration.Title;
            }
            else
            {
                ch.Title = dasBlogSettings.SiteConfiguration.Title + " - " + category;
            }

            if (string.IsNullOrEmpty(dasBlogSettings.SiteConfiguration.Description))
            {
                ch.Description = dasBlogSettings.SiteConfiguration.Subtitle;
            }
            else
            {
                ch.Description = dasBlogSettings.SiteConfiguration.Description;
            }

            ch.Link      = dasBlogSettings.GetBaseUrl();
            ch.Copyright = dasBlogSettings.SiteConfiguration.Copyright;
            if (!string.IsNullOrEmpty(dasBlogSettings.SiteConfiguration.RssLanguage))
            {
                ch.Language = dasBlogSettings.SiteConfiguration.RssLanguage;
            }

            ch.ManagingEditor = dasBlogSettings.SiteConfiguration.Contact;
            ch.WebMaster      = dasBlogSettings.SiteConfiguration.Contact;
            ch.Image          = null;

            if (!string.IsNullOrWhiteSpace(dasBlogSettings.SiteConfiguration.ChannelImageUrl))
            {
                var channelImage = new DasBlog.Services.Rss.Rss20.ChannelImage();
                channelImage.Title = ch.Title;
                channelImage.Link  = ch.Link;
                if (dasBlogSettings.SiteConfiguration.ChannelImageUrl.StartsWith("http"))
                {
                    channelImage.Url = dasBlogSettings.SiteConfiguration.ChannelImageUrl;
                }
                else
                {
                    channelImage.Url = dasBlogSettings.RelativeToRoot(dasBlogSettings.SiteConfiguration.ChannelImageUrl);
                }
                ch.Image = channelImage;
            }

            var xdoc         = new XmlDocument();
            var rootElements = new List <XmlElement>();

            var wflogo = xdoc.CreateElement("webfeeds", "logo", "http://webfeeds.org/rss/1.0");

            wflogo.InnerText = dasBlogSettings.RelativeToRoot(dasBlogSettings.SiteConfiguration.ChannelImageUrl);
            rootElements.Add(wflogo);

            var wfanalytics = xdoc.CreateElement("webfeeds", "analytics", "http://webfeeds.org/rss/1.0");
            var attribId    = xdoc.CreateAttribute("id");

            attribId.Value = dasBlogSettings.MetaTags.GoogleAnalyticsID;
            wfanalytics.Attributes.Append(attribId);

            var attribEngine = xdoc.CreateAttribute("engine");

            attribEngine.Value = "GoogleAnalytics";
            wfanalytics.Attributes.Append(attribEngine);

            rootElements.Add(wfanalytics);

            ch.anyElements = rootElements.ToArray();

            ch.Items = new RssItemCollection();
            documentRoot.Channels.Add(ch);

            foreach (var entry in entries)
            {
                if (entry.IsPublic == false || entry.Syndicated == false)
                {
                    continue;
                }
                var doc2        = new XmlDocument();
                var anyElements = new List <XmlElement>();
                var item        = new RssItem();
                item.Title            = entry.Title;
                item.Guid             = new DasBlog.Services.Rss.Rss20.Guid();
                item.Guid.IsPermaLink = false;
                item.Guid.Text        = dasBlogSettings.GetPermaLinkUrl(entry.EntryId);
                item.Link             = dasBlogSettings.RelativeToRoot(dasBlogSettings.GeneratePostUrl(entry));
                User user = dasBlogSettings.GetUserByEmail(entry.Author);

                XmlElement trackbackPing = doc2.CreateElement("trackback", "ping", "http://madskills.com/public/xml/rss/module/trackback/");
                trackbackPing.InnerText = dasBlogSettings.GetTrackbackUrl(entry.EntryId);
                anyElements.Add(trackbackPing);

                XmlElement pingbackServer = doc2.CreateElement("pingback", "server", "http://madskills.com/public/xml/rss/module/pingback/");
                pingbackServer.InnerText = dasBlogSettings.PingBackUrl;
                anyElements.Add(pingbackServer);

                XmlElement pingbackTarget = doc2.CreateElement("pingback", "target", "http://madskills.com/public/xml/rss/module/pingback/");
                pingbackTarget.InnerText = dasBlogSettings.GetPermaLinkUrl(entry.EntryId);
                anyElements.Add(pingbackTarget);

                XmlElement dcCreator = doc2.CreateElement("dc", "creator", "http://purl.org/dc/elements/1.1/");
                if (user != null)
                {
                    dcCreator.InnerText = user.DisplayName;
                }
                anyElements.Add(dcCreator);

                // Add GeoRSS if it exists.
                if (dasBlogSettings.SiteConfiguration.EnableGeoRss)
                {
                    var latitude  = new Nullable <double>();
                    var longitude = new Nullable <double>();

                    if (entry.Latitude.HasValue)
                    {
                        latitude = entry.Latitude;
                    }
                    else
                    {
                        if (dasBlogSettings.SiteConfiguration.EnableDefaultLatLongForNonGeoCodedPosts)
                        {
                            latitude = dasBlogSettings.SiteConfiguration.DefaultLatitude;
                        }
                    }

                    if (entry.Longitude.HasValue)
                    {
                        longitude = entry.Longitude;
                    }
                    else
                    {
                        if (dasBlogSettings.SiteConfiguration.EnableDefaultLatLongForNonGeoCodedPosts)
                        {
                            longitude = dasBlogSettings.SiteConfiguration.DefaultLongitude;
                        }
                    }

                    if (latitude.HasValue && longitude.HasValue)
                    {
                        XmlElement geoLoc = doc2.CreateElement("georss", "point", "http://www.georss.org/georss");
                        geoLoc.InnerText = String.Format(CultureInfo.InvariantCulture, "{0:R} {1:R}", latitude, longitude);
                        anyElements.Add(geoLoc);
                    }
                }

                if (dasBlogSettings.SiteConfiguration.EnableComments)
                {
                    if (entry.AllowComments)
                    {
                        XmlElement commentApi = doc2.CreateElement("wfw", "comment", "http://wellformedweb.org/CommentAPI/");
                        commentApi.InnerText = dasBlogSettings.GetCommentViewUrl(dasBlogSettings.GeneratePostUrl(entry));
                        anyElements.Add(commentApi);
                    }

                    XmlElement commentRss = doc2.CreateElement("wfw", "commentRss", "http://wellformedweb.org/CommentAPI/");
                    commentRss.InnerText = dasBlogSettings.GetEntryCommentsRssUrl(entry.EntryId);
                    anyElements.Add(commentRss);

                    //for RSS conformance per FeedValidator.org
                    int commentsCount = dataService.GetPublicCommentsFor(entry.EntryId).Count;
                    if (commentsCount > 0)
                    {
                        XmlElement slashComments = doc2.CreateElement("slash", "comments", "http://purl.org/rss/1.0/modules/slash/");
                        slashComments.InnerText = commentsCount.ToString();
                        anyElements.Add(slashComments);
                    }
                    item.Comments = dasBlogSettings.GetCommentViewUrl(dasBlogSettings.GeneratePostUrl(entry));
                }
                item.Language = entry.Language;

                if (entry.Categories != null && entry.Categories.Length > 0)
                {
                    if (item.Categories == null)
                    {
                        item.Categories = new RssCategoryCollection();
                    }

                    string[] cats = entry.Categories.Split(';');
                    foreach (string c in cats)
                    {
                        RssCategory cat      = new RssCategory();
                        string      cleanCat = c.Replace('|', '/');
                        cat.Text = cleanCat;
                        item.Categories.Add(cat);
                    }
                }
                if (entry.Attachments.Count > 0)
                {
                    // RSS currently supports only a single enclsoure so we return the first one
                    item.Enclosure        = new Enclosure();
                    item.Enclosure.Url    = entry.Attachments[0].Name;
                    item.Enclosure.Type   = entry.Attachments[0].Type;
                    item.Enclosure.Length = entry.Attachments[0].Length.ToString();
                }
                item.PubDate = entry.CreatedUtc.ToString("R");
                if (ch.LastBuildDate == null || ch.LastBuildDate.Length == 0)
                {
                    ch.LastBuildDate = item.PubDate;
                }

                if (!dasBlogSettings.SiteConfiguration.AlwaysIncludeContentInRSS &&
                    entry.Description != null &&
                    entry.Description.Trim().Length > 0)
                {
                    item.Description = PreprocessItemContent(entry.EntryId, entry.Description);
                }
                else
                {
                    if (dasBlogSettings.SiteConfiguration.HtmlTidyContent == false)
                    {
                        item.Description = "<div>" + PreprocessItemContent(entry.EntryId, entry.Content) + "</div>";
                    }
                    else
                    {
                        item.Description = ContentFormatter.FormatContentAsHTML(PreprocessItemContent(entry.EntryId, entry.Content));


                        try
                        {
                            string xhtml = ContentFormatter.FormatContentAsXHTML(PreprocessItemContent(entry.EntryId, entry.Content));
                            doc2.LoadXml(xhtml);
                            anyElements.Add((XmlElement)doc2.SelectSingleNode("//*[local-name() = 'body'][namespace-uri()='http://www.w3.org/1999/xhtml']"));
                        }
                        catch //(Exception ex)
                        {
                            //Debug.Write(ex.ToString());
                            // absorb
                        }
                    }
                }

                item.anyElements = anyElements.ToArray();
                ch.Items.Add(item);
            }

            return(documentRoot);
        }