//Query6:Получить следующую структуру (передать Id поста в параметры) //Пост //Самый длинный коммент поста //Самый залайканный коммент поста //Количество комментов под постом где или 0 лайков или длина текста< 80 public static PostStruct Query6(int postId) { PostStruct postStruct = new PostStruct(); try { var data = GetEntities(); FullPost currentPost = data.SelectMany(u => u.Posts) .Where(u => u.Id == postId) .FirstOrDefault(); postStruct.LongestComm = currentPost.Comments .OrderBy(c => c.Body.Length) .LastOrDefault(); postStruct.LikestComm = currentPost.Comments .OrderBy(c => c.Likes) .LastOrDefault(); postStruct.LowRatedCommsCount = currentPost.Comments .Where(p => p.Likes == 0 || p.Body.Length < 80).ToList().Count(); } catch (Exception ex) { Console.Clear(); Console.WriteLine(ex.Message); Console.ReadKey(); } return(postStruct); }
public async Task <string> NewPost( string blogId, string userName, string password, PostStruct newPost, bool publish, string authorDisplayName ) { var post = mapper.GetPostFromStruct(newPost); post.BlogId = blogId; post.Id = Guid.NewGuid().ToString(); post.Author = authorDisplayName; post.IsPublished = publish; //TODO: resolve timezone for pubdate? //post.PubDate = post.PubDate.AddHours(-6); await blogService.Create( blogId, userName, password, post, publish ).ConfigureAwait(false); return(post.Id); }
public PostStruct GetStructFromPost( IPost post, string postUrl, bool commentsOpen ) { PostStruct p = new PostStruct(); p.author = post.Author; p.categories = post.Categories; p.commentPolicy = commentsOpen ? "1" : "0"; if (!string.IsNullOrWhiteSpace(post.DraftContent)) { p.description = post.DraftContent; } else { p.description = post.Content; } p.excerpt = post.MetaDescription; p.link = postUrl; if (post.PubDate.HasValue) { p.postDate = post.PubDate.Value; } p.postId = post.Id; p.publish = post.IsPublished; p.slug = post.Slug; p.title = post.Title; return(p); }
public async Task <bool> EditPost( string blogId, string postId, string userName, string password, PostStruct post, bool publish) { var existing = await blogService.GetPost( blogId, postId, userName, password ).ConfigureAwait(false); if (existing == null) { return(false); } var update = mapper.GetPostFromStruct(post); existing.Title = update.Title; existing.MetaDescription = update.MetaDescription; existing.Content = update.Content; // TODO: does OLW enable changing pubdate? //if (existing.PubDate != update.PubDate) //{ // await blogService.HandlePubDateAboutToChange(existing, update.PubDate).ConfigureAwait(false); // existing.PubDate = update.PubDate; //} if (!string.Equals(existing.Slug, update.Slug, StringComparison.OrdinalIgnoreCase)) { // slug changed make sure the new slug is available var requestedSlug = ContentUtils.CreateSlug(update.Slug); var available = await blogService.SlugIsAvailable(blogId, requestedSlug).ConfigureAwait(false); if (available) { existing.Slug = requestedSlug; } } existing.Categories = update.Categories; existing.IsPublished = publish; await blogService.Update( blogId, userName, password, existing, publish).ConfigureAwait(false); return(true); }
public async Task <string> NewPost( string blogId, string userName, string password, PostStruct newPost, bool publish, string authorDisplayName ) { var permission = await _security.ValidatePermissions( blogId, userName, password, CancellationToken.None ).ConfigureAwait(false); if (!permission.CanEditPosts) { _log.LogWarning($"rejecting new post because user {userName} cannot edit posts"); return(null); } var post = _mapper.GetPostFromStruct(newPost); post.BlogId = blogId; post.Id = Guid.NewGuid().ToString(); post.Author = authorDisplayName; post.CreatedByUser = permission.DisplayName; if (publish) { post.IsPublished = true; if (post.IsPublished) { post.PubDate = DateTime.UtcNow; } } else { post.DraftAuthor = post.Author; post.DraftContent = post.Content; post.Content = null; post.PubDate = null; } var convertToRelativeUrls = true; await _blogService.Create(post, convertToRelativeUrls).ConfigureAwait(false); if (publish) { await _blogService.FirePublishEvent(post); } return(post.Id); }
public void AddPostTest() { // Arrange PostStruct postStruct = new PostStruct(); // Act postCollectionMemoryDAL.Add(postStruct); // Assert }
public ActionResult Index(int?userId) { PostService Service = new PostService(); PostStruct post = null; if (ModelState.IsValid) { post = Service.GetPostStructure(userId); } return(View(post)); }
public void Update(PostStruct postStruct) { using (GetConnection()) { conn.Open(); SqlCommand cmd = new SqlCommand("SP_PostUpdate", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@filePath", postStruct.FilePath); cmd.Parameters.AddWithValue("@title", postStruct.Title); cmd.Parameters.AddWithValue("@account_id", postStruct.AccountId); cmd.Parameters.AddWithValue("@category_id", postStruct.CategoryId); cmd.Parameters.AddWithValue("@status_id", postStruct.StatusId); cmd.ExecuteNonQuery(); conn.Close(); } }
//private IPostCommentPolicyResolver commentPolicy; //private IPostUrlResolver urlResolver; public Post GetPostFromStruct(PostStruct postStruct) { Post p = new Post(); p.Author = postStruct.author; p.Categories = postStruct.categories; p.Content = postStruct.description; p.MetaDescription = postStruct.excerpt; p.Id = postStruct.postId; p.IsPublished = postStruct.publish; if (postStruct.postDate != null) { p.PubDate = postStruct.postDate; } p.Slug = postStruct.slug; p.Title = postStruct.title; return(p); }
public void AddPostTest() { // Arrange PostStruct postStruct = new PostStruct(1, "C:\\Users\\guita\\Documents\\School\\Eindhoven\\Semester2Herkansing\\Iteratie 4\\KillerAppMemePlatform2\\KillerAppMemePlatform1\\UploadedFilesBestSong.PNG - post.png", "Title", 1, 0, 1); Post testPost = new Post(postStruct); // Act PostCollection postCollection = new PostCollection(); postCollection.Add(postStruct); List <IPost> post = postCollection.GetAllPosts(); post.Reverse(); IPost lastAdded = post[0]; // Assert Assert.AreEqual(lastAdded.PostId, testPost.PostId); }
public PostStruct GetStructFromPost( IPost post, string postUrl, bool commentsOpen ) { PostStruct p = new PostStruct(); p.author = post.Author; p.categories = post.Categories; p.commentPolicy = commentsOpen ? "1" : "0"; p.description = post.Content; p.excerpt = post.MetaDescription; p.link = postUrl; p.postDate = post.PubDate; p.postId = post.Id; p.publish = post.IsPublished; p.slug = post.Slug; p.title = post.Title; return(p); }
/// <summary> /// Creates a Metaweblog Post object from the XML struct /// </summary> /// <param name="paramNode"> /// XML contains a Metaweblog Post Struct /// </param> /// <returns> /// Metaweblog Post Struct Obejct /// </returns> private static PostStruct GetPost(XElement paramNode) { var temp = new PostStruct(); // Require Title and Description //var title = node.SelectSingleNode("value/struct/member[name='title']"); var titleMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "title" ); if (titleMember == null) { throw new MetaWeblogException("05", "Page Struct Element, Title, not Sent."); } //temp.title = title.LastChild.InnerText; temp.title = titleMember.Descendants("string").FirstOrDefault().Value; //var description = node.SelectSingleNode("value/struct/member[name='description']"); var descriptionMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "description" ); if (descriptionMember == null) { throw new MetaWeblogException("05", "Page Struct Element, Description, not Sent."); } //temp.description = description.LastChild.InnerText; temp.description = descriptionMember.Descendants("string").FirstOrDefault().Value; //var link = node.SelectSingleNode("value/struct/member[name='link']"); var linkMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "link" ); //temp.link = link == null ? string.Empty : link.LastChild.InnerText; temp.link = linkMember == null ? string.Empty : linkMember.Descendants("string").FirstOrDefault().Value; //var allowComments = node.SelectSingleNode("value/struct/member[name='mt_allow_comments']"); //temp.commentPolicy = allowComments == null ? string.Empty : allowComments.LastChild.InnerText; var allowCommentsMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "mt_allow_comments" ); //temp.commentPolicy = allowComments == null ? string.Empty : (allowComments.LastNode as XElement).Value; temp.commentPolicy = allowCommentsMember == null ? string.Empty : (allowCommentsMember.LastNode as XElement).Value; //var excerpt = node.SelectSingleNode("value/struct/member[name='mt_excerpt']"); //temp.excerpt = excerpt == null ? string.Empty : excerpt.LastChild.InnerText; var excerptMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "mt_excerpt" ); temp.excerpt = excerptMember == null ? string.Empty : (excerptMember.LastNode as XElement).Value; //var slug = node.SelectSingleNode("value/struct/member[name='wp_slug']"); //temp.slug = slug == null ? string.Empty : slug.LastChild.InnerText; //var slug = paramNode.Descendants("member") // .First(i => (string)i.Attribute("name") == "wp_slug"); var slugMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "wp_slug" ); temp.slug = slugMember == null ? string.Empty : (slugMember.LastNode as XElement).Value; //var authorId = node.SelectSingleNode("value/struct/member[name='wp_author_id']"); //temp.author = authorId == null ? string.Empty : authorId.LastChild.InnerText; var authorMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "wp_author_id" ); temp.author = authorMember == null ? string.Empty : (authorMember.LastNode as XElement).Value; var cats = new List <string>(); //var categories = node.SelectSingleNode("value/struct/member[name='categories']"); var categoriesMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "categories" ); if (categoriesMember != null) { var categoryArray = categoriesMember.LastNode as XElement; //var categoryArrayNodes = categoryArray.SelectNodes("array/data/value/string"); var categoryArrayNodes = categoryArray.Descendants("string"); if (categoryArrayNodes != null) { cats.AddRange(categoryArrayNodes.Cast <XElement>().Select( catnode => catnode.Value)); } } temp.categories = cats; // postDate has a few different names to worry about //var dateCreated = node.SelectSingleNode("value/struct/member[name='dateCreated']"); var dateCreatedMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "dateCreated" ); //var pubDate = node.SelectSingleNode("value/struct/member[name='pubDate']"); var pubDateMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "pubDate" ); if (dateCreatedMember != null) { try { var tempDate = (dateCreatedMember.LastNode as XElement).Value; temp.postDate = DateTime.ParseExact( tempDate, "yyyyMMdd'T'HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); } catch (Exception ex) { // Ignore PubDate Error Debug.WriteLine(ex.Message); } } else if (pubDateMember != null) { try { var tempPubDate = (pubDateMember.LastNode as XElement).Value; temp.postDate = DateTime.ParseExact( tempPubDate, "yyyyMMdd'T'HH':'mm':'ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); } catch (Exception ex) { // Ignore PubDate Error Debug.WriteLine(ex.Message); } } // WLW tags implementation using mt_keywords var tags = new List <string>(); var keyWordsMember = paramNode.Descendants("member") .FirstOrDefault(p => p.Element("name").Value == "mt_keywords" ); if (keyWordsMember != null) { var tagsList = (keyWordsMember.LastNode as XElement).Value; foreach (var item in tagsList.Split(',').Where(item => string.IsNullOrEmpty(tags.Find(t => t.Equals(item.Trim(), StringComparison.OrdinalIgnoreCase))))) { tags.Add(item.Trim()); } } temp.tags = tags; return(temp); }
public void Add(PostStruct postStruct) { }
public bool Update(PostStruct postStruct) { throw new NotImplementedException(); }
public void Add(PostStruct postStruct) { Context.Add(postStruct); }
public async Task <bool> EditPost( string blogId, string postId, string userName, string password, PostStruct post, bool publish) { var permission = await _security.ValidatePermissions( blogId, userName, password, CancellationToken.None ).ConfigureAwait(false); if (!permission.CanEditPosts) { _log.LogWarning($"rejecting new post because user {userName} cannot edit posts"); return(false); } var existing = await _blogService.GetPost(postId).ConfigureAwait(false); if (existing == null) { _log.LogError($"post not found for id {postId}"); return(false); } if (!string.IsNullOrWhiteSpace(existing.TemplateKey)) { _log.LogError($"post {postId} uses a content template and cannot be edited via metaweblog api"); return(false); } if (existing.ContentType != ProjectConstants.HtmlContentType) { _log.LogError($"post {postId} uses a content type {existing.ContentType} and cannot be edited via metaweblog api"); return(false); } var history = existing.CreateHistory(userName); var update = _mapper.GetPostFromStruct(post); existing.Title = update.Title; existing.MetaDescription = update.MetaDescription; existing.LastModified = DateTime.UtcNow; existing.LastModifiedByUser = permission.DisplayName; if (!string.Equals(existing.Slug, update.Slug, StringComparison.OrdinalIgnoreCase)) { // slug changed make sure the new slug is available var requestedSlug = ContentUtils.CreateSlug(update.Slug); var available = await _blogService.SlugIsAvailable(blogId, requestedSlug).ConfigureAwait(false); if (available) { existing.Slug = requestedSlug; } } existing.Categories = update.Categories; if (publish) { existing.Content = update.Content; existing.IsPublished = true; if (!existing.PubDate.HasValue) { existing.PubDate = DateTime.UtcNow; } existing.DraftAuthor = null; existing.DraftContent = null; existing.DraftPubDate = null; } else { existing.DraftContent = update.Content; } var convertToRelativeUrls = true; await _blogService.Update(existing, convertToRelativeUrls).ConfigureAwait(false); await _contentHistoryCommands.Create(blogId, history); if (publish) { await _blogService.FirePublishEvent(existing); await _contentHistoryCommands.DeleteDraftHistory(blogId, history.ContentId); } return(true); }
public async Task <string> NewPost( string blogId, string userName, string password, PostStruct newPost, bool publish, string authorDisplayName ) { var permission = await _security.ValidatePermissions( blogId, userName, password, CancellationToken.None ).ConfigureAwait(false); if (!permission.CanEditPosts) { _log.LogWarning($"rejecting new post because user {userName} cannot edit posts"); return(null); } var post = _mapper.GetPostFromStruct(newPost); post.BlogId = blogId; post.Id = Guid.NewGuid().ToString(); post.Author = authorDisplayName; post.CreatedByUser = permission.DisplayName; var utcPubDate = _timeZoneHelper.ConvertToUtc(newPost.postDate, permission.TimeZoneId); if (publish) { if (utcPubDate.Year == 1) { //invalid because not supplied utcPubDate = DateTime.UtcNow; } if (utcPubDate <= DateTime.UtcNow) { post.IsPublished = true; post.PubDate = utcPubDate; } else { //future date needs to be draft, it will auto publish after pub date post.DraftAuthor = post.Author; post.DraftContent = post.Content; post.DraftPubDate = utcPubDate; post.IsPublished = false; post.PubDate = null; post.Content = null; } } else { post.DraftAuthor = post.Author; post.DraftContent = post.Content; if (utcPubDate > DateTime.UtcNow) { post.DraftPubDate = utcPubDate; } post.Content = null; post.PubDate = null; } await _blogUrlResolver.ConvertMediaToRelativeUrls(post).ConfigureAwait(false); await _blogService.Create(post).ConfigureAwait(false); if (publish) { await _blogService.FirePublishEvent(post).ConfigureAwait(false); } return(post.Id); }
public async Task <string> NewPost(string blogId, string userName, string password, PostStruct newPost, bool publish, string authorDisplayName) { await Authenticate(userName, password); var request = _mapper.Map <PostCreateRequest>(newPost); request.Username = userName; request.BlogId = int.Parse(blogId); request.Publish = publish; var post = _blogService.NewPost(request); return(post.Id.ToString()); }
public async Task <bool> EditPost(string blogId, string postId, string userName, string password, PostStruct post, bool publish) { await Authenticate(userName, password); var request = _mapper.Map <PostEditRequest>(post); request.PostId = int.Parse(postId); request.Username = userName; request.Publish = publish; _blogService.EditPost(request); return(true); }