public ContestData(string question, string[] answers, string[][] corrections,
                       bool[] correct, string[] sentences = null, string[] finalSentences = null)
    {
        IContestSentence[] correctionsSentences = new IContestSentence[numberOfAnswers];
        IContestSentence   final = finalSentences == null? null : SentenceListWithEffects(finalSentences);

        for (int i = 0; i < numberOfAnswers; i++)
        {
            correctionsSentences[i] = SentenceListWithEffects(corrections[i], final);
        }

        ContestQuestion q = new ContestQuestion(this, question, answers, correct, correctionsSentences);

        start = SentenceListWithEffects(sentences, q);
    }
Esempio n. 2
0
        public ActionResult QuestionForm(ContestQuestion contestQuestion)
        {
            var contestQuestionDb = _context.ContestQuestions
                                    .Include(cq => cq.Question)
                                    .Include(cq => cq.ContestQuestionUsers)
                                    .SingleOrDefault(cq => cq.Id == contestQuestion.Id);

            var questionDb = _context.Questions.Include(q => q.Answers).SingleOrDefault(q => q.Id == contestQuestionDb.Question.Id);

            if (contestQuestionDb.ContestQuestionUsers == null)
            {
                contestQuestionDb.ContestQuestionUsers = new List <ContestQuestionUser>();
            }

            int radioIndex = Int32.Parse(Request.Form["UserAnswer"]);

            contestQuestionDb.ContestQuestionUsers.Add(new ContestQuestionUser()
            {
                UserId              = User.FindFirstValue(ClaimTypes.NameIdentifier),
                ContestQuestion     = contestQuestionDb,
                IsAnsweredCorrectly = questionDb.Answers[radioIndex].IsCorrect
            });

            var UserId        = User.FindFirstValue(ClaimTypes.NameIdentifier);
            var isRegularUser = _userManager.GetUsersInRoleAsync("User").Result.Any(user => user.Id == UserId);

            /*
             * admin a moderator mozu otazku zobrazit lubovolny pocet krat bez zvysenia poctu zobrazeni (dolezite len pre pouzivatelov)
             * avsak pri ich odpovedi je potrebne zapocitat aj zobrazenie (aby sa nestalo ze odpovedi je viac ako zobrazeni)
             */
            if (!isRegularUser)
            {
                contestQuestionDb.ViewCount++;
            }

            _context.SaveChanges();

            return(RedirectToAction("MyContests"));
        }
Esempio n. 3
0
        public ActionResult Delete(Contest contest)
        {
            var contestDb = _context.Contests.Include(c => c.ContestQuestions).SingleOrDefault(q => q.Id == contest.Id);

            var contestHasAnswers = _context.ContestQuestionUsers.Include(cqu => cqu.ContestQuestion).
                                    Where(cqu => cqu.ContestQuestion.ContestId == contestDb.Id).Any();

            if (contestHasAnswers)
            {
                //error handling
                return(View("ErrorOnDelete", contestDb));
            }

            while (contestDb.ContestQuestions.Any())
            {
                ContestQuestion contestQuestion = contestDb.ContestQuestions[0];
                contestDb.ContestQuestions.RemoveAt(0);
                _context.ContestQuestions.Remove(contestQuestion);
            }
            _context.Contests.Remove(contestDb);
            _context.SaveChanges();

            return(RedirectToAction("Index"));
        }
        public void Copy(OjsDbContext context, TelerikContestSystemEntities oldDb)
        {
            var cSharpSubmissionType     = context.SubmissionTypes.FirstOrDefault(x => x.Name == "C# code");
            var cPlusPlusSubmissionType  = context.SubmissionTypes.FirstOrDefault(x => x.Name == "C++ code");
            var javaScriptSubmissionType = context.SubmissionTypes.FirstOrDefault(x => x.Name == "JavaScript code (NodeJS)");

            foreach (var oldContest in oldDb.Contests)
            {
                var contest = new Contest
                {
                    OldId             = oldContest.Id,
                    CreatedOn         = oldContest.AddedOn,
                    PreserveCreatedOn = true,
                    StartTime         = oldContest.ActiveFrom,
                    EndTime           = oldContest.ActiveTo,
                    ContestPassword   = oldContest.Password,
                    PracticePassword  = oldContest.Password,
                    OrderBy           = oldContest.Order,
                    Name      = oldContest.Name.Trim(),
                    IsVisible = oldContest.IsVisible,
                    LimitBetweenSubmissions = oldContest.SubmissionsTimeLimit,
                };

                // Practice times
                if (!oldContest.ActiveFrom.HasValue && !oldContest.ActiveTo.HasValue)
                {
                    contest.PracticeStartTime = DateTime.Now;
                    contest.PracticeEndTime   = null;
                }
                else if (oldContest.CanBePracticedAfterContest)
                {
                    contest.PracticeStartTime = oldContest.ActiveTo;
                    contest.PracticeEndTime   = null;
                }
                else if (oldContest.CanBePracticedDuringContest)
                {
                    contest.PracticeStartTime = oldContest.ActiveFrom;
                    contest.PracticeEndTime   = null;
                }
                else
                {
                    contest.PracticeStartTime = null;
                    contest.PracticeEndTime   = null;
                }

                // Contest category
                var categoryName = oldContest.ContestType.Name;
                var category     = context.ContestCategories.FirstOrDefault(x => x.Name == categoryName);
                contest.Category = category;

                // Contest question
                if (oldContest.Question != null)
                {
                    var question = new ContestQuestion
                    {
                        AskOfficialParticipants = true,
                        AskPracticeParticipants = true,
                        Text = oldContest.Question.Trim(),
                        Type = ContestQuestionType.Default,
                    };

                    if (oldContest.Answers != null)
                    {
                        var answers = oldContest.Answers.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (var answerText in answers)
                        {
                            if (!string.IsNullOrWhiteSpace(answerText))
                            {
                                var answer = new ContestQuestionAnswer {
                                    Text = answerText.Trim()
                                };
                                question.Answers.Add(answer);
                            }
                        }
                    }

                    contest.Questions.Add(question);
                }

                // Contest submission types
                if (oldContest.ContestType.AllowCSharpCode)
                {
                    contest.SubmissionTypes.Add(cSharpSubmissionType);
                }

                if (oldContest.ContestType.AllowCPlusPlusCode)
                {
                    contest.SubmissionTypes.Add(cPlusPlusSubmissionType);
                }

                if (oldContest.ContestType.AllowJavaScriptCode)
                {
                    contest.SubmissionTypes.Add(javaScriptSubmissionType);
                }

                context.Contests.Add(contest);
                Console.WriteLine(contest);
            }

            context.SaveChanges();
        }