public async Task <IActionResult> AddTags([FromRoute] int id, [FromBody] string[] tags)
        {
            Post post = await FullPosts
                        .Where(p => p.Id == id)
                        .FirstOrDefaultAsync();

            if (post == null)
            {
                return(NotFound($"No post {id} found"));
            }

            foreach (string tagName in tags)
            {
                Tag tag = await _context.Tags
                          .Where(t => t.Name == tagName)
                          .FirstOrDefaultAsync();

                if (tag == null)
                {
                    return(NotFound($"No tag {tagName} found"));
                }

                TagPost tagPost = new TagPost {
                    PostId = id, TagId = tag.Id
                };
                _context.Add(tagPost);
            }
            await _context.SaveChangesAsync();

            int userId = (await _currentUser.GetCurrentUser(HttpContext)).Id;

            return(Ok(post.CommentsViewModel(userId)));
        }
Exemple #2
0
        public ActionResult Create(CreatePostViewModel model)
        {
            if (ModelState.IsValid)
            {
                // save post
                var post = new Post
                {
                    Title  = model.Title,
                    Body   = model.Body,
                    Posted = DateTime.Now
                };

                // save tagPot
                var tagPost = new TagPost
                {
                    TagId  = model.SelectedTadId,
                    PostId = post.Id,
                    Place  = model.SelectedPlace
                };
                post.TagPost.Add(tagPost);

                db.Post.Add(post);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
Exemple #3
0
        public async Task AddTagPost(TagPost tagPost)
        {
            var vecPostoji = applicationDbContext.TagPosts.Where(x => x.TagId == tagPost.TagId && x.QuestionId == tagPost.QuestionId).FirstOrDefault();

            if (vecPostoji == null)
            {
                applicationDbContext.TagPosts.Add(tagPost);
                await applicationDbContext.SaveChangesAsync();
            }
        }
Exemple #4
0
        public async Task AttachTagtoPost(string Tagname, string blogname, int postid)
        {
            try
            {
                if ((!CommonTools.isEmpty(Tagname) && (!CommonTools.isEmpty(blogname) && ((await this.Exists(Tagname, blogname)) == false))))
                {
                    Tag cat = await this.GetTag(Tagname, blogname);

                    Blog blg = await this.blgmng.GetBlogAsync(blogname);

                    if (cat != null && blg != null)
                    {
                        TagPost TagPost = new TagPost();

                        TagPost.BlogId = blg.Id;
                        TagPost.TagId  = cat.Id;
                        TagPost.PostId = postid;
                        db.Add(TagPost);
                        await db.SaveChangesAsync();
                    }
                    else if (blg != null)
                    {
                        Tag Tag = new Tag();
                        Tag.BlogId = blg.Id;
                        Tag.Name   = Tagname;

                        await this.AddNew(Tag, blogname);

                        cat = await this.GetTag(Tagname, blogname);

                        if (cat != null)
                        {
                            TagPost TagPost = new TagPost();

                            TagPost.BlogId = blg.Id;
                            TagPost.TagId  = cat.Id;
                            TagPost.PostId = postid;
                            db.Add(TagPost);
                            await db.SaveChangesAsync();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                CommonTools.ErrorReporting(ex);
                //return null;
            }
        }
Exemple #5
0
        public async Task <IActionResult> Create([Bind("Title,Content,Tags")] QuestionViewModel q)
        {
            var user = await questionsRepository.getUserByUserName(User.Identity.Name);

            var question = new Question();

            if (ModelState.IsValid)
            {
                question.TimeStamp = DateTime.UtcNow;
                question.Content   = q.Content;
                question.Title     = q.Title;
                question.User      = user;
                await questionsRepository.AddQuestion(question);

                var AddedQuestion = await questionsRepository.getLastQuestion();

                if (q.Tags != null)
                {
                    q.Tags = q.Tags + ",";
                    string[] listOfTags = (q.Tags).Split(",");
                    for (int i = 0; i < listOfTags.Length - 1; i++)
                    {
                        Tag t = new Tag();
                        t.TagContent = listOfTags[i];
                        t.NumOfUses  = 1;

                        await tagsRepository.AddTags(t);

                        var addedTag = await tagsRepository.GetTagByName(listOfTags[i]);

                        TagPost tp = new TagPost();
                        tp.QuestionId = AddedQuestion.Id;
                        tp.TagId      = addedTag.Id;

                        await tagPostRepository.AddTagPost(tp);
                    }
                }
                await notificationRepository.AddUserToNotificationList(user.Id, AddedQuestion.Id, NotificationType.QUESTION);

                return(RedirectToAction("Details", new { question.Id }));
            }
            q.PopularTags = await tagsRepository.GetPopular();

            return(View(q));
        }
        public async Task AddPostTags(int postId, string tags, string userAlias)
        {
            Post post = await unitOfWork.Posts.GetByIdWithItems(postId);

            AppUser user = await unitOfWork.Users.GetByAliasWithItems(userAlias);

            var check = user.Posts.FirstOrDefault(p => p.Id == postId);

            if (user != null && post != null && check != null && tags != null)
            {
                var res = tags.Split("#").Where(s => s != "").Select(s => s.Trim());
                foreach (var i in res)
                {
                    Tag tag = unitOfWork.Tags.List(t => t.Text == i).FirstOrDefault();
                    if (tag == null)
                    {
                        tag = new Tag
                        {
                            Text = i
                        };
                        unitOfWork.Tags.Add(tag);
                    }

                    TagPost tagPost = post.TagPosts.Where(tp => tp.Tag == tag).FirstOrDefault();
                    if (tagPost == null)
                    {
                        tagPost = new TagPost
                        {
                            Tag  = tag,
                            Post = post
                        };
                        unitOfWork.TagPost.Add(tagPost);
                    }
                }
                await unitOfWork.SaveAsync();
            }
            else
            {
                throw new ArgumentException();
            }
        }
        public async Task <IActionResult> AddTag([FromRoute] int id, [FromRoute] string tagName)
        {
            Post post = await FullPosts
                        .Where(p => p.Id == id)
                        .FirstOrDefaultAsync();

            Tag tag = await _context.Tags
                      .Where(t => t.Name == tagName)
                      .FirstOrDefaultAsync();

            if (post == null)
            {
                return(NotFound($"No post {id} found"));
            }
            if (tag == null)
            {
                return(NotFound($"No tag {tagName} found"));
            }
            if (!await _rightsChecker.CheckRights(post, HttpContext))
            {
                return(BadRequest("No rights to add tag to this post"));
            }
            if (tag.TagPosts.Any(tp => tp.PostId == id))
            {
                return(BadRequest($"Post {id} already contains tag {tag.Id}"));
            }

            TagPost tagPost = new TagPost {
                PostId = id, TagId = tag.Id
            };

            _context.Add(tagPost);

            await _context.SaveChangesAsync();

            int userId = (await _currentUser.GetCurrentUser(HttpContext)).Id;

            return(Ok(post.CommentsViewModel(userId)));
        }
        public async Task <IActionResult> RemoveTag([FromRoute] int id, [FromRoute] string tagName)
        {
            Post post = await FullPosts
                        .Where(p => p.Id == id)
                        .FirstOrDefaultAsync();

            Tag tag = await _context.Tags
                      .Where(t => t.Name == tagName)
                      .FirstOrDefaultAsync();

            if (post == null)
            {
                return(NotFound($"No post {id} found"));
            }
            if (tag == null)
            {
                return(NotFound($"No tag {tagName} found"));
            }
            if (!await _rightsChecker.CheckRights(post, HttpContext))
            {
                return(BadRequest("No rights to remove tag from this post"));
            }
            if (!tag.TagPosts.Any(tp => tp.PostId == id))
            {
                return(BadRequest($"Post {id} does not contain tag {tag.Id}"));
            }

            TagPost tagPost = post.TagPosts.Where(tp => tp.TagId == tag.Id).FirstOrDefault();

            tagPost.IsDeleted = true;
            _context.Update(tagPost);

            await _context.SaveChangesAsync();

            int userId = (await _currentUser.GetCurrentUser(HttpContext)).Id;

            return(Ok(post.CommentsViewModel(userId)));
        }
Exemple #9
0
        public ActionResult Edit(CreatePostViewModel model)
        {
            if (ModelState.IsValid)
            {
                // save post
                var post = new Post
                {
                    Id     = model.Id,
                    Title  = model.Title,
                    Body   = model.Body,
                    Posted = DateTime.Now
                };

                // save tagPot
                var tagPost = new TagPost
                {
                    TagId  = model.SelectedTadId,
                    PostId = post.Id,
                    Place  = model.SelectedPlace
                };
                post.TagPost.Add(tagPost);

                db.Entry(post).State = EntityState.Modified;
                db.SaveChanges();

                // Add Forum relation
                var tag = db.Tag.Find(model.SelectedTadId);
                if (!post.TagPost.Any(o => o.Tag == tag))
                {
                }

                return(RedirectToAction("Index"));
            }

            return(View(model));
        }
    void HandleNewPosts()
    {
        List <string> newPosts = database.getUnhandledPostsMessages();

        foreach (string postMessage in newPosts)
        {
            Post post;

            if (postMessage.StartsWith("#"))
            {
                post = new TagPost();
            }
            else if (postMessage.StartsWith("@"))
            {
                post = new MentionPost();
            }
            else
            {
                post = new Post();
            }

            post.CreatePost(database, postMessage);
        }
    }
        private static void SeedTagsToPosts(UnprofessionalsDbContext context)
        {
            if (context.TagsPosts.Any())
            {
                return;
            }

            var tagPost = new TagPost {
                PostId = 1, TagId = 1
            };
            var tagPost1 = new TagPost {
                PostId = 1, TagId = 2
            };
            var tagPost2 = new TagPost {
                PostId = 1, TagId = 3
            };
            var tagPost3 = new TagPost {
                PostId = 1, TagId = 4
            };
            var tagPost4 = new TagPost {
                PostId = 1, TagId = 5
            };
            var tagPost5 = new TagPost {
                PostId = 1, TagId = 6
            };
            var tagPost6 = new TagPost {
                PostId = 1, TagId = 7
            };
            var tagPost7 = new TagPost {
                PostId = 2, TagId = 1
            };
            var tagPost8 = new TagPost {
                PostId = 2, TagId = 2
            };
            var tagPost9 = new TagPost {
                PostId = 2, TagId = 3
            };
            var tagPost10 = new TagPost {
                PostId = 2, TagId = 4
            };
            var tagPost11 = new TagPost {
                PostId = 2, TagId = 5
            };
            var tagPost12 = new TagPost {
                PostId = 2, TagId = 6
            };
            var tagPost13 = new TagPost {
                PostId = 2, TagId = 7
            };


            var tagPost14 = new TagPost {
                PostId = 4, TagId = 3
            };
            var tagPost15 = new TagPost {
                PostId = 5, TagId = 4
            };
            var tagPost16 = new TagPost {
                PostId = 3, TagId = 5
            };
            var tagPost17 = new TagPost {
                PostId = 3, TagId = 6
            };
            var tagPost18 = new TagPost {
                PostId = 5, TagId = 7
            };


            var tagsPosts = new List <TagPost>
            {
                tagPost,
                tagPost1,
                tagPost2,
                tagPost3,
                tagPost4,
                tagPost5,
                tagPost6,
                tagPost7,
                tagPost8,
                tagPost9,
                tagPost10,
                tagPost11,
                tagPost12,
                tagPost13,
                tagPost14,
                tagPost15,
                tagPost16,
                tagPost17,
                tagPost18
            };

            context.TagsPosts.AddRange(tagsPosts);

            context.SaveChanges();
        }
Exemple #12
0
        public async Task <IActionResult> Edit([Bind("Title,Content,Tags,User,Id,PopularTags")] QuestionViewModel q, string submit)
        {
            if (submit == "Delete")
            {
                await questionsRepository.DeleteQuestion(q.Id);

                return(RedirectToAction("Index"));
            }
            else
            {
                var question = await questionsRepository.getQuestion(q.Id);

                if (ModelState.IsValid)
                {
                    question.Content = q.Content;
                    question.Title   = q.Title;
                    var oldTags = question.Tags;
                    await questionsRepository.UpdateQuestion(question);

                    if (q.Tags != null)
                    {
                        q.Tags = q.Tags + ",";
                        string[] listOfTags = (q.Tags).Split(",");

                        var listOfOldTags = oldTags.Select(x => x.Tag.TagContent).ToList <String>();

                        var newTags = listOfTags.Except(listOfOldTags).ToArray <String>();

                        var changedTags = listOfOldTags.Except(listOfTags).ToArray <String>();


                        for (int i = 0; i < newTags.Length - 1; i++)
                        {
                            Tag t = new Tag();
                            t.TagContent = newTags[i];
                            t.NumOfUses  = 1;
                            await tagsRepository.AddTags(t);

                            var addedTag = await tagsRepository.GetTagByName(newTags[i]);

                            TagPost tp = new TagPost();
                            tp.QuestionId = question.Id;
                            tp.TagId      = addedTag.Id;

                            await tagPostRepository.AddTagPost(tp);
                        }
                        for (int i = 0; i < changedTags.Length; i++)
                        {
                            Tag t = await tagsRepository.GetTagByName(changedTags[i]);

                            await tagPostRepository.DeleteTagFromQuestion(t, q.Id);

                            await tagsRepository.DeleteTags(t);
                        }
                    }
                    else
                    {
                        await tagPostRepository.DeleteAllTagsFromQuestion(q.Id);
                    }
                    return(RedirectToAction("Details", new { question.Id }));
                }
                q.PopularTags = await tagsRepository.GetPopular();
            }
            return(View(q));
        }