示例#1
0
        //Не является операцией сервиса
        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;
            }
        }
示例#2
0
 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;
     }
 }
示例#3
0
        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;
            }
        }
示例#4
0
        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();
                }
            }
        }
示例#5
0
        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);
        }
示例#6
0
 public override void StartTest()
 {
     _startParams = TestClient.StartTest(_selectedTest.TestId.Value);
     InitStartParams();
     _currentUniqId = _startParams.UniqId;
 }
示例#7
0
 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;
                 }
             }));
         }));
     }
 }