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)); }
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)); }
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)); }
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); }