Esempio n. 1
0
        internal override bool ProcessAnswer(int questId, ref string message)
        {
            if (_questIds.Contains(questId))
            {
                _ansIds.Add(questId);
            }
            else
            {
                return(false);
            }
            if (_currentQuestion.QuestIndex != questId)
            {
                return(false);
            }
            BaseQuestionProvider qp = QuestionsHtmlFactory.GetQuestionProvider(_currentQuestion);
            string answer           = null;
            bool?  isRightAnswer    = qp.IsRightAnswer(_requestParams, ref message, ref answer);

            if (!isRightAnswer.HasValue)
            {
                return(false);
            }
            double mark = 0;

            if (isRightAnswer.Value)
            {
                mark    = _testorData.CoreQuestions.Where(c => c.QuestionId == questId).FirstOrDefault().QuestionMark;
                _score += mark;
            }
            OnScoreChanged();
            return(true);
        }
Esempio n. 2
0
        public QuestAnswerResult ProcessAnswer(int questId, Dictionary <string, List <string> > requestParams)
        {
            Debug.Assert(questId > 0);

            QuestAnswerResult retValue = new QuestAnswerResult();

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                var session = (from c in dataContext.TestSessions
                               join x in dataContext.CoreTests on c.TestId equals x.TestId
                               where c.EndTime == null && c.UserId == Provider.CurrentUser.UserId
                               select new
                {
                    x.TestId,
                    x.TimeLimit,
                    c.TestSessionId,
                    c.StartTime,
                    c.AdditionalTime
                }).First();
                int timeLimit = session.TimeLimit;
                if (timeLimit != 0 && session.AdditionalTime.HasValue)
                {
                    timeLimit += session.AdditionalTime.Value;
                }
                if (session.TimeLimit != 0 && (DateTime.Now - session.StartTime).TotalMinutes > timeLimit + 1)
                {
                    throw new Exception("Время истекло");
                }
                TestorData           testorData      = GetQuestion(questId, true, false, false);
                HtmlStore            currentQuestion = HtmlStore.GetHtmlStore(testorData, questId);
                BaseQuestionProvider qp = QuestionsHtmlFactory.GetQuestionProvider(currentQuestion);
                string message          = null;
                string answer           = null;
                retValue.isRightAnswer = qp.IsRightAnswer(requestParams, ref message, ref answer);
                retValue.Message       = message;
                retValue.Score         = 0;
                if (!retValue.isRightAnswer.HasValue)
                {
                    return(retValue);
                }
                if (retValue.isRightAnswer.Value)
                {
                    retValue.Score = testorData.CoreQuestions.Where(c => c.QuestionId == questId).FirstOrDefault().QuestionMark;
                }
                var tsq = dataContext.TestSessionQuestions.Where(
                    c => c.QuestionId == questId && c.TestSessionId == session.TestSessionId).First();
                tsq.IsRightAnswer = retValue.isRightAnswer;
                tsq.Answer        = answer;
                dataContext.SubmitChanges();
            }
            return(retValue);
        }
Esempio n. 3
0
        public string GetQuestionHtml()
        {
            string retValue = QuestionsHtmlFactory.GetQuestionHtml(
                _provider.CurrentQuestion, _provider.ProviderMode);

            if (_provider.ProviderMode == ProviderMode.LocalMode)
            {
                return(GetQuestHtml(retValue));
            }
            else
            {
                return(retValue);
            }
        }
Esempio n. 4
0
        //Не является операцией сервиса
        private TestorData GetQuestion(int questId, bool getRightAnswer, bool isAppeal, bool getBLOBs)
        {
            TestorData retValue = new TestorData();

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                if (!isAppeal)
                {
                    if (QueriesUtility.IsQuestInSessionFunc(dataContext, Provider.CurrentUser.UserId, questId) <= 0)
                    {
                        throw new Exception("Данный вопрос не входит в тест");
                    }
                }
                var questRow = retValue.CoreQuestions.NewCoreQuestionsRow();
                var quest    = (from c in dataContext.CoreQuestions
                                where c.QuestionId == questId
                                select new
                {
                    c.TestId,
                    c.QuestionType,
                    c.QuestionId,
                    c.Question,
                    c.QuestionMark
                }).First();
                questRow.TestId           = quest.TestId;
                questRow.QuestionType     = quest.QuestionType;
                questRow.QuestionId       = quest.QuestionId;
                questRow.Question         = quest.Question;
                questRow.QuestionMark     = quest.QuestionMark;
                questRow.QuestionMetadata = String.Empty;
                var questProvider = QuestionsHtmlFactory.GetQuestionProvider((QuestionType)quest.QuestionType, null);
                if (getRightAnswer || questProvider.SendAnswersToClient)
                {
                    var answers = from c in dataContext.CoreAnswers
                                  where c.QuestionId == quest.QuestionId
                                  select new
                    {
                        c.Answer,
                        c.AnswerId,
                        c.IsTrue
                    };
                    foreach (var answer in answers)
                    {
                        var answerRow = retValue.CoreAnswers.NewCoreAnswersRow();
                        answerRow.Answer         = answer.Answer;
                        answerRow.AnswerId       = answer.AnswerId;
                        answerRow.AnswerMetadata = String.Empty;
                        answerRow.QuestionId     = questRow.QuestionId;
                        if (getRightAnswer)
                        {
                            answerRow.IsTrue = answer.IsTrue;
                        }
                        else
                        {
                            answerRow.IsTrue = false;
                        }
                        retValue.CoreAnswers.AddCoreAnswersRow(answerRow);
                    }
                }
                if (getBLOBs)
                {
                    var blobs = from c in dataContext.CoreBLOBs
                                where c.QuestionId == quest.QuestionId
                                select new
                    {
                        c.BLOBId,
                        c.BLOBContent
                    };
                    foreach (var blob in blobs)
                    {
                        var blobRow = retValue.CoreBLOBs.NewCoreBLOBsRow();
                        blobRow.BLOBContent = blob.BLOBContent.ToArray();
                        blobRow.BLOBId      = blob.BLOBId;
                        blobRow.QuestionId  = questRow.QuestionId;
                        retValue.CoreBLOBs.AddCoreBLOBsRow(blobRow);
                    }
                }
                retValue.CoreQuestions.AddCoreQuestionsRow(questRow);
            }
            return(retValue);
        }