示例#1
0
文件: Topics.cs 项目: iomeone/forum-1
        public async Task <IActionResult> Create(int id = -1)
        {
            var boards = await BoardRepository.Records();

            var board = boards.FirstOrDefault(item => item.Id == id);

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

            // Creating a topic via bookmarklet
            if (Request.Query.TryGetValue("source", out var source))
            {
                var input = new ControllerModels.Topics.CreateTopicInput {
                    Body           = source,
                    SelectedBoards = new List <int> {
                        id
                    }
                };

                return(await Create(input));
            }

            var viewModel = new ViewModels.Topics.CreateTopicForm {
                SelectedBoards = new List <int> {
                    id
                }
            };

            return(View(viewModel));
        }
示例#2
0
文件: Topics.cs 项目: iomeone/forum-1
        public async Task <IActionResult> Create(ControllerModels.Topics.CreateTopicInput input)
        {
            if (Request.Method != "GET")
            {
                foreach (var board in await BoardRepository.Records())
                {
                    if (Request.Form.TryGetValue("Selected_" + board.Id, out var boardSelected))
                    {
                        if (boardSelected == "True")
                        {
                            input.SelectedBoards.Add(board.Id);
                        }
                    }
                }
            }

            if (input.Action == Options.ECreateTopicSaveAction.AddEvent)
            {
                var editEventViewModel = new ViewModels.Topics.EditEventForm {
                    FormAction     = nameof(CreateEvent),
                    FormController = nameof(Topics),
                    Body           = input.Body,
                    SelectedBoards = JsonConvert.SerializeObject(input.SelectedBoards)
                };

                ModelState.ClearValidationState(input.Body);

                return(View("EditEvent", editEventViewModel));
            }

            if (ModelState.IsValid)
            {
                var result = await TopicRepository.CreateTopic(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    var redirectPath = Url.DisplayMessage(result.TopicId, result.MessageId);
                    return(Redirect(redirectPath));
                }
            }

            var viewModel = new ViewModels.Topics.CreateTopicForm {
                Body           = input.Body,
                SelectedBoards = input.SelectedBoards,
                AllDay         = input.AllDay,
                Start          = input.Start,
                End            = input.End
            };

            return(View(viewModel));
        }
示例#3
0
        public async Task <IActionResult> Create(ControllerModels.Topics.CreateTopicInput input)
        {
            if (ModelState.IsValid)
            {
                // Creating a topic via bookmarklet
                if (Request.Method == "GET" && input.BoardId != null)
                {
                    input.SelectedBoards.Add((int)input.BoardId);
                }
                else
                {
                    foreach (var board in await BoardRepository.Records())
                    {
                        if (Request.Form.TryGetValue("Selected_" + board.Id, out var boardSelected))
                        {
                            if (boardSelected == "True")
                            {
                                input.SelectedBoards.Add(board.Id);
                            }
                        }
                    }
                }

                var result = await TopicRepository.CreateTopic(input);

                ModelState.AddModelErrors(result.Errors);

                if (ModelState.IsValid)
                {
                    var redirectPath = Url.DisplayMessage(result.TopicId, result.MessageId);
                    return(Redirect(redirectPath));
                }
            }

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

            var viewModel = new ViewModels.Topics.CreateTopicForm {
                BoardId = input.BoardId.ToString(),
                Body    = input.Body
            };

            return(await ForumViewResult.ViewResult(this, viewModel));
        }
示例#4
0
        public async Task <ControllerModels.Topics.CreateTopicResult> CreateTopic(ControllerModels.Topics.CreateTopicInput input)
        {
            var result = new ControllerModels.Topics.CreateTopicResult();

            var processedMessage = await MessageRepository.ProcessMessageInput(input.Body);

            result.Errors = processedMessage.Errors;

            if (!result.Errors.Any())
            {
                var message = await MessageRepository.CreateMessageRecord(processedMessage);

                var topic = new DataModels.Topic {
                    FirstMessageId           = message.Id,
                    FirstMessagePostedById   = message.PostedById,
                    FirstMessageTimePosted   = message.TimePosted,
                    FirstMessageShortPreview = message.ShortPreview,
                    LastMessageId            = message.Id,
                    LastMessagePostedById    = message.PostedById,
                    LastMessageTimePosted    = message.TimePosted,
                    LastMessageShortPreview  = message.ShortPreview,
                };

                DbContext.Topics.Add(topic);
                await DbContext.SaveChangesAsync();

                message.TopicId = topic.Id;
                DbContext.Update(message);

                MessageRepository.UpdateTopicParticipation(topic.Id, UserContext.ApplicationUser.Id, message.TimePosted);

                var boards = await BoardRepository.Records();

                foreach (var selectedBoard in input.SelectedBoards)
                {
                    var board = boards.FirstOrDefault(item => item.Id == selectedBoard);

                    if (board != null)
                    {
                        DbContext.TopicBoards.Add(new DataModels.TopicBoard {
                            TopicId   = topic.Id,
                            BoardId   = board.Id,
                            TimeAdded = DateTime.Now,
                            UserId    = UserContext.ApplicationUser.Id
                        });
                    }
                }

                await DbContext.SaveChangesAsync();

                await ForumHub.Clients.All.SendAsync("new-topic", new HubModels.Message {
                    TopicId   = topic.Id,
                    MessageId = message.Id
                });

                result.TopicId   = topic.Id;
                result.MessageId = message.Id;
            }

            return(result);
        }