public async Task <IActionResult> Edit(long topicId, long replyId, [FromBody] EditReplyViewModel vm) { var topic = await _topicsRepository.GetByIdAsync(topicId); if (topic != null) { var reply = await _repliesRepository.GetByIdAsync(replyId); if (reply != null) { reply.Title = vm.Title; reply.Content = vm.Content; reply.TopicId = vm.TopicId; reply.UserId = vm.UserId; await _repliesRepository.UpdateAsync(reply); return(Ok()); } return(BadRequest()); } return(BadRequest()); }
public async Task <IActionResult> EditReply(EditReplyViewModel model) { if (User.Identity.IsAuthenticated) { Topic topic = await _websiteDB.Topics.Include(t => t.Replies).Include(t => t.Subsection).FirstOrDefaultAsync(t => t.Id == model.TopicId); // Эти 2 вьюбага необходимы для работы колбасы ссылок навигации на странице ViewBag.Topic = topic; ViewBag.TopicId = model.TopicId; if (ModelState.IsValid) { Reply reply = await _websiteDB.Replies.Include(r => r.Topic).ThenInclude(t => t.Replies).FirstOrDefaultAsync(r => r.Id == model.ReplyId && r.Topic.Id == model.TopicId && r.User.Name == User.Identity.Name); // Проверяем есть ли такое сообщение и не истекло ли время на его редактирование (тут делаем время + 10 минут, дав пользователю фору на сам процесс редактирования) if (reply != null && Convert.ToInt32((DateTime.Now - reply.ReplyDate).TotalMinutes) < 20) { // Изменяем тело сообщения reply.ReplyBody = model.ReplyBody; // Если это первое сообщение в теме и следственно юзер хозяин топика, то изменяем заголовок темы if (topic.Replies.OrderBy(r => r.ReplyDate).First().Id == reply.Id && model.TopicOwner && model.TopicName != null) { topic.TopicName = model.TopicName; } // Сохраняем изменения _websiteDB.Topics.Update(topic); _websiteDB.Replies.Update(reply); await _websiteDB.SaveChangesAsync(); // Формируем прямую ссылку на сообщение string EditedMessageLink = $"/Forum/ViewTopic?topicId={model.TopicId}&page={(int)Math.Ceiling(reply.Topic.Replies.Count() / (double)10)}#{model.HtmlAnchor}"; // Редирект по прямой ссылке return(Redirect(EditedMessageLink)); } // Если сообщение не найдено, выдаём ошибку 404 return(Redirect("/Main/PageNotFound")); } // Если модель не прошла валидацию, возвращаем её в представление return(View(model)); } // Если пользователь не авторизован, перенаправляем его на страницу авторизации return(RedirectToAction("Login", "Account")); }
public async Task <IActionResult> EditReply(Guid topicId, Guid replyId, int htmlAnchor) { Topic topic = await _websiteDB.Topics.Include(t => t.Replies).Include(t => t.Subsection).FirstOrDefaultAsync(t => t.Id == topicId); // Эти 2 вьюбага необходимы для работы колбасы ссылок навигации на странице ViewBag.Topic = topic; ViewBag.TopicId = topicId; if (User.Identity.IsAuthenticated) { // Ищем сообщение по нескольким параметрам Reply reply = await _websiteDB.Replies.Include(r => r.Topic).FirstOrDefaultAsync(r => r.Id == replyId && r.Topic.Id == topicId && r.User.Name == User.Identity.Name); // Если сообщение с заданными параметрами найдено, то заходим в условие if (reply != null && Convert.ToInt32((DateTime.Now - reply.ReplyDate).TotalMinutes) < 10) { // Формируем модель редактирования EditReplyViewModel model = new EditReplyViewModel() { ReplyId = reply.Id, TopicId = reply.Topic.Id, ReplyBody = reply.ReplyBody, HtmlAnchor = htmlAnchor }; // Если это первое сообщение в теме и, следственно, юзер хозяин топика, то разрешаем редактирование заголовка темы if (topic.Replies.OrderBy(r => r.ReplyDate).First().Id == reply.Id) { model.TopicOwner = true; model.TopicName = topic.TopicName; } // Передаем модель в представление return(View(model)); } // Если сообщение не найдено, выдаем ошибку 404 return(Redirect("/Main/PageNotFound")); } // Если пользователь не авторизован, перенаправляем его на страницу авторизации return(RedirectToAction("Login", "Account")); }