Beispiel #1
0
        public void UpdateThread(BoardThread thread)
        {
            var oldThread = context.BoardThreads.First(x => x.Id == thread.Id);

            oldThread.SafeForWork = thread.SafeForWork;
            oldThread.ImageCount  = thread.ImageCount;
            oldThread.PostCount   = thread.PostCount;
            oldThread.IsLocked    = thread.IsLocked;

            context.SaveChanges();
        }
        public BoardThreadViewModel(BoardThread thread) {
            PostViewModel = new PostViewModel {
                Post = thread.Post,
                ShowReplies = false,
                ShowPostPosition = false,
                ShortenText = true,
                ShowActions = false
            };

            ThreadInfo = thread;
        }
Beispiel #3
0
        public async Task <IActionResult> CreateThread(SubmitViewModel vm, IFormFile file)
        {
            await googleRecaptchaHelper.VerifyRecaptcha(Request, ModelState);

            if (!ModelState.IsValid)
            {
                return(Submit());
            }

            var post = new BoardPost
            {
                Text       = vm.Text.Trim(),
                DatePosted = DateTime.Now
            };

            if (string.IsNullOrEmpty(vm.ImageUrl) == false)
            {
                try
                {
                    post.Image = await writer.DownloadImageFromUrl(vm.ImageUrl);
                }
                catch
                {
                    logger.LogError("An error occured while trying to download image from " + vm.ImageUrl);
                    ModelState.AddModelError("ImageUrl", "Došlo je do greške. Provjerite ispravnost poveznice.");
                    return(Submit());
                }
            }
            else if (IsImageFileValid(file))
            {
                post.Image = await writer.UploadImage(file);
            }

            var thread = new BoardThread
            {
                PostCount  = 0,
                ImageCount = file == null ? 0 : 1,
                IsLocked   = false,
                Posts      = new List <BoardPost> {
                    post
                }
            };

            boardRepo.AddThread(thread);
            RemoveLastThread();

            return(RedirectToAction("Thread", "Board", new { thread.Id }));
        }
Beispiel #4
0
        public void AddPostToThread(BoardPost boardPost, long threadId)
        {
            boardPost.DatePosted = DateTime.Now;

            BoardThread thread = context.BoardThreads
                                 .Include(x => x.Posts)
                                 .FirstOrDefault(x => x.Id == threadId);

            if (!string.IsNullOrEmpty(boardPost.Image))
            {
                thread.ImageCount++;
            }

            thread.PostCount++;
            thread?.Posts.Add(boardPost);

            context.SaveChanges();
        }
Beispiel #5
0
        public async void CreateThread_MoreThan40Threads_CallsRemoveThread(int threadCount, int timesRemoveThreadCalled)
        {
            var oldestThread = new BoardThread {
                Id = 1, Posts = new List <BoardPost> {
                    new BoardPost {
                        DatePosted = DateTime.Now.AddHours(-1)
                    }
                }
            };
            var boardThreads         = GetBoardThreadsListContaining(threadCount, oldestThread);
            var boardThreadsRepoMock = new Mock <IBoardThreadRepository>();

            boardThreadsRepoMock.Setup(x => x.BoardThreads).Returns(boardThreads.AsQueryable());
            var boardController = new BoardController(boardThreadsRepoMock.Object, null, new RecaptchaMock(), null, null);

            await boardController.CreateThread(new SubmitViewModel { Text = "test" }, null);

            boardThreadsRepoMock.Verify(x => x.RemoveThread(oldestThread.Id), Times.Exactly(timesRemoveThreadCalled));
        }
Beispiel #6
0
        public async Task <IActionResult> StartDiscussion(long articleId)
        {
            await googleRecaptchaHelper.VerifyRecaptcha(Request, ModelState);

            if (ModelState.IsValid == false)
            {
                return(RedirectToAction("Index", "Error"));
            }

            var article = articleRepo.Articles.FirstOrDefault(a => a.Id == articleId);

            if (article == null)
            {
                return(RedirectToAction("Article", "Error"));
            }

            if (article.Discussion != null)
            {
                return(RedirectToAction("Thread", "Board", new { id = article.Discussion.Id }));
            }

            var thread = new BoardThread
            {
                SourceUrl = article.SourceUrl,
                Posts     = new BoardPost[]
                {
                    new BoardPost
                    {
                        Text       = article.Title,
                        Image      = article.Image,
                        DatePosted = DateTime.Now
                    }
                }
            };

            article.Discussion = thread;

            articleRepo.EditArticle(article);

            return(RedirectToAction("Thread", "Board", new { id = thread.Id }));
        }
Beispiel #7
0
        public void AddThread(BoardThread thread)
        {
            context.BoardThreads.Add(thread);

            context.SaveChanges();
        }
Beispiel #8
0
 private bool MaxImagesCountReached(BoardThread thread)
 {
     return(thread.ImageCount > maxImagesInThread);
 }
Beispiel #9
0
 public void NavigateToThread(BoardThread boardThread) {
     var navigation =
         ThreadNavigation.NavigateToThread(CurrentPage.BoardId,
                                           boardThread.Number);
     Shell.Navigate<ThreadViewModel>(navigation);
 }