public Topics( ApplicationDbContext applicationDbContext, UserContext userContext, BoardRepository boardRepository, BookmarkRepository bookmarkRepository, MessageRepository messageRepository, RoleRepository roleRepository, SmileyRepository smileyRepository, TopicRepository topicRepository, IForumViewResult forumViewResult, IActionContextAccessor actionContextAccessor, IUrlHelperFactory urlHelperFactory ) { DbContext = applicationDbContext; UserContext = userContext; BoardRepository = boardRepository; BookmarkRepository = bookmarkRepository; MessageRepository = messageRepository; RoleRepository = roleRepository; SmileyRepository = smileyRepository; TopicRepository = topicRepository; ForumViewResult = forumViewResult; UrlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext); }
public Topics( ApplicationDbContext applicationDbContext, UserContext userContext, AccountRepository accountRepository, BoardRepository boardRepository, MessageRepository messageRepository, NotificationRepository notificationRepository, RoleRepository roleRepository, SettingsRepository settingsRepository, SmileyRepository smileyRepository, TopicRepository topicRepository, IForumViewResult forumViewResult, IActionContextAccessor actionContextAccessor, IUrlHelperFactory urlHelperFactory ) { DbContext = applicationDbContext; UserContext = userContext; AccountRepository = accountRepository; BoardRepository = boardRepository; MessageRepository = messageRepository; NotificationRepository = notificationRepository; RoleRepository = roleRepository; SettingsRepository = settingsRepository; SmileyRepository = smileyRepository; TopicRepository = topicRepository; ForumViewResult = forumViewResult; UrlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext); }
public Smileys( SmileyRepository smileyRepository, ForumViewResult forumViewResult ) { SmileyRepository = smileyRepository; ForumViewResult = forumViewResult; }
public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input) { if (ModelState.IsValid) { var allowedExtensions = new[] { "gif", "png" }; var extension = Path.GetExtension(input.File.FileName).ToLower().Substring(1); if (Regex.IsMatch(input.File.FileName, @"[^a-zA-Z 0-9_\-\.]")) { ModelState.AddModelError("File", "Your filename contains invalid characters."); } if (!allowedExtensions.Contains(extension)) { ModelState.AddModelError("File", $"Your file must be: {string.Join(", ", allowedExtensions)}."); } if (!(await SmileyRepository.FindByCode(input.Code) is null)) { ModelState.AddModelError(nameof(input.Code), "Another smiley exists with that code."); } if (ModelState.IsValid) { var smileyRecord = new DataModels.Smiley { Code = input.Code, Thought = input.Thought, FileName = input.File.FileName }; DbContext.Smileys.Add(smileyRecord); using (var inputStream = input.File.OpenReadStream()) { smileyRecord.Path = await ImageStore.Save(new ImageStoreSaveOptions { ContainerName = Constants.InternalKeys.SmileyImageContainer, FileName = input.File.FileName, ContentType = input.File.ContentType, InputStream = inputStream, Overwrite = true }); } await DbContext.SaveChangesAsync(); TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'."; var referrer = this.GetReferrer(); return(Redirect(referrer)); } } var viewModel = new ViewModels.CreatePage { Code = input.Code, Thought = input.Thought }; return(View(viewModel)); }
public Smileys( ApplicationDbContext dbContext, SmileyRepository smileyRepository, IForumViewResult forumViewResult ) { DbContext = dbContext; SmileyRepository = smileyRepository; ForumViewResult = forumViewResult; }
public Smileys( ApplicationDbContext dbContext, SmileyRepository smileyRepository, IImageStore imageStore ) { DbContext = dbContext; SmileyRepository = smileyRepository; ImageStore = imageStore; }
public async Task <IActionResult> Delete(int id) { if (ModelState.IsValid) { var serviceResponse = await SmileyRepository.Delete(id); return(await ForumViewResult.RedirectFromService(this, serviceResponse)); } return(ForumViewResult.RedirectToReferrer(this)); }
public async Task <IActionResult> Edit(EditSmileysInput input) { if (ModelState.IsValid) { var serviceResponse = SmileyRepository.Update(input); return(await ForumViewResult.RedirectFromService(this, serviceResponse, failSync : FailureCallback)); } return(FailureCallback()); IActionResult FailureCallback() { return(RedirectToAction(nameof(Index))); } }
public async Task <IActionResult> Display(int id, int pageId = 1, int target = -1) { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var viewModel = await GetDisplayPageModel(id, pageId, target); if (string.IsNullOrEmpty(viewModel.RedirectPath)) { return(await ForumViewResult.ViewResult(this, viewModel)); } else { return(Redirect(viewModel.RedirectPath)); } }
public async Task <IActionResult> Edit(EditSmileysInput input) { if (ModelState.IsValid) { var serviceResponse = SmileyRepository.Update(input); return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback)); } return(await FailureCallback()); async Task <IActionResult> FailureCallback() { return(await Task.Run(() => { return ForumViewResult.RedirectToReferrer(this); })); } }
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)); }
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)); }
public async Task <IActionResult> Edit(ControllerModels.Smileys.EditSmileysInput input) { if (ModelState.IsValid) { var result = await SmileyRepository.Edit(input); ModelState.AddModelErrors(result.Errors); if (ModelState.IsValid) { TempData[Constants.InternalKeys.StatusMessage] = $"Smileys were updated."; var referrer = ForumViewResult.GetReferrer(this); return(Redirect(referrer)); } } return(RedirectToAction(nameof(Index))); }
public async Task <IActionResult> Edit(int id) { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var record = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id); if (record is null) { throw new HttpNotFoundError(); } var viewModel = new ViewModels.Messages.EditMessageForm { Id = id.ToString(), Body = record.OriginalBody, ElementId = $"edit-message-{id}" }; return(await ForumViewResult.ViewResult(this, 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 <IActionResult> Create(InputModels.MessageInput input) { if (ModelState.IsValid) { 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 serviceResponse = await MessageRepository.CreateTopic(input); return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback)); } return(await FailureCallback()); async Task <IActionResult> FailureCallback() { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var viewModel = new ViewModels.Messages.CreateTopicForm { Id = "0", BoardId = input.BoardId.ToString(), Body = input.Body }; return(await ForumViewResult.ViewResult(this, viewModel)); } }
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)); } }
public async Task <IActionResult> Create(int id = 0) { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var board = (await BoardRepository.Records()).First(item => item.Id == id); if (Request.Query.TryGetValue("source", out var source)) { return(await Create(new InputModels.MessageInput { BoardId = id, Body = source })); } var viewModel = new ViewModels.Messages.CreateTopicForm { Id = "0", BoardId = id.ToString() }; return(await ForumViewResult.ViewResult(this, viewModel)); }
public Messages( ApplicationDbContext dbContext, UserContext userContext, AccountRepository accountRepository, BoardRepository boardRepository, MessageRepository messageRepository, SmileyRepository smileyRepository, IActionContextAccessor actionContextAccessor, IForumViewResult forumViewResult, IUrlHelperFactory urlHelperFactory ) { DbContext = dbContext; UserContext = userContext; AccountRepository = accountRepository; BoardRepository = boardRepository; MessageRepository = messageRepository; SmileyRepository = smileyRepository; ForumViewResult = forumViewResult; UrlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext); }
public async Task <IActionResult> Index() { var viewModel = new ViewModels.IndexPage(); foreach (var smiley in await SmileyRepository.Records()) { var sortColumn = smiley.SortOrder / 1000; var sortRow = smiley.SortOrder % 1000; viewModel.Smileys.Add(new ViewModels.IndexItem { Id = smiley.Id, Code = smiley.Code, Path = smiley.Path, Thought = smiley.Thought, Column = sortColumn, Row = sortRow }); } return(await ForumViewResult.ViewResult(this, viewModel)); }
public async Task <IActionResult> Create(CreateSmileyInput input) { if (ModelState.IsValid) { var serviceResponse = await SmileyRepository.Create(input); return(await ForumViewResult.RedirectFromService(this, serviceResponse, FailureCallback)); } return(await FailureCallback()); async Task <IActionResult> FailureCallback() { var viewModel = new ViewModels.CreatePage { Code = input.Code, Thought = input.Thought }; return(await ForumViewResult.ViewResult(this, viewModel)); } }
public async Task <IActionResult> Create(int id = 0) { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var boards = await BoardRepository.Records(); var board = boards.First(item => item.Id == id); // Creating a topic via bookmarklet if (Request.Query.TryGetValue("source", out var source)) { return(await Create(new ControllerModels.Topics.CreateTopicInput { BoardId = id, Body = source })); } var viewModel = new ViewModels.Topics.CreateTopicForm { BoardId = id.ToString() }; return(await ForumViewResult.ViewResult(this, viewModel)); }
public Messages( ApplicationDbContext dbContext, UserContext userContext, AccountRepository accountRepository, BoardRepository boardRepository, MessageRepository messageRepository, SmileyRepository smileyRepository, TopicRepository topicRepository, IHubContext <ForumHub> forumHub, ForumViewResult forumViewResult ) { DbContext = dbContext; UserContext = userContext; AccountRepository = accountRepository; BoardRepository = boardRepository; MessageRepository = messageRepository; SmileyRepository = smileyRepository; TopicRepository = topicRepository; ForumHub = forumHub; ForumViewResult = forumViewResult; }
public async Task <IActionResult> Delete(int id) { if (ModelState.IsValid) { var smileyRecord = await SmileyRepository.FindById(id); if (smileyRecord is null) { TempData[Constants.InternalKeys.StatusMessage] = $"No smiley was found with the id '{id}'"; return(this.RedirectToReferrer()); } DbContext.Smileys.Remove(smileyRecord); var thoughts = DbContext.MessageThoughts.Where(t => t.SmileyId == id).ToList(); if (thoughts.Any()) { DbContext.MessageThoughts.RemoveRange(thoughts); } // Only delete the file if no other smileys are using the file. if (!DbContext.Smileys.Any(s => s.FileName == smileyRecord.FileName)) { await ImageStore.Delete(new ImageStoreDeleteOptions { ContainerName = Constants.InternalKeys.SmileyImageContainer, Path = smileyRecord.Path }); } await DbContext.SaveChangesAsync(); TempData[Constants.InternalKeys.StatusMessage] = "The smiley was deleted."; } return(this.RedirectToReferrer()); }
public async Task <IActionResult> Create(ControllerModels.Smileys.CreateSmileyInput input) { if (ModelState.IsValid) { var result = await SmileyRepository.Create(input); ModelState.AddModelErrors(result.Errors); if (ModelState.IsValid) { TempData[Constants.InternalKeys.StatusMessage] = $"Smiley '{input.File.FileName}' was added with code '{input.Code}'."; var referrer = ForumViewResult.GetReferrer(this); return(Redirect(referrer)); } } var viewModel = new ViewModels.CreatePage { Code = input.Code, Thought = input.Thought }; return(await ForumViewResult.ViewResult(this, viewModel)); }
public Topics( ApplicationDbContext applicationDbContext, UserContext userContext, BoardRepository boardRepository, BookmarkRepository bookmarkRepository, MessageRepository messageRepository, SmileyRepository smileyRepository, TopicRepository topicRepository, IHubContext <ForumHub> forumHub, ForumViewResult forumViewResult ) { DbContext = applicationDbContext; CurrentUser = userContext; BoardRepository = boardRepository; BookmarkRepository = bookmarkRepository; MessageRepository = messageRepository; SmileyRepository = smileyRepository; TopicRepository = topicRepository; ForumHub = forumHub; ForumViewResult = forumViewResult; }
public async Task <IActionResult> Edit(int id) { ViewData["Smileys"] = await SmileyRepository.GetSelectorList(); var message = await DbContext.Messages.FirstOrDefaultAsync(m => m.Id == id); if (message is null || message.Deleted) { throw new HttpNotFoundError(); } if (message.PostedById != UserContext.ApplicationUser.Id && !UserContext.IsAdmin) { throw new HttpForbiddenError(); } var viewModel = new ViewModels.Messages.EditMessageForm { Id = id.ToString(), Body = message.OriginalBody, ElementId = $"edit-message-{id}" }; return(await ForumViewResult.ViewResult(this, viewModel)); }
public async Task <IActionResult> Display(int id, int page = 1, int target = -1) { var topic = await DbContext.Topics.FindAsync(id); if (topic is null || topic.Deleted) { throw new HttpNotFoundError(); } if (page < 1) { var redirectUrl = Url.Action(nameof(Display), new { id, page = 1, target }); return(Redirect(redirectUrl)); } var messageIds = MessageRepository.GetMessageIds(topic.Id); if (target >= 0) { var targetPage = MessageRepository.GetPageNumber(target, messageIds); if (targetPage != page) { return(Redirect(GetRedirectPath(id, targetPage, target))); } } var take = CurrentUser.ApplicationUser.MessagesPerPage; var skip = take * (page - 1); var totalPages = Convert.ToInt32(Math.Ceiling(1.0 * messageIds.Count / take)); var pageMessageIds = messageIds.Skip(skip).Take(take).ToList(); var viewModel = new ViewModels.Topics.TopicDisplayPage { Id = topic.Id, FirstMessageId = topic.FirstMessageId, Subject = string.IsNullOrEmpty(topic.FirstMessageShortPreview) ? "No subject" : topic.FirstMessageShortPreview, AssignedBoards = new List <ViewModels.Boards.IndexBoard>(), IsAuthenticated = CurrentUser.IsAuthenticated, IsOwner = topic.FirstMessagePostedById == CurrentUser.Id, IsAdmin = CurrentUser.IsAdmin, IsPinned = topic.Pinned, ShowFavicons = CurrentUser.ApplicationUser.ShowFavicons, TotalPages = totalPages, ReplyCount = topic.ReplyCount, ViewCount = topic.ViewCount, CurrentPage = page, ReplyForm = new ViewModels.Messages.ReplyForm { Id = "0", TopicId = topic.Id.ToString(), ElementId = "topic-reply" } }; await isBookmarked(); await loadMessages(); await loadCategories(); await loadTopicBoards(); await loadSmileyViewData(); return(await ForumViewResult.ViewResult(this, viewModel)); async Task isBookmarked() { viewModel.IsBookmarked = await BookmarkRepository.IsBookmarked(topic.Id); } async Task loadMessages() { viewModel.Messages = await MessageRepository.GetMessages(pageMessageIds); var latestMessageTime = viewModel.Messages.Max(r => r.RecordTime); await TopicRepository.MarkRead(topic.Id, latestMessageTime, pageMessageIds); topic.ViewCount++; DbContext.Update(topic); await DbContext.SaveChangesAsync(); } async Task loadCategories() { viewModel.Categories = await BoardRepository.CategoryIndex(); } async Task loadTopicBoards() { var topicBoards = await BoardRepository.GetTopicBoards(topic.Id); foreach (var topicBoard in topicBoards) { var indexBoard = await BoardRepository.GetIndexBoard(topicBoard); viewModel.AssignedBoards.Add(indexBoard); } } async Task loadSmileyViewData() { ViewData[Constants.InternalKeys.SmileyViewData] = await SmileyRepository.GetSelectorList(); } }
public async Task <IActionResult> Edit(ControllerModels.Smileys.EditSmileysInput input) { if (ModelState.IsValid) { var smileySortOrder = new Dictionary <int, int>(); foreach (var smileyInput in input.Smileys) { var smileyRecord = await SmileyRepository.FindById(smileyInput.Id); if (smileyRecord is null) { ModelState.AddModelError(nameof(smileyInput.Id), $@"No smiley was found with the id '{smileyInput.Id}'"); break; } smileySortOrder.Add(smileyRecord.Id, smileyRecord.SortOrder); } if (ModelState.IsValid) { foreach (var smileyInput in input.Smileys) { var newSortOrder = (smileyInput.Column * 1000) + smileyInput.Row; if (smileySortOrder[smileyInput.Id] != newSortOrder) { foreach (var kvp in smileySortOrder.Where(kvp => smileyInput.Column == kvp.Value / 1000 && kvp.Value >= newSortOrder).ToList()) { smileySortOrder[kvp.Key]++; } smileySortOrder[smileyInput.Id] = newSortOrder; } } foreach (var smileyInput in input.Smileys) { var smileyRecord = await SmileyRepository.FindById(smileyInput.Id); if (smileyRecord.Code != smileyInput.Code) { smileyRecord.Code = smileyInput.Code; DbContext.Update(smileyRecord); } if (smileyRecord.Thought != smileyInput.Thought) { smileyRecord.Thought = smileyInput.Thought; DbContext.Update(smileyRecord); } if (smileyRecord.SortOrder != smileySortOrder[smileyRecord.Id]) { smileyRecord.SortOrder = smileySortOrder[smileyRecord.Id]; DbContext.Update(smileyRecord); } } await DbContext.SaveChangesAsync(); TempData[Constants.InternalKeys.StatusMessage] = $"Smileys were updated."; var referrer = this.GetReferrer(); return(Redirect(referrer)); } } return(RedirectToAction(nameof(Index))); }