示例#1
0
        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());
        }
示例#2
0
        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"));
        }
示例#3
0
        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"));
        }