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