Пример #1
0
        //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);
        }
Пример #3
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        public void AddPostTest()
        {
            // Arrange
            PostStruct postStruct = new PostStruct();

            // Act
            postCollectionMemoryDAL.Add(postStruct);


            // Assert
        }
Пример #7
0
        public ActionResult Index(int?userId)
        {
            PostService Service = new PostService();
            PostStruct  post    = null;

            if (ModelState.IsValid)
            {
                post = Service.GetPostStructure(userId);
            }

            return(View(post));
        }
Пример #8
0
 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();
     }
 }
Пример #9
0
        //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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
 public void Add(PostStruct postStruct)
 {
 }
Пример #14
0
 public bool Update(PostStruct postStruct)
 {
     throw new NotImplementedException();
 }
Пример #15
0
 public void Add(PostStruct postStruct)
 {
     Context.Add(postStruct);
 }
Пример #16
0
        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);
        }
Пример #18
0
        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());
        }
Пример #19
0
        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);
        }