public ActionResult Edit(int id) { Forum forum = this.GetForum(id); if (forum == default(Forum) || forum.IsDeleted) { return(this.RedirectToAction("BadRequest", "Error")); } var role = this.GetRoleByName("Moderator"); var moderators = this.GetUsersByRole(role.Id); foreach (var moderator in moderators) { if (forum.Moderators.Any(m => m.Id == moderator.Id)) { moderator.IsChecked = true; } } EditForumBindingModel forumModel = new EditForumBindingModel() { Id = forum.ForumId, Title = forum.Title, Description = forum.Description, Moderators = moderators }; return(this.View(forumModel)); }
public ActionResult Edit(int id, EditForumBindingModel model) { Forum editForum = this.GetForum(id); if (editForum == default(Forum) || editForum.IsDeleted || id != model.Id) { return(this.RedirectToAction("BadRequest", "Error")); } if (!this.ModelState.IsValid) { return(this.View(model)); } var role = this.GetRoleByName("Moderator"); var moderatorsIds = model.Moderators .Select(m => m.Id) .ToArray(); var users = this.UnitOfWork .UserRepository .Select(u => moderatorsIds.Contains(u.Id) && u.Roles.Any(r => r.RoleId == role.Id)); string[] addedModerators = editForum.Moderators .Select(u => u.UserName) .ToArray(); foreach (string userName in addedModerators) { if (!users.Any(u => u.UserName == userName)) { editForum.Moderators.Remove(editForum.Moderators.First(u => u.UserName == userName)); } } foreach (User user in users) { if (!editForum.Moderators.Any(u => u.UserName == user.UserName)) { editForum.Moderators.Add(user); } } editForum.Title = model.Title; editForum.Description = model.Description; editForum = this.UnitOfWork .ForumRepository .Update(editForum); this.UnitOfWork.SaveChanges(); return(this.RedirectToAction("View", "Home", new { Id = editForum.ForumId })); }