Example #1
0
        public ActionResult Create()
        {
            var contest = new Entity.Contest
            {
                AllowClarification = true,
                AllowPrintRequest  = false,
                Begin       = Convert.ToDateTime("2099-1-1 8:00"),
                End         = Convert.ToDateTime("2099-1-1 11:00"),
                Format      = Entity.ContestFormat.OI,
                Password    = null,
                Content     = "",
                Ready       = false,
                Title       = ViewBag.CurrentUser.Nickname + "创建的比赛",
                RatingBegin = 0,
                RatingEnd   = 4000
            };
            var manager = new Entity.ContestManager
            {
                ContestID = contest.ID,
                IsCreator = true,
                UserID    = ViewBag.CurrentUser.ID
            };

            DbContext.Contests.Add(contest);
            DbContext.ContestManagers.Add(manager);
            DbContext.SaveChanges();
            return(RedirectToAction("General", "ContestSettings", new { id = contest.ID }));
        }
Example #2
0
 public HomeContest(Entity.Contest contest)
 {
     ID        = contest.ID;
     Title     = contest.Title;
     Begin     = contest.Begin;
     End       = contest.End;
     RestBegin = contest.RestBegin;
     RestEnd   = contest.RestEnd;
 }
Example #3
0
 public void OnFragmentNavigation(FirstFloor.ModernUI.Windows.Navigation.FragmentNavigationEventArgs e)
 {
     contest = App.Server.GetContest(int.Parse(e.Fragment));
     contest_id = contest.ID;
     RebuildColumn(contest_id);
     StandingItems = Bll.StandingsCache.Standings[contest_id] as List<Entity.StandingItem>;
     Sort();
     dgStandings.ItemsSource = StandingItems;
     dgStandings.Items.Refresh();
 }
Example #4
0
 public void OnFragmentNavigation(FirstFloor.ModernUI.Windows.Navigation.FragmentNavigationEventArgs e)
 {
     contest    = App.Server.GetContest(int.Parse(e.Fragment));
     contest_id = contest.ID;
     RebuildColumn(contest_id);
     StandingItems = Bll.StandingsCache.Standings[contest_id] as List <Entity.StandingItem>;
     Sort();
     dgStandings.ItemsSource = StandingItems;
     dgStandings.Items.Refresh();
 }
Example #5
0
        public Standing(Entity.User user, Entity.Contest contest)
        {
            UserID  = user.ID;
            Details = new List <StandingCol>();
            var problems = contest.Problems.OrderBy(x => x.Credit);

            foreach (var problem in problems)
            {
                Details.Add(new StandingCol(user, problem));
            }
            Key1     = Details.Sum(x => x.Key1);
            Key2     = Details.Sum(x => x.Key2);
            Key3     = Details.Sum(x => x.Key3);
            Gravatar = Helpers.Gravatar.GetAvatarURL(user.Gravatar, 180);
            Nickname = Helpers.ColorName.GetNicknameHtml(user.Nickname, user.Ratings.Sum(x => x.Credit) + 1500);
            UserID   = user.ID;
            Display1 = Key1.ToString();
            switch (contest.Format)
            {
            case Entity.ContestFormat.OI:
                Display2 = Key2 + " ms";
                break;

            case Entity.ContestFormat.OPJOI:
                Display2 = Key2.ToString();
                break;

            case Entity.ContestFormat.ACM:
                Display2 = new TimeSpan(0, 0, Key2).ToString("c");
                break;

            case Entity.ContestFormat.Codeforces:
            case Entity.ContestFormat.TopCoder:
                if (Key2 == 0 && Key3 == 0)
                {
                    Display2 = "";
                }
                else if (Key2 != 0 && Key3 == 0)
                {
                    Display2 = "+" + Key2;
                }
                else if (Key2 == 0 && Key3 != 0)
                {
                    Display2 = "-" + Key3;
                }
                else
                {
                    Display2 = "+" + Key2 + " : -" + Key3;
                }
                Key1    += Key2 * 100;
                Key1    -= Key3 * 50;
                Display1 = Key1.ToString();
                break;
            }
        }
Example #6
0
        public void OnFragmentNavigation(FragmentNavigationEventArgs e)
        {
            int id = int.Parse(e.Fragment);

            Entity.Contest contest    = App.Server.GetContest(id);
            var            wholeRange = new TextRange(txtDescription.Document.ContentStart, txtDescription.Document.ContentEnd);

            using (MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(contest.Description)))
            {
                wholeRange.Load(mem, DataFormats.Rtf);
            }
        }
Example #7
0
        public static bool IsUserInPrivateContest(Entity.User user, Entity.Contest contest)
        {
            if (DateTime.Now < contest.Begin || DateTime.Now >= contest.End)
            {
                return(true);
            }
            if (string.IsNullOrEmpty(contest.Password))
            {
                return(true);
            }
            if (user == null)
            {
                return(false);
            }
            var joinlog = contest.JoinLogs.Where(x => x.UserID == user.ID).FirstOrDefault();

            if (joinlog == null)
            {
                if (user.Role >= Entity.UserRole.Master || (from cm in contest.Managers select cm.UserID).Contains(user.ID))
                {
                    Database.DB DbContext = new Database.DB();
                    DbContext.JoinLogs.Add(new Entity.JoinLog
                    {
                        ContestID = contest.ID,
                        UserID    = user.ID
                    });
                    DbContext.SaveChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            return(true);
        }
Example #8
0
 public Contest(Entity.Contest contest)
 {
     ID           = contest.ID;
     Format       = contest.Format.ToString();
     ProblemCount = contest.Problems.Count;
     Time         = contest.Begin.ToString("yyyy-MM-dd HH:mm");
     TimeLength   = Helpers.Time.ToVagueTimeLength(contest.Begin, contest.End);
     Title        = HttpUtility.HtmlEncode(contest.Title);
     Database.DB DbContext = new Database.DB();
     UserCount = (from s in DbContext.Statuses
                  let pid = (from p in DbContext.Problems
                             where p.ContestID == contest.ID
                             select p.ID).ToList()
                            where pid.Contains(s.ProblemID) &&
                            s.Time >= contest.Begin &&
                            s.Time < contest.End
                            select s.UserID).Distinct().Count();
     Managers = "";
     foreach (var m in contest.Managers)
     {
         Managers += String.Format("<a href='/User/{0}'>{1}</a> ", m.UserID, Helpers.ColorName.GetNicknameHtml(m.User.Nickname, m.User.Ratings.Sum(x => x.Credit) + 1500));
     }
     Rating = "";
     if (contest.Ready)
     {
         Rating = string.Format("<span class='label gray'>评级赛({0}~{1})</span> ", contest.RatingBegin, contest.RatingEnd);
     }
     if (string.IsNullOrEmpty(contest.Password))
     {
         Private = false;
     }
     else
     {
         Private = true;
     }
 }
Example #9
0
        public ActionResult General(int id, Entity.Contest model)
        {
            if (!ViewBag.IsMaster)
            {
                return(RedirectToAction("Message", "Shared", new { msg = "您没有权限对本场比赛进行任何修改!" }));
            }
            var contest = DbContext.Contests.Find(id);

            if (contest.Password != model.Password)
            {
                var joinlogs = (from j in DbContext.JoinLogs
                                where j.ContestID == id
                                select j).ToList();
                foreach (var joinlog in joinlogs)
                {
                    DbContext.JoinLogs.Remove(joinlog);
                }
                DbContext.SaveChanges();
            }
            contest.Begin              = model.Begin;
            contest.RestBegin          = model.RestBegin;
            contest.RestEnd            = model.RestEnd;
            contest.End                = model.End;
            contest.Title              = model.Title;
            contest.Password           = model.Password;
            contest.Content            = model.Content;
            contest.Format             = model.Format;
            contest.RatingBegin        = model.RatingBegin;
            contest.RatingEnd          = model.RatingEnd;
            contest.AllowClarification = model.AllowClarification;
            contest.AllowPrintRequest  = model.AllowPrintRequest;
            if (model.RatingBegin > model.RatingEnd)
            {
                return(RedirectToAction("Message", "Shared", new { msg = "能力值不合法" }));
            }
            if (((Entity.User)ViewBag.CurrentUser).Role >= Entity.UserRole.Master)
            {
                contest.Ready = model.Ready;//这里只有系统管理员才可以设置这个选项,比赛创建者、管理员均无权
            }
            if (contest.Format == Entity.ContestFormat.TopCoder)
            {
                if (!(contest.Begin < contest.RestBegin && contest.RestBegin <= contest.RestEnd && contest.RestEnd < contest.End))
                {
                    return(RedirectToAction("Message", "Shared", new { msg = "比赛时间或休息时间不合法" }));
                }
            }
            else
            {
                if (!(contest.Begin < contest.End))
                {
                    return(RedirectToAction("Message", "Shared", new { msg = "比赛时间设定不合法" }));
                }
                contest.RestBegin = null;
                contest.RestEnd   = null;
            }
            if (string.IsNullOrEmpty(contest.Password))
            {
                contest.Password = null;
            }
            DbContext.SaveChanges();
            return(RedirectToAction("General", "ContestSettings", new { id = id }));
        }
 public ActionResult Create()
 {
     var contest = new Entity.Contest
     {
         AllowClarification = true,
         AllowPrintRequest = false,
         Begin = Convert.ToDateTime("2099-1-1 8:00"),
         End = Convert.ToDateTime("2099-1-1 11:00"),
         Format = Entity.ContestFormat.OI,
         Password = null,
         Content = "",
         Ready = false,
         Title = ViewBag.CurrentUser.Nickname +"创建的比赛",
         RatingBegin = 0,
         RatingEnd = 4000
     };
     var manager = new Entity.ContestManager
     {
         ContestID = contest.ID,
         IsCreator = true,
         UserID = ViewBag.CurrentUser.ID
     };
     DbContext.Contests.Add(contest);
     DbContext.ContestManagers.Add(manager);
     DbContext.SaveChanges();
     return RedirectToAction("General", "ContestSettings", new { id = contest.ID });
 }