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); }
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); }
public string GetQuestionHtml() { string retValue = QuestionsHtmlFactory.GetQuestionHtml( _provider.CurrentQuestion, _provider.ProviderMode); if (_provider.ProviderMode == ProviderMode.LocalMode) { return(GetQuestHtml(retValue)); } else { return(retValue); } }
//Не является операцией сервиса 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); }