Exemple #1
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 }));
        }
Exemple #2
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"));
        }
Exemple #3
0
        public async Task <ActionResult> Create(TeamsCreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (await _db.Teams.AnyAsync(c => c.Name == model.Name) || model.Name == "")
                {
                    ModelState.AddModelError("", "Команда с таким названием уже существует или не задано название команды");
                }
                else
                {
                    var team = new Team
                    {
                        Id            = Guid.NewGuid(),
                        Name          = model.Name,
                        MaxTeamNumber = model.MaxTeamNumber,
                        Rating        = 0,
                        Contests      = new HashSet <Contest>(),
                        Participants  = new List <ApplicationUser>()
                    };

                    _db.Teams.Add(team);
                    await _db.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }
            }
            return(View(model));
        }
Exemple #4
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));
        }
Exemple #5
0
        public async System.Threading.Tasks.Task <ActionResult> Create(ContestsCreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (await _db.Contests.AnyAsync(c => c.ContestsTypeId == model.ContestsTypeId && c.Name == model.Name))
                {
                    ModelState.AddModelError("", "Контест с таким именем и типом уже существует");
                }
                else
                {
                    var contest = new Contest
                    {
                        Id             = Guid.NewGuid(),
                        ContestsTypeId = model.ContestsTypeId,
                        TeacherId      = User.Identity.GetUserId(),
                        Name           = model.Name,
                        IsActive       = model.IsActive
                    };

                    var contestTeacher = new ContestTeacher
                    {
                        Id        = Guid.NewGuid(),
                        ContestId = contest.Id,
                        TeacherId = contest.TeacherId
                    };

                    _db.Contests.Add(contest);
                    _db.ContestTeachers.Add(contestTeacher);
                    await _db.SaveChangesAsync();

                    return(RedirectToAction("Index"));
                }
            }
            model.ContestsTypes = new SelectList(_db.ContestsTypes, "Id", "Name");
            return(View(model));
        }
Exemple #6
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"));
        }