//Не является операцией сервиса private void InitStartTestParams(TestSession newSession, StartTestParams retValue, int timeLimit, bool isResume, DataClassesTestorCoreDataContext dataContext) { retValue.StartTime = newSession.StartTime; var questIds = from c in newSession.TestSessionQuestions orderby c.QuestionIndex select new { QuestId = c.QuestionId, Mark = c.CoreQuestion.QuestionMark, IsRightAnswer = c.IsRightAnswer }; List <int> listIds = new List <int>(); List <int> ansIds = new List <int>(); double maxScore = 0; foreach (var quest in questIds) { listIds.Add(quest.QuestId); if (quest.IsRightAnswer != null) { ansIds.Add(quest.QuestId); } maxScore += quest.Mark; } retValue.TestId = newSession.TestId; retValue.QuestIds = listIds.ToArray(); retValue.AnsIds = ansIds.ToArray(); retValue.MaxScore = maxScore; retValue.TestSettings = Helper.GetTestSettingsData(retValue.TestId); retValue.UniqId = newSession.UniqId; if (isResume) { retValue.CurrentScore = GetScore(newSession, dataContext); } else { retValue.CurrentScore = 0; } if (timeLimit > 0) { retValue.RemaningTime = retValue.StartTime.AddSeconds(timeLimit) - DateTime.Now; } }
public RemoteTestingProvider(IServerProvider webServerProvider, TestorTreeItem selectedTest, TestorData testorData, StartTestParams startParams, bool useCompression) { _webServerProvider = webServerProvider; _selectedTest = selectedTest; _testorData = testorData; _coreTest = CoreTestRowAdapter.GetAdapter(_testorData.CoreTests[0]); _useCompression = useCompression; _startParams = startParams; if (_startParams != null) { InitStartParams(); _ansIds.AddRange(_startParams.AnsIds); _score = _startParams.CurrentScore; } else { State = ProviderState.PreTesting; } }
internal override void ProcessQuestion(bool isNewQuestion) { if (_webServerProvider == null) { StartTestParams startParams = StaticServerProvider.TestClient.GetNotCommitedSessions(0, false); if (startParams != null && startParams.AdditionalTime.HasValue) { AdditionalTime = startParams.AdditionalTime.Value; OnTimeChanged(); } } if (isNewQuestion) { InitNextId(0); } if (State == ProviderState.Results) { return; } int qId = _questIds[_index]; try { bool getBlobs = _webServerProvider == null; if (_useCompression) { _currentQuestion = HtmlStore.GetHtmlStore(DataCompressor.DecompressData <TestorData>(TestClient.GetQuestion(qId, getBlobs)), qId); } else { _currentQuestion = HtmlStore.GetHtmlStore(TestClient.GetQuestionData(qId, getBlobs), qId); } } catch (TimeoutException) { _currentQuestion = null; } catch { State = ProviderState.Results; } }
protected void Page_Load(object sender, EventArgs e) { if (LocalUser.IsIntranet && !Context.User.Identity.IsAuthenticated) { Response.Redirect("~/Login.aspx"); } StartTestParams ncs = LocalUser.TestClient.GetNotCommitedSessions(0, false); if (ncs != null) { Server.Transfer("~/Testing.aspx"); } MultiViewMain.ActiveViewIndex = 0; LabelTestname.Visible = false; requirementsPanel.Visible = false; if (Context.User.Identity.IsAuthenticated) { var currentUser = LocalUser.SecurityProvider.CurrentUser; if (currentUser == null) { FormsAuthentication.SignOut(); Response.Redirect("~/Login.aspx"); } string userName = String.Format(":: {0} {1} {2}", HtmlStore.GetString(currentUser.LastName), HtmlStore.GetString(currentUser.FirstName), HtmlStore.GetString(currentUser.SecondName)); Label lbl = (this.Master.FindControl("userName") as Label); if (String.IsNullOrEmpty(userName.Trim())) { lbl.Text = currentUser.Login; } else { lbl.Text = userName; } } if (InitPageMode()) { InitTree(); } else { InitTestList(); InitNavigator(); if (_currentItem.ItemType == TestorItemType.Test || _currentItem.ItemType == TestorItemType.MasterTest) { MultiViewMain.ActiveViewIndex = 2; postButton.Text = "Приступить к тестированию"; _currentTest = DataCompressor.DecompressData <TestorData>( LocalUser.TestEdit.GetTestSettings(_currentItem.TestId.Value)); testDetails.Text = HttpHandler.GetPreTestingHtml(_currentTest.CoreTests[0]); TestorData.CoreTestsRow test = _currentTest.CoreTests[0]; LabelTestname.Visible = true; RemoteTestingProvider _provider = new RemoteTestingProvider(LocalUser.WebServerProvider, _currentItem, _currentTest, null, false); if (!_provider.IsTestActive) { postButton.Enabled = false; LabelTestname.ForeColor = Color.Red; LabelTestname.Text = _provider.NotActiveMessage; if (_provider.RequirementsTests != null) { postButton.Enabled = false; LabelTestname.Text = "Перед прохлждением данного теста необходимо пройти предыдущие тесты"; LabelTestname.ForeColor = Color.Red; requirementsPanel.Visible = true; requirementsRepeater.DataSource = _provider.RequirementsTests; requirementsRepeater.DataBind(); } return; } if (LocalUser.SecurityProvider.CurrentUser.UserRole == TestorUserRole.Administrator || LocalUser.SecurityProvider.CurrentUser.UserRole == TestorUserRole.Teacher || LocalUser.SecurityProvider.CurrentUser.UserRole == TestorUserRole.Laboratorian) { LabelTestname.Text = String.Format("Тест: <a href=\"/Manage/Statistics.aspx?testId={0}\">{1}</a>", _currentItem.TestId, _currentItem.ItemName.Trim()); } else { LabelTestname.Text = String.Format("Тест: \"{0}\"", _currentItem.ItemName.Trim()); } if (postButton.Attributes[BUTTON_MODE] == NULL_VALUE) { postButton.Attributes[BUTTON_MODE] = NTMODE_VALUE; } else { postButton.Attributes[BUTTON_MODE] = TESTING_VALUE; } postButton.Attributes[BUTTON_VALUE] = _currentItem.ItemId.ToString(); } } }
public StartTestParams StartTest(int testId) { Debug.Assert(testId > 0); StartTestParams retValue = new StartTestParams(); using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString)) { var test = dataContext.CoreTests.Where(c => c.TestId == testId).First(); if (!test.IsActive || test.IsDeleted) { throw new Exception("Тест не активен"); } if ((test.BeginTime > DateTime.Now && test.BeginTime != DateTime.MinValue) || (test.EndTime < DateTime.Now && test.EndTime != DateTime.MinValue)) { throw new Exception("Тест не активен"); } int count = dataContext.TestSessions.Where(c => c.TestId == testId && c.UserId == Provider.CurrentUser.UserId).Count(); if (test.PassagesNumber != 0 && count >= test.PassagesNumber) { throw new Exception("Превышено максимальное количество попыток"); } if (GetCurrentUserFailRequirements(testId).Count() > 0) { throw new Exception("Предварительные тесты не пройдены"); } TestSession newSession = new TestSession(); newSession.UserId = Provider.CurrentUser.UserId; newSession.TestId = test.TestId; newSession.Score = -1; newSession.IsPassed = false; List <TestSessionQuestion> sessionQuests = new List <TestSessionQuestion>(); if (test.IsMasterTest) { var masterParts = dataContext.CoreMasterParts.Where(c => c.MasterTestId == test.TestId).ToArray(); foreach (var masterPart in masterParts) { sessionQuests.AddRange(GetQuestsFromTest(newSession, null, masterPart, dataContext)); } } else { sessionQuests.AddRange(GetQuestsFromTest(newSession, test, null, dataContext)); } short i = 0; if (test.IsMasterTest && test.VariantsMode) { foreach (var quest in sessionQuests.OrderBy(c => Guid.NewGuid())) { quest.QuestionIndex = i; dataContext.TestSessionQuestions.InsertOnSubmit(quest); i++; } } else { foreach (var quest in sessionQuests) { quest.QuestionIndex = i; dataContext.TestSessionQuestions.InsertOnSubmit(quest); i++; } } newSession.UniqId = Guid.NewGuid().ToString().Substring(0, 5); newSession.ClientIP = Provider.ClientIP; dataContext.TestSessions.InsertOnSubmit(newSession); newSession.StartTime = DateTime.Now; dataContext.SubmitChanges(); InitStartTestParams(newSession, retValue, test.TimeLimit * 60, false, dataContext); newSession.MaxScore = retValue.MaxScore; dataContext.SubmitChanges(); } return(retValue); }
public override void StartTest() { _startParams = TestClient.StartTest(_selectedTest.TestId.Value); InitStartParams(); _currentUniqId = _startParams.UniqId; }
private void buttonOK_Click(object sender, EventArgs e) { _password = textBoxPassword.Text; if (!IsTeacherMode) { if (_resultUser == null) { MessageBox.Show("Для начала тестирования необходимо выбрать пользователя.", "Выбор пользователя", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } SetChildEnable(false); StaticServerProvider.Logout(); LoginProvider loginProvider = LoginProvider.Login(_resultUser.Login, textBoxPassword.Text, LoginHelper.Server, LoginHelper.SEND_TIMEOUT, null, new LoginProvider.LoginResultDelegate((hasPassword, errorMessage) => { this.Invoke((Action)(() => { if (hasPassword) { if (String.IsNullOrEmpty(LoginHelper.Server)) { string[] databases = StaticServerProvider.TestClient.GetDatabaseNamesList(); if (databases.Length > 0) { string dbPassword = StaticServerProvider.TestClient.GetDatabasePassword(databases[0]); using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(String.Format( "Data Source=(local);Initial Catalog={0};User ID=testingUser;Password={1}", databases[0], dbPassword))) { System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("EXEC InitDbSettings;", conn); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Console.WriteLine(cmd.ExecuteScalar()); } } } StartTestParams ncs = StaticServerProvider.TestClient.GetNotCommitedSessions(_resultUser.UserId, false); TestorData testSettings = null; if (ncs == null) { SelectSingleItemForm selectTest = new SelectSingleItemForm(_resultUser, TestingServerItemType.ActiveTestTree); if (selectTest.ShowDialog() != DialogResult.OK) { textBoxPassword.Text = String.Empty; StaticServerProvider.Logout(); LoginHelper.AnonymousLogin(); SetChildEnable(true); return; } _selectedTest = selectTest.SelectedItem; if (_selectedTest == null || _selectedTest.ItemType != TestorItemType.Test && _selectedTest.ItemType != TestorItemType.MasterTest) { MessageBox.Show("Для начала тестирования необходимо выбрать тест.", "Выбор теста", MessageBoxButtons.OK, MessageBoxIcon.Warning); _selectedTest = null; StaticServerProvider.Logout(); LoginHelper.AnonymousLogin(); SetChildEnable(true); return; } testSettings = selectTest.TestSettings; } else { testSettings = ncs.TestSettings; TestorData.CoreTestsRow coreTest = testSettings.CoreTests[0]; _selectedTest = new TestorTreeItem(0, coreTest.TestId, coreTest.TestName, coreTest.IsMasterTest ? TestorItemType.MasterTest : TestorItemType.Test, null); } RemoteTestingProvider provider = new RemoteTestingProvider(null, _selectedTest, testSettings, ncs, true); TestForm testForm = new TestForm(provider); testForm.ShowDialog(); comboBoxUserType_SelectedIndexChanged(sender, e); StaticServerProvider.Logout(); LoginHelper.AnonymousLogin(); SetChildEnable(true); } else { SystemMessage.ShowServerErrorMessage(errorMessage); textBoxPassword.Text = String.Empty; StaticServerProvider.Logout(); LoginHelper.AnonymousLogin(); SetChildEnable(true); return; } })); })); } else { SetFormEnableMode(false); _userName = textBoxStudentName.Text; StaticServerProvider.Logout(); LoginProvider loginProvider = LoginProvider.Login(_userName, _password, LoginHelper.Server, LoginHelper.SEND_TIMEOUT, null, new LoginProvider.LoginResultDelegate((hasPassword, errorMessage) => { this.Invoke((Action)(() => { SetFormEnableMode(true); if (hasPassword) { StatisticsForm statistics = new StatisticsForm(false); statistics.MdiParent = this.MdiParent; statistics.Dock = DockStyle.Fill; statistics.ControlBox = false; statistics.Show(); comboBoxUserType.SelectedIndex = 0; textBoxStudentName.Focus(); SetChildEnable(true); } else { SystemMessage.ShowServerErrorMessage(errorMessage); StaticServerProvider.Logout(); LoginHelper.AnonymousLogin(); SetChildEnable(true); return; } })); })); } }