public bool AddParticipantToDefaultTeam(string participantId) { using (var db = new ContestMeterDbContext()) { var user = db.Users.Find(participantId); if (user == null) { return(false); } var defaultTeam = db.Teams.FirstOrDefault(t => t.Name == "Одиночки"); if (defaultTeam == null) { return(false); } var teamParticipant = new TeamParticipant { Id = Guid.NewGuid(), TeamId = defaultTeam.Id, ParticipantId = user.Id }; db.Entry(teamParticipant).State = EntityState.Added; user.TeamId = defaultTeam.Id; defaultTeam.Participants.Add(user); db.Entry(user).State = EntityState.Modified; db.Entry(defaultTeam).State = EntityState.Modified; db.SaveChanges(); return(true); } }
public async System.Threading.Tasks.Task <ActionResult> DeleteUserAttempt(Guid?contestId, Guid?id) { if (contestId == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var contest = await _db.Contests.FindAsync(contestId); if (contest == null) { return(HttpNotFound()); } if (contest.TeacherId != User.Identity.GetUserId() && !User.IsInRole("administrator") && !_db.ContestTeachers.Any(ct => ct.ContestId == contestId)) { TempData["Message"] = "Вы не имеете право удалять результаты проверок для данного контеста"; return(RedirectToAction("Information", new { id = contestId })); //ViewBag.ErrorMessage = "Вы не имеете право удалять результаты проверок для данного контеста"; //return View("Error"); } if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var userAttempt = await _db.UserAttempts.FindAsync(id); if (userAttempt == null) { return(HttpNotFound()); } _db.Entry(userAttempt).State = EntityState.Deleted; await _db.SaveChangesAsync(); return(RedirectToAction("Information", new { id = contestId })); }
public async System.Threading.Tasks.Task <ActionResult> RemoveAccount() { if (User.IsInRole("administrator")) { TempData["Message"] = "Администратор не может удалить свою учетную запись"; return(RedirectToAction("Manage")); //ViewBag.ErrorMessage = "Администратор не может удалить свою учетную запись"; //return View("Error"); } var currentUserId = User.Identity.GetUserId(); using (var db = new ContestMeterDbContext()) { var user = db.Users.Find(currentUserId); if (user != null) { user.IsDeleted = true; db.Entry(user).State = EntityState.Modified; await db.SaveChangesAsync(); } else { return(RedirectToAction("Manage")); } } AuthenticationManager.SignOut(); return(RedirectToAction("Index", "Home")); }
public async System.Threading.Tasks.Task <ActionResult> Edit(ContestsEditViewModel model) { if (ModelState.IsValid) { if (await _db.Contests.AnyAsync(c => c.ContestsTypeId == model.ContestsTypeId && c.Name == model.Name && c.Id != model.ContestId)) { ModelState.AddModelError("", "Контест с таким именем и типом уже существует"); } else { var teacherId = User.IsInRole("administrator") ? model.TeacherId : User.Identity.GetUserId(); var contest = new Contest { Id = model.ContestId, ContestsTypeId = model.ContestsTypeId, TeacherId = teacherId, Name = model.Name, IsActive = model.IsActive }; _db.Entry(contest).State = EntityState.Modified; await _db.SaveChangesAsync(); return(RedirectToAction("Index")); } } model.ContestsTypes = new SelectList(_db.ContestsTypes, "Id", "Name"); return(View(model)); }
public async System.Threading.Tasks.Task <ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = await UserManager.FindAsync(model.UserName, model.Password); if (user != null) { if (!user.IsDeleted) { await SignInAsync(user, model.RememberMe); using (var db = new ContestMeterDbContext()) { var userInfo = await db.UserInfos.FindAsync(user.UserInfoId); if (userInfo != null) { userInfo.LastVisitDate = DateTime.Now; db.Entry(userInfo).State = EntityState.Modified; await db.SaveChangesAsync(); } } return(RedirectToLocal(returnUrl)); } ModelState.AddModelError("", "Регистрация пользователя не была подтверждена или он был удален. Администратор должен подтвердить регистрацию/удаление."); } else { ModelState.AddModelError("", "Неправильное имя пользователя или пароль."); } } return(View(model)); }
public async Task <ActionResult> Edit(TeamsEditViewModel model) { if (ModelState.IsValid) { var currentTeam = _db.Teams.Find(model.TeamId); if (currentTeam == null) { return(HttpNotFound()); } if ((await _db.Teams.AnyAsync(t => t.Name == model.Name) || model.Name == "") && model.MaxTeamNumber == currentTeam.MaxTeamNumber) { ModelState.AddModelError("", "Команда с таким названием уже существует или не задано название команды"); } else if (model.Name != "Одиночки" && currentTeam.Name == "Одиночки") { ModelState.AddModelError("", "Нельзя изменить название у команды 'Одиночки'"); } else { if (model.MaxTeamNumber < currentTeam.Participants.Count) { ModelState.AddModelError("", "Максимальное количество участников в команде меньше, чем текущее количество участников. Пожалуйста, сначала сократите текущее количество участников в команде."); } else { var team = _db.Teams.Find(model.TeamId); if (team == null) { return(HttpNotFound()); } team.Name = model.Name; team.MaxTeamNumber = model.MaxTeamNumber; _db.Entry(team).State = EntityState.Modified; await _db.SaveChangesAsync(); return(RedirectToAction("Index")); } } } return(View(model)); }
public async System.Threading.Tasks.Task <ActionResult> DeleteAccount(string id) { if (string.IsNullOrEmpty(id)) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var user = db.Users.Find(id); if (user == null) { return(HttpNotFound()); } var administratorsRoleId = db.Roles.First(r => r.Name == "administrator").Id; var participantsRoleId = db.Roles.First(r => r.Name == "participant").Id; var teachersRoleId = db.Roles.First(r => r.Name == "teacher").Id; var userRoleId = user.Roles.First().RoleId; if (administratorsRoleId == userRoleId) { TempData["Message"] = "Администратор не может удалить свою учетную запись"; return(RedirectToAction("DeletedAccountsList")); //ViewBag.ErrorMessage = "Администратор не может удалить свою учетную запись"; //return View("Error"); } else if (participantsRoleId == userRoleId) { var userTeam = db.Teams.FirstOrDefault(t => t.Id == user.TeamId); if (userTeam != null) { userTeam.Participants.Remove(user); db.Entry(userTeam).State = EntityState.Modified; } var teamParticipants = db.TeamParticipants.FirstOrDefault(tp => tp.ParticipantId == user.Id && tp.TeamId == userTeam.Id); if (teamParticipants != null) { db.Entry(teamParticipants).State = EntityState.Deleted; } } else if (teachersRoleId == userRoleId) { var teacherContests = db.Contests.Where(c => c.TeacherId == user.Id); foreach (var teacherContest in teacherContests) { db.Entry(teacherContest).State = EntityState.Deleted; } db.SaveChanges(); } if (user.UserInfoId != null) { var userInfo = await db.UserInfos.FindAsync(user.UserInfoId); if (userInfo != null) { db.Entry(userInfo).State = EntityState.Deleted; await db.SaveChangesAsync(); } } var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(db)); userManager.Delete(user); await db.SaveChangesAsync(); TempData["Message"] = "Пользователь " + user.UserName + " был удален."; return(RedirectToAction("DeletedAccountsList")); }