public BlogEntry GetSingleBlogEntryByLink(String blogGuid, String link, Boolean ignoreFooter, Boolean metaDataOnly) { using (DataContext db = new DataContext(ServiceConfiguration.ConnectionString)) { //+ ensure blog entry exists BlogLINQ blogLinq; Validator.EnsureBlogExists(blogGuid, out blogLinq, db); //+ BlogEntryLINQ blogEntryLinq = this.GetBlogEntryByUrlMapping(blogLinq.BlogId, link, db); if (blogEntryLinq != null) { return(new BlogEntry { Title = blogEntryLinq.BlogEntryTitle, Content = metaDataOnly ? String.Empty : CheckFooter(ignoreFooter, blogEntryLinq.BlogEntryText), Guid = blogEntryLinq.BlogEntryGuid, Status = blogEntryLinq.BlogEntryStatusId, BlogEntryTypeGuid = blogEntryLinq.BlogEntryType.BlogEntryTypeGuid, AllowCommentStatus = (AllowCommentStatus)blogEntryLinq.BlogEntryCommentAllowStatusId, PostDateTime = blogEntryLinq.BlogEntryPostDateTime, ModifyDateTime = blogEntryLinq.BlogEntryModifyDateTime, MappingNameList = new List <String>( blogEntryLinq.BlogEntryUrlMappings.Select(p => p.BlogEntryUrlMappingName) ), LabelList = new List <Label>( blogEntryLinq.LabelBlogEntries.Select(p => new Label { Guid = p.Label.LabelGuid, FriendlyTitle = p.Label.LabelFriendlyTitle, Title = p.Label.LabelTitle }) ), AuthorList = new List <Author>( blogEntryLinq.BlogEntryAuthors.Select(p => new Author { Name = p.Author.AuthorName, Email = p.Author.AuthorEmail }) ), CommentList = metaDataOnly ? new List <Comment>() : new List <Comment>( blogEntryLinq.Comments.Where(p => p.CommentModerated == false) .Select(p => new Comment { Text = p.CommentText, DateTime = p.CommentPostDate, Website = p.CommentWebsite, Guid = p.CommentGuid, Email = p.CommentEmail, Name = p.CommentAuthor }) ) }); } //+ return(null); } }
internal static void EnsureBlogEntryExists(String blogEntryGuid, out BlogEntryLINQ blogEntryLinq, String message, MinimaServiceLINQDataContext db) { Func <BlogEntryLINQ, Boolean> blogEntryExists = x => x.BlogEntryGuid == blogEntryGuid; blogEntryLinq = (from p in db.BlogEntries where p.BlogEntryGuid == blogEntryGuid select p).FirstOrDefault(); if (blogEntryLinq == null) { throw new ArgumentException(message); } }
internal static void EnsureBlogExistsViaBlogEntryOrBlogGuid(String blogGuid, out BlogLINQ blogLinq, String message, MinimaServiceLINQDataContext db) { Func <BlogLINQ, Boolean> blogExists = x => x.BlogGuid == blogGuid; blogLinq = db.Blogs.SingleOrDefault(blogExists); if (blogLinq == null) { //+ perhaps this is actually a blog entry guid Func <BlogEntryLINQ, Boolean> blogEntryExists = x => x.BlogEntryGuid == blogGuid; BlogEntryLINQ blogEntryLinq = db.BlogEntries.SingleOrDefault(blogEntryExists); if (blogEntryLinq != null) { blogLinq = blogEntryLinq.Blog; } else { throw new ArgumentException(message); } } }
public static String Build(BlogEntryLINQ blogEntryLinq, BlogLINQ blogLinq) { DateTime postDateTime = blogEntryLinq.BlogEntryPostDateTime; BlogEntryUrlMappingLINQ blogEntryUrlMappingLinq = blogEntryLinq.BlogEntryUrlMappings.FirstOrDefault(); if (blogEntryUrlMappingLinq == null) { return(String.Empty); } String urlMapping = blogEntryUrlMappingLinq.BlogEntryUrlMappingName; String baseBlogUrl = blogLinq.BlogPrimaryUrl; //+ StringBuilder blogEntryPage = new StringBuilder(); blogEntryPage.Append(postDateTime.Year); blogEntryPage.Append("/"); String month = String.Empty; if (postDateTime.Month.ToString().Length < 2) { month = "0" + postDateTime.Month.ToString(); } else { month = postDateTime.Month.ToString(); } blogEntryPage.Append(String.Format("{0:00}/", postDateTime.Month)); //+ if (!String.IsNullOrEmpty(urlMapping)) { blogEntryPage.Append(urlMapping); } else { throw new FormatException("BlogEntryPostURlMapping not set"); } //+ return(String.Format("{0}{1}", baseBlogUrl, blogEntryPage.ToString())); }
public List <BlogEntry> GetNetBlogEntryList(String blogGuid, String label, String archive, String link, Int32 maxBlogEntryCount, Boolean ignoreFooter) { IQueryable <BlogEntryLINQ> blogEntryLinqList = null; using (DataContext db = new DataContext(ServiceConfiguration.ConnectionString)) { //+ ensure blog exists BlogLINQ blogLinq; Validator.EnsureBlogExists(blogGuid, out blogLinq, db); //+ Func <BlogEntryLINQ, BlogEntry> blogEntryTransformation = be => new BlogEntry { Title = be.BlogEntryTitle, Content = CheckFooter(ignoreFooter, be.BlogEntryText), Guid = be.BlogEntryGuid, Status = be.BlogEntryStatusId, BlogEntryTypeGuid = be.BlogEntryType.BlogEntryTypeGuid, AllowCommentStatus = (AllowCommentStatus)be.BlogEntryCommentAllowStatusId, PostDateTime = be.BlogEntryPostDateTime, ModifyDateTime = be.BlogEntryModifyDateTime, MappingNameList = new List <String>( be.BlogEntryUrlMappings.OrderBy(p => p.BlogEntryUrlMappingPrimary).Select(p => p.BlogEntryUrlMappingName) ), LabelList = new List <Label>( be.LabelBlogEntries.Select(p => new Label { Guid = p.Label.LabelGuid, FriendlyTitle = p.Label.LabelFriendlyTitle, Title = p.Label.LabelTitle }) ), AuthorList = new List <Author>( be.BlogEntryAuthors.Select(p => new Author { Name = p.Author.AuthorName, Email = p.Author.AuthorEmail }) ), CommentList = new List <Comment>( be.Comments.Where(p => p.CommentModerated == false) .Select(p => new Comment { Text = p.CommentText, DateTime = p.CommentPostDate, Website = p.CommentWebsite, Guid = p.CommentGuid, Email = p.CommentEmail, Name = p.CommentAuthor }) ) }; //+ label? if (!String.IsNullOrEmpty(label)) { maxBlogEntryCount = 0; blogEntryLinqList = (from be in db.BlogEntries join lbe in db.LabelBlogEntries on be.BlogEntryId equals lbe.BlogEntryId join l in db.Labels on lbe.LabelId equals l.LabelId where be.BlogId == blogLinq.BlogId && l.LabelNetTitle.ToLower() == label.ToLower() && (be.BlogEntryStatusId == 1 || be.BlogEntryStatusId == 4) select be); } //+ archive? if ((blogEntryLinqList == null || blogEntryLinqList.Count() == 0) && !String.IsNullOrEmpty(archive)) { maxBlogEntryCount = 0; String[] parts = archive.Split("/".ToCharArray()); Int32 year = Int32.Parse(parts[0]); Int32 month = Int32.Parse(parts[1]); blogEntryLinqList = db.BlogEntries.Where(p => p.BlogId == blogLinq.BlogId && p.BlogEntryPostDateTime.Month == month && p.BlogEntryPostDateTime.Year == year && p.BlogEntryStatusId == 1); } //+ link? if ((blogEntryLinqList == null || blogEntryLinqList.Count() == 0) && !String.IsNullOrEmpty(link)) { BlogEntryLINQ blogEntryLinq = this.GetBlogEntryByUrlMapping(blogLinq.BlogId, link, db); if (blogEntryLinq != null) { return(new List <BlogEntry>(new BlogEntry[] { blogEntryTransformation.Invoke(blogEntryLinq) })); } } //+ other? if (blogEntryLinqList == null || blogEntryLinqList.Count() == 0) { blogEntryLinqList = db.BlogEntries.Where(p => p.BlogId == blogLinq.BlogId && p.BlogEntryStatusId == 1); } //+ return(blogEntryLinqList .Select(blogEntryTransformation) .OrderByDescending(be => be.PostDateTime) .Take(maxBlogEntryCount == 0 ? Int32.MaxValue : maxBlogEntryCount) .ToList()); } }
public String PostBlogEntry(String blogGuid, List <Author> authorList, String title, String content, DateTime dateTime, String blogEntryTypeGuid, List <Label> labelList, Boolean publish) { using (DataContext db = new DataContext(ServiceConfiguration.ConnectionString)) { //+ validate BlogLINQ blogLinq; Validator.EnsureBlogExists(blogGuid, out blogLinq, db); BlogEntryTypeLINQ blogEntryTypeLinq = null; if (!String.IsNullOrEmpty(blogEntryTypeGuid)) { Validator.EnsureBlogEntryTypeExists(blogEntryTypeGuid, out blogEntryTypeLinq, db); } if (authorList == null) { authorList = new List <Author>(); } List <AuthorLINQ> authorLinqList; Validator.EnsureEachAuthorExists(authorList, out authorLinqList, db); if (labelList == null) { labelList = new List <Label>(); } List <LabelLINQ> labelLinqList; Validator.EnsureEachLabelExists(labelList, out labelLinqList, db); Validator.IsNotZero(authorLinqList.Count, "At least one author is required."); //+ using (TransactionScope scope = new TransactionScope()) { BlogEntryLINQ blogEntryLinq = new BlogEntryLINQ(); blogEntryLinq.BlogId = blogLinq.BlogId; blogEntryLinq.BlogEntryTitle = title; blogEntryLinq.BlogEntryTypeId = 1; blogEntryLinq.BlogEntryText = content; if (!String.IsNullOrEmpty(blogEntryTypeGuid)) { blogEntryLinq.BlogEntryTypeId = blogEntryTypeLinq.BlogEntryTypeId; } blogEntryLinq.BlogEntryStatus = db.BlogEntryStatus.SingleOrDefault(p => p.BlogEntryStatusId == (publish ? 1 : 3)); blogEntryLinq.BlogEntryCommentAllowStatus = db.BlogEntryCommentAllowStatus.SingleOrDefault(p => p.BlogEntryCommentAllowStatusId == 1); blogEntryLinq.BlogEntryGuid = Themelia.GuidCreator.GetNewGuid(); if (dateTime.Year >= 1950) { blogEntryLinq.BlogEntryPostDateTime = dateTime; } else { blogEntryLinq.BlogEntryPostDateTime = DateTime.Now; } blogEntryLinq.BlogEntryModifyDateTime = DateTime.Now; //+ db.BlogEntries.InsertOnSubmit(blogEntryLinq); db.SubmitChanges(); //+ BlogEntryUrlMappingLINQ blogEntryUrlMappingLinq = new BlogEntryUrlMappingLINQ(); blogEntryUrlMappingLinq.BlogEntryId = blogEntryLinq.BlogEntryId; blogEntryUrlMappingLinq.BlogEntryUrlMappingName = BlogEntryHelper.BuildBlogEntryLink(blogEntryLinq.BlogEntryPostDateTime, CreateBlogEntryPostUrlMapping(title)); blogEntryUrlMappingLinq.BlogEntryUrlMappingPrimary = true; db.BlogEntryUrlMappings.InsertOnSubmit(blogEntryUrlMappingLinq); //+ db.SubmitChanges(); //+ label foreach (LabelLINQ labelLinq in labelLinqList) { LabelBlogEntryLINQ labelBlogEntryLinq = new LabelBlogEntryLINQ(); labelBlogEntryLinq.BlogEntryId = blogEntryLinq.BlogEntryId; labelBlogEntryLinq.LabelId = labelLinq.LabelId; //+ db.LabelBlogEntries.InsertOnSubmit(labelBlogEntryLinq); } db.SubmitChanges(); //+ author foreach (AuthorLINQ authorLinq in authorLinqList) { BlogEntryAuthorLINQ blogEntryAuthorLinq = new BlogEntryAuthorLINQ(); blogEntryAuthorLinq.BlogEntryId = blogEntryLinq.BlogEntryId; blogEntryAuthorLinq.AuthorId = authorLinq.AuthorId; //+ db.BlogEntryAuthors.InsertOnSubmit(blogEntryAuthorLinq); } db.SubmitChanges(); //+ scope.Complete(); //+ return(blogEntryLinq.BlogEntryGuid); } } }
//- ~EnsureBlogEntryExists -// internal static void EnsureBlogEntryExists(String blogEntryGuid, out BlogEntryLINQ blogEntryLinq, MinimaServiceLINQDataContext db) { EnsureBlogEntryExists(blogEntryGuid, out blogEntryLinq, Message.InvalidBlogEntryGuid, db); }