예제 #1
0
파일: Messages.cs 프로젝트: iomeone/forum-1
        public async Task <IActionResult> Reply(int id = 0)
        {
            var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            var replyMessages = await MessageRepository.GetMessages(new List <int> {
                message.Id
            });

            var replyMessage = replyMessages.First();

            replyMessage.ShowControls = false;

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id           = id.ToString(),
                TopicId      = message.TopicId.ToString(),
                ElementId    = $"message-reply-{id}",
                ReplyMessage = replyMessage
            };

            return(View(viewModel));
        }
예제 #2
0
        public async Task <IActionResult> ReplyPartial(int id)
        {
            var record = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (record is null)
            {
                throw new HttpNotFoundError();
            }

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id        = id.ToString(),
                ElementId = $"message-reply-{id}"
            };

            return(await ForumViewResult.ViewResult(this, "_MessageForm", viewModel));
        }
예제 #3
0
        public async Task <IActionResult> Reply(ControllerModels.Messages.CreateReplyInput input)
        {
            if (input.Id > 0)
            {
                var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == input.Id);

                if (message is null || message.Deleted)
                {
                    throw new HttpNotFoundError();
                }
            }

            if (ModelState.IsValid)
            {
                var result = await MessageRepository.CreateReply(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    var hubAction = "new-reply";

                    if (result.Merged)
                    {
                        hubAction = "updated-message";
                    }

                    await ForumHub.Clients.All.SendAsync(hubAction, new HubModels.Message {
                        TopicId   = result.TopicId,
                        MessageId = result.MessageId
                    });

                    var redirectPath = base.Url.DisplayMessage(result.TopicId, result.MessageId);
                    return(Redirect(redirectPath));
                }
            }

            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id        = input.Id.ToString(),
                Body      = input.Body,
                ElementId = $"message-reply-{input.Id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
예제 #4
0
        public async Task <IActionResult> XhrReply(int id)
        {
            var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id         = id.ToString(),
                TopicId    = message.TopicId.ToString(),
                ElementId  = $"message-reply-{id}",
                FormAction = nameof(XhrReply)
            };

            return(await ForumViewResult.ViewResult(this, "_MessageForm", viewModel));
        }
예제 #5
0
        public async Task <IActionResult> Reply(int id = 0)
        {
            ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

            var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            var viewModel = new ViewModels.Messages.ReplyForm {
                Id        = id.ToString(),
                ElementId = $"message-reply-{id}"
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
예제 #6
0
        public async Task <IActionResult> Reply(InputModels.MessageInput input)
        {
            if (ModelState.IsValid)
            {
                var serviceResponse = await MessageRepository.CreateReply(input);

                if (input.SideLoad)
                {
                    foreach (var kvp in serviceResponse.Errors)
                    {
                        ModelState.AddModelError(kvp.Key, kvp.Value);
                    }
                }
                else
                {
                    return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback));
                }
            }

            if (input.SideLoad)
            {
                var errors = ModelState.Keys.Where(k => ModelState[k].Errors.Count > 0).Select(k => new { propertyName = k, errorMessage = ModelState[k].Errors[0].ErrorMessage });
                return(new JsonResult(errors));
            }
            else
            {
                return(await FailureCallback());
            }

            async Task <IActionResult> FailureCallback()
            {
                ViewData["Smileys"] = await SmileyRepository.GetSelectorList();

                var viewModel = new ViewModels.Messages.ReplyForm {
                    Id        = input.Id.ToString(),
                    Body      = input.Body,
                    ElementId = $"message-reply-{input.Id}"
                };

                return(await ForumViewResult.ViewResult(this, viewModel));
            }
        }