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