コード例 #1
0
ファイル: TestContentForm.cs プロジェクト: clgray/Locator
        public TestContentForm(TestorData data)
        {
            InitializeComponent();
            _data = data;
            int i = 0;

            foreach (var test in ProjectState.TestHelpers.OrderBy(c => c.TestName))
            {
                if (test.IsMasterTest)
                {
                    continue;
                }
                if (test.IsTestorDataLoaded && test.TestorData == data)
                {
                    _index = i;
                }
                tscbTests.Items.Add(test);
                i++;
            }
            tscbTests.SelectedIndex = _index;
            bool canBackForward = ProjectState.TestHelpers.Count > 1;

            tsbBackTest.Enabled    = canBackForward;
            tsbForwardTest.Enabled = canBackForward;

            _provider = new EditProvider(HtmlStore.GetHtmlStore(_data, 1));
            _provider.ProviderMode = ProviderMode.EditMode;
            TestingHttpServer.StartServer(_provider);
            TestingHttpServer.ServerNotStarted.WaitOne();
            webBrowserQuestion.Navigate(TestingHttpServer.BaseUrl);
        }
コード例 #2
0
 public void SendTests(TestorData testorData, List<int> groupIds)
 {
     SystemStateManager.OnStateChanged(true);
     TreeNode selectedNode = this.SelectedNode;
     SynchronizationContext context = SynchronizationContext.Current;
     _currentThread = new Thread(new ThreadStart(() =>
     {
         byte[] arr = DataCompressor.CompressData(testorData);
         try
         {
             TestorTreeItem[] newItems = StaticServerProvider.TestEdit.SendTests(arr,
                 _selectedItem.ItemId, groupIds.ToArray());
             foreach (var item in newItems)
                 item.ItemOwner = StaticServerProvider.CurrentUser.UserId;
             context.Send(d =>
             {
                 AddTreeNodes(newItems, selectedNode, false);
                 if (selectedNode != null)
                     selectedNode.Expand();
             }, null);
         }
         catch (Exception ex)
         {
             SystemMessage.ShowErrorMessage(ex);
         }
         finally
         {
             context.Send(d =>
             {
                 SystemStateManager.OnStateChanged(false);
             }, null);
         }
     }));
     _currentThread.Start();
 }
コード例 #3
0
 public LocalTestingProvider(TestorData tests, TestHelper testHelper)
 {
     _studentName = "Иванов Иван Иванович";
     State        = ProviderState.PreTesting;
     _testHelper  = testHelper;
     _testorData  = tests;
     _coreTest    = CoreTestRowAdapter.GetAdapter(testHelper.TestorData.CoreTests.Where(
                                                      c => c.TestKey == new Guid(testHelper.TestKey)).First());
     if (!_testHelper.IsMasterTest)
     {
         if (_coreTest.QuestionsNumber != 0)
         {
             _questCount = _coreTest.QuestionsNumber;
         }
         else
         {
             _questCount = _testHelper.QuestCount;
         }
     }
     else
     {
         _questCount = 0;
         foreach (var quest in _testHelper.SubTests)
         {
             _questCount += quest.Value;
         }
     }
 }
コード例 #4
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
 public static void AddToDataset(TestorData dataSet,
                                 TestorData.CoreTestsRow testRow, HtmlStore[] store)
 {
     if (dataSet == null)
     {
         return;
     }
     foreach (var question in store.OrderBy(c => c.QuestIndex))
     {
         TestorData.CoreQuestionsRow newRow = dataSet.CoreQuestions.NewCoreQuestionsRow();
         newRow.QuestionId   = question.QuestIndex;
         newRow.QuestionType = (byte)question.QuestionType;
         newRow.Question     = question.Html;
         newRow.TestId       = testRow.TestId;
         newRow.QuestionMark = 1;
         dataSet.CoreQuestions.AddCoreQuestionsRow(newRow);
         ProcessBLOBs(dataSet, question, newRow.QuestionId);
         foreach (var answer in question.SubItems)
         {
             TestorData.CoreAnswersRow ansRow = dataSet.CoreAnswers.NewCoreAnswersRow();
             ansRow.QuestionId = newRow.QuestionId;
             ansRow.Answer     = answer.Html;
             ansRow.IsTrue     = answer.IsTrue;
             dataSet.CoreAnswers.AddCoreAnswersRow(ansRow);
             ProcessBLOBs(dataSet, answer, newRow.QuestionId);
         }
     }
 }
コード例 #5
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
        public static HtmlStore GetHtmlStore(TestorData testorData, int questionId)
        {
            HtmlStore retValue    = new HtmlStore();
            var       currentRows = testorData.CoreQuestions.Where(c => c.QuestionId == questionId);

            if (currentRows.Count() == 0)
            {
                return(null);
            }
            var currentRow = currentRows.FirstOrDefault();

            retValue.QuestIndex   = currentRow.QuestionId;
            retValue.Html         = currentRow.Question;
            retValue.QuestionType = (QuestionType)currentRow.QuestionType;
            foreach (var blob in currentRow.GetCoreBLOBsRows())
            {
                retValue.Images.Add(blob.BLOBId, blob.BLOBContent);
            }
            foreach (var ans in currentRow.GetCoreAnswersRows())
            {
                HtmlStore answer = new HtmlStore();
                answer.QuestIndex = ans.AnswerId;
                answer.Html       = ans.Answer;
                answer.IsTrue     = ans.IsTrue;
                retValue.SubItems.Add(answer);
            }
            return(retValue);
        }
コード例 #6
0
ファイル: ProjectState.cs プロジェクト: clgray/Locator
        public static void CreateMasterTest()
        {
            InputBox ib = new InputBox("Имя мастер теста", "Введите имя мастер теста:");

            if (ib.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            if (ProjectState.TestHelpers.Where(c => c.TestName == ib.Input).Count() > 0)
            {
                SystemMessage.ShowWarningMessage("Данное имя теста уже используется.");
                return;
            }
            TestorData td = new TestorData();

            TestorData.CoreTestsRow testRow = HtmlStore.CreateCoreTest(td, ib.Input);
            testRow.IsMasterTest = true;
            td.CoreTests.AddCoreTestsRow(testRow);
            TestHelper testHelper = new TestHelper(ProjectState.DataPackageManager);

            testHelper.TestKey      = testRow.TestKey.ToString();
            testHelper.ConvTime     = DateTime.Now;
            testHelper.FullFileName = String.Empty;
            testHelper.TestorData   = td;
            testHelper.TestName     = ib.Input;
            testHelper.QuestCount   = 0;
            testHelper.IsMasterTest = true;
            List <TestHelper> helperList = new List <TestHelper>();

            helperList.Add(testHelper);
            ProjectState.AddTests(helperList);
        }
コード例 #7
0
 public void CreateMasterTest(string testName)
 {
     TestorData data = new TestorData();
     TestorData.CoreTestsRow row = HtmlStore.CreateCoreTest(data, testName);
     row.IsMasterTest = true;
     data.CoreTests.Rows.Add(row);
     SendTests(data, new List<int>());
 }
コード例 #8
0
ファイル: TestContentForm.cs プロジェクト: clgray/Locator
 private void toolStripComboBoxTests_SelectedIndexChanged(object sender, EventArgs e)
 {
     _index      = tscbTests.SelectedIndex;
     _testHelper = tscbTests.SelectedItem as TestHelper;
     _data       = _testHelper.TestorData;
     bindingSource.DataSource = _data.CoreQuestions;
     InitParams();
 }
コード例 #9
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
        public static TestorData GetDataSet(HtmlStore[] store, string testName)
        {
            TestorData retValue = new TestorData();

            TestorData.CoreTestsRow testRow = CreateCoreTest(retValue, testName);
            retValue.CoreTests.AddCoreTestsRow(testRow);
            HtmlStore.AddToDataset(retValue, testRow, store);
            return(retValue);
        }
コード例 #10
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
 private static void ProcessBLOBs(TestorData dataSet,
                                  HtmlStore store, int questionId)
 {
     foreach (var image in store.Images)
     {
         TestorData.CoreBLOBsRow blobRow = dataSet.CoreBLOBs.NewCoreBLOBsRow();
         blobRow.BLOBId      = image.Key;
         blobRow.QuestionId  = questionId;
         blobRow.BLOBContent = image.Value;
         dataSet.CoreBLOBs.AddCoreBLOBsRow(blobRow);
     }
 }
コード例 #11
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);
        }
コード例 #12
0
        public TestorData GetTestData(Uri uri)
        {
            TestorData  dataSet = new TestorData();
            PackagePart part    = _manager.CurrentPackage.GetPart(uri);

            using (Stream stream = part.GetStream())
            {
                BinaryFormatter bin = new BinaryFormatter();
                dataSet = (TestorData)bin.Deserialize(stream);
                stream.Close();
            }
            return(dataSet);
        }
コード例 #13
0
ファイル: ServerHelper.cs プロジェクト: clgray/Locator
 public TestorData GetTestSettingsData(int testId)
 {
     using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
     {
         CoreTest   test = dataContext.CoreTests.Where(c => c.TestId == testId).FirstOrDefault();
         TestorData data = new TestorData();
         TestorData.CoreTestsRow coreTestRow = data.CoreTests.NewCoreTestsRow();
         coreTestRow.AllowAdmitQuestions = test.AllowAdmitQuestions;
         coreTestRow.BeginTime           = test.BeginTime;
         coreTestRow.Description         = test.Description;
         coreTestRow.EndTime             = test.EndTime;
         coreTestRow.IsActive            = test.IsActive;
         coreTestRow.IsMasterTest        = test.IsMasterTest;
         coreTestRow.PassagesNumber      = test.PassagesNumber;
         coreTestRow.PassingScore        = test.PassingScore;
         coreTestRow.QuestionsNumber     = test.QuestionsNumber;
         coreTestRow.IsDeleted           = test.IsDeleted;
         if (coreTestRow.QuestionsNumber == 0)
         {
             if (test.IsMasterTest)
             {
                 var masterParts = dataContext.CoreMasterParts.Where(c => c.MasterTestId == testId);
                 if (masterParts.Count() > 0)
                 {
                     coreTestRow.QuestionsNumber = (short)masterParts.Sum(c => c.QuestionsNumber);
                 }
                 else
                 {
                     coreTestRow.QuestionsNumber = 0;
                 }
             }
             else
             {
                 coreTestRow.QuestionsNumber = (short)test.CoreQuestions.Count();
             }
         }
         coreTestRow.ShowRightAnswersCount = test.ShowRightAnswersCount;
         coreTestRow.ShowTestResult        = test.ShowTestResult;
         coreTestRow.ShowDetailsTestResult = test.ShowDetailsTestResult;
         coreTestRow.TestId       = test.TestId;
         coreTestRow.TestKey      = test.TestKey;
         coreTestRow.TestName     = test.TestName;
         coreTestRow.TimeLimit    = test.TimeLimit;
         coreTestRow.VariantsMode = test.VariantsMode;
         coreTestRow.AdaptiveMode = test.AdaptiveMode;
         data.CoreTests.AddCoreTestsRow(coreTestRow);
         return(data);
     }
 }
コード例 #14
0
        public TestorData[] GetAllTestData()
        {
            List <TestorData> retValue = new List <TestorData>();

            foreach (var part in _manager.GetParts(ContentType.Test))
            {
                using (Stream stream = part.GetStream())
                {
                    TestorData dataSet = new TestorData();
                    dataSet.ReadXml(stream);
                    stream.Close();
                    retValue.Add(dataSet);
                }
            }
            return(retValue.ToArray());
        }
コード例 #15
0
        private void TestIsDone(FileInfo file, HtmlStore[] htmlStore)
        {
            string testName = String.Empty;
            EndConvertingDelegate endConvertingDelegate = new EndConvertingDelegate(EndConverting);

            if (htmlStore == null)
            {
                SystemMessage.ShowErrorMessage("Ошибка конвертации тестов.");
                _cancel = true;
                this.Invoke(endConvertingDelegate, new object[] { });
                return;
            }
            if (_isUpdate)
            {
                BeginUpdateDelegate updateDelegate = new BeginUpdateDelegate(UpdateTest);
                this.Invoke(updateDelegate, new object[] { file.FullName, htmlStore });
                return;
            }
            TestorData testorData = HtmlStore.GetDataSet(htmlStore, file, out testName);
            TestHelper testHelper = new TestHelper(ProjectState.DataPackageManager);

            testHelper.ConvTime     = file.LastWriteTime;
            testHelper.TestId       = testorData.CoreTests[0].TestId;
            testHelper.FullFileName = file.FullName;
            testHelper.TestorData   = testorData;
            testHelper.TestName     = testName;
            testHelper.QuestCount   = testorData.CoreQuestions.Count();
            foreach (var test in testorData.CoreTests)
            {
                testHelper.TestKey = test.TestKey.ToString();
            }
            _tests.Add(testHelper);
            RefreshListDelegate refreshListDelegate = new RefreshListDelegate(RefreshList);

            this.Invoke(refreshListDelegate, new object[] { testHelper.TestName });
            lock (this)
            {
                _testCount--;
                if (_testCount == 0 || _cancel)
                {
                    this.Invoke(endConvertingDelegate, new object[] { });
                    return;
                }
                ConvertNext();
            }
        }
コード例 #16
0
 public SendTestsForm()
 {
     InitializeComponent();
     _testorData = ProjectState.FullTestorDataSet;
     treeView.InitTreeView(TestingServerItemType.TestTree, cmsContext, false);
     treeView.EnableDragDrop = true;
     tvGroups.InitTreeView(TestingServerItemType.GroupTree, null, false);
     treeView.ItemSelected += new EventHandler <TestorItemSelectedEventArgs>(_serviceProvider_ItemSelected);
     foreach (var testHelper in ProjectState.TestHelpers)
     {
         ListViewItem lvi = new ListViewItem(new string[] { testHelper.TestName }, 0);
         lvi.Group = clbTests.Groups[testHelper.IsMasterTest ? 1 : 0];
         lvi.Tag   = testHelper;
         clbTests.Items.Add(lvi);
     }
     SystemStateManager.StateChanged += new EventHandler <EventArgs>(SystemStateManager_StateChanged);
 }
コード例 #17
0
 public void SetTestSettings(TestorData testorData)
 {
     SystemStateManager.OnStateChanged(true);
     byte[] data = DataCompressor.CompressData(testorData);
     SynchronizationContext context = SynchronizationContext.Current;
     _currentThread = new Thread(new ThreadStart(() =>
     {
         StaticServerProvider.TestEdit.SetTestSettings(data);
         if ((this.TopLevelControl as Form).IsHandleCreated)
         {
             context.Send(d =>
                 {
                     SystemStateManager.OnStateChanged(false);
                 }, null);
         }
     }));
     _currentThread.Start();
 }
コード例 #18
0
        public void SetTestSettings(byte[] testSettings)
        {
            Debug.Assert(testSettings != null);

            Provider.TestRoles(TestorUserRole.Administrator, TestorUserRole.Teacher, TestorUserRole.Laboratorian);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                TestorData data = DataCompressor.DecompressData <TestorData>(testSettings);
                TestorData.CoreTestsRow test = data.CoreTests[0];

                Provider.TestCoreTestsAccess(test.TestId);

                CoreTest coreTest = dataContext.CoreTests.Where(c => c.TestId == test.TestId).FirstOrDefault();
                CreateCoreTest(test, coreTest);
                dataContext.SubmitChanges();
            }
        }
コード例 #19
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;
     }
 }
コード例 #20
0
 private void buttonOK_Click(object sender, EventArgs e)
 {
     foreach (var helper in checkedListBoxTests.CheckedItems)
     {
         TestHelper testHelper = (TestHelper)helper;
         TestorData td         = testHelper.TestorData;
         if (td == null)
         {
             continue;
         }
         testHelper.TestRequirements = new List <string>();
         ProjectState.TestHelpers.Add(testHelper);
     }
     if (checkedListBoxTests.CheckedItems.Count > 0)
     {
         ProjectState.HasChanges = true;
         ProjectState.OnTestHelpersChanged();
     }
     this.DialogResult = DialogResult.OK;
 }
コード例 #21
0
        public TestorTreeItem CreateFolder(int parentId, string folderName)
        {
            Debug.Assert(parentId >= 0);
            Debug.Assert(!String.IsNullOrEmpty(folderName));

            Provider.TestRoles(TestorUserRole.Administrator, TestorUserRole.Teacher, TestorUserRole.Laboratorian);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                TestorData td = new TestorData();
                TestorData.CoreTestsRow testRow = HtmlStore.CreateCoreTest(td, folderName);
                CoreTest coreTest = new CoreTest();
                CreateCoreTest(testRow, coreTest);
                dataContext.CoreTests.InsertOnSubmit(coreTest);
                dataContext.SubmitChanges();
                int            result   = dataContext.AddTestTreeItem(GetId(parentId), (int)TestorItemType.Folder, coreTest.TestId, Provider.CurrentUser.UserId);
                TestorTreeItem retValue = new TestorTreeItem(
                    result, coreTest.TestId, folderName, TestorItemType.Folder, new TestorTreeItem[] { });
                retValue.ItemOwner = Provider.CurrentUser.UserId;
                return(retValue);
            }
        }
コード例 #22
0
ファイル: ManageTestsForm.cs プロジェクト: clgray/Locator
        void _serviceProvider_ItemSelected(object sender, TestorItemSelectedEventArgs e)
        {
            ProcessControlsEnableProp();
            if (_adapter != null)
            {
                if (_adapter.HasChanges)
                {
                    _preNode.Text = _adapter.TestName;
                    treeView.SetTestSettings(_adapter.TestorData);
                }
                tvGroups.SetTestGroups((_preNode.Tag as TestorTagItem).TreeItem.TestId.Value);
            }
            TestorTreeItem item = e.Item;

            if (StaticServerProvider.CurrentUser.UserRole != TestorUserRole.Administrator && StaticServerProvider.CurrentUser.UserId != item.ItemOwner)
            {
                testSettings.Enabled = false;
                tvGroups.Enabled     = false;
                _adapter             = null;
                return;
            }
            bool isTest = item.ItemType == TestorItemType.Test || item.ItemType == TestorItemType.MasterTest;

            testSettings.Enabled = isTest;
            tvGroups.Enabled     = testSettings.Enabled;
            if (isTest)
            {
                int testId = item.TestId ?? 0;
                tvGroups.ProcessTestGroups(testId);
                TestorData settings = treeView.GetTestSettings(testId);
                _adapter = new TestSettingsAdapter(settings);
                testSettings.SetDataSet(_adapter);
                _preNode = e.TreeEventArgs.Node;
            }
            else if (item.ItemType == TestorItemType.Folder && item.ItemId != 0)
            {
                tsbIsActive.Checked = item.IsActive;
            }
        }
コード例 #23
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
 public static TestorData.CoreTestsRow CreateCoreTest(TestorData data, string testName)
 {
     TestorData.CoreTestsRow testRow = data.CoreTests.NewCoreTestsRow();
     testRow.TestKey               = Guid.NewGuid();
     testRow.TestName              = testName;
     testRow.VariantsMode          = true;
     testRow.IsActive              = true;
     testRow.IsMasterTest          = false;
     testRow.ShowRightAnswersCount = true;
     testRow.ShowDetailsTestResult = false;
     testRow.ShowTestResult        = true;
     testRow.AllowAdmitQuestions   = true;
     testRow.Description           = String.Empty;
     testRow.QuestionsNumber       = 0;
     testRow.PassagesNumber        = 0;
     testRow.PassingScore          = 0;
     testRow.TimeLimit             = 0;
     testRow.BeginTime             = DateTime.MinValue;
     testRow.EndTime               = DateTime.MinValue;
     testRow.AdaptiveMode          = (short)TestorAdaptiveMode.None;
     testRow.IsDeleted             = false;
     return(testRow);
 }
コード例 #24
0
        public TestorTreeItem[] SendTests(byte[] testorData, int folderId, int[] groupIds)
        {
            Debug.Assert(testorData != null);
            Debug.Assert(folderId >= 0);

            Provider.TestRoles(TestorUserRole.Administrator, TestorUserRole.Teacher, TestorUserRole.Laboratorian);

            using (DataClassesTestorCoreDataContext dataContext = new DataClassesTestorCoreDataContext(TestorSecurityProvider.ConnectionString))
            {
                TestorData data = DataCompressor.DecompressData <TestorData>(testorData);

                //data.WriteXml("C:/locator.xml", System.Data.XmlWriteMode.IgnoreSchema);

                Dictionary <int, CoreTest> xTests = new Dictionary <int, CoreTest>();
                foreach (TestorData.CoreTestsRow coreTest in data.CoreTests)
                {
                    CoreTest test = new CoreTest();
                    test.TestKey      = coreTest.TestKey;
                    test.IsMasterTest = coreTest.IsMasterTest;
                    CreateCoreTest(coreTest, test);
                    xTests.Add(coreTest.TestId, test);
                    dataContext.CoreTests.InsertOnSubmit(test);
                    foreach (int groupId in groupIds)
                    {
                        TestGroup group = new TestGroup();
                        group.CoreTest = test;
                        group.GroupId  = groupId;
                        dataContext.TestGroups.InsertOnSubmit(group);
                    }
                    foreach (var coreQuest in coreTest.GetCoreQuestionsRows())
                    {
                        CoreQuestion quest = new CoreQuestion();
                        quest.CoreTest     = test;
                        quest.QuestionType = coreQuest.QuestionType;
                        quest.Question     = coreQuest.Question;
                        quest.QuestionMark = coreQuest.QuestionMark;
                        try
                        {
                            if (!Convert.IsDBNull(coreQuest.QuestionMetadata))
                            {
                                quest.QuestionMetadata = coreQuest.QuestionMetadata;
                            }
                        }
                        catch
                        {
                            quest.QuestionMetadata = null;
                        }
                        dataContext.CoreQuestions.InsertOnSubmit(quest);
                        foreach (var coreAnswer in coreQuest.GetCoreAnswersRows())
                        {
                            CoreAnswer answer = new CoreAnswer();
                            answer.CoreQuestion = quest;
                            answer.Answer       = coreAnswer.Answer;
                            answer.IsTrue       = coreAnswer.IsTrue;
                            try
                            {
                                if (!Convert.IsDBNull(coreAnswer.AnswerMetadata))
                                {
                                    answer.AnswerMetadata = coreAnswer.AnswerMetadata;
                                }
                            }
                            catch
                            {
                                answer.AnswerMetadata = null;
                            }
                            dataContext.CoreAnswers.InsertOnSubmit(answer);
                        }
                        foreach (var coreBlob in coreQuest.GetCoreBLOBsRows())
                        {
                            CoreBLOB blob = new CoreBLOB();
                            blob.CoreQuestion = quest;
                            blob.BLOBId       = coreBlob.BLOBId;
                            blob.BLOBContent  = coreBlob.BLOBContent;
                            dataContext.CoreBLOBs.InsertOnSubmit(blob);
                        }
                    }
                }
                foreach (var masterTest in data.CoreTests.Where(c => c.IsMasterTest == true))
                {
                    var parts = data.CoreMasterParts.Where(c => c.MasterTestId == masterTest.TestId);
                    var test  = xTests.Where(c => c.Value.TestKey == masterTest.TestKey).FirstOrDefault();
                    foreach (var part in parts)
                    {
                        CoreMasterPart masterPart = new CoreMasterPart();
                        masterPart.CoreTest1 = test.Value;
                        masterPart.CoreTest  = xTests.Where(
                            c => c.Key == part.PartTestId).FirstOrDefault().Value;
                        masterPart.QuestionsNumber = part.QuestionsNumber;
                        dataContext.CoreMasterParts.InsertOnSubmit(masterPart);
                    }
                }
                foreach (var coreReq in data.CoreRequirements)
                {
                    CoreRequirement req     = new CoreRequirement();
                    Guid            testKey = data.CoreTests.Where(c => c.TestId == coreReq.TestId).FirstOrDefault().TestKey;
                    Guid            reqKey  = data.CoreTests.Where(c => c.TestId == coreReq.Requirement).FirstOrDefault().TestKey;
                    req.CoreTest  = xTests.Where(c => c.Value.TestKey == testKey).FirstOrDefault().Value;
                    req.CoreTest1 = xTests.Where(c => c.Value.TestKey == reqKey).FirstOrDefault().Value;
                    dataContext.CoreRequirements.InsertOnSubmit(req);
                }
                try
                {
                    dataContext.SubmitChanges();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                List <TestorTreeItem> retValue = new List <TestorTreeItem>();
                foreach (var test in xTests)
                {
                    CoreTest       coreTest = test.Value;
                    TestorItemType type     = TestorItemType.Test;
                    if (coreTest.IsMasterTest)
                    {
                        type = TestorItemType.MasterTest;
                    }
                    int            result = dataContext.AddTestTreeItem(GetId(folderId), (byte)type, coreTest.TestId, Provider.CurrentUser.UserId);
                    TestorTreeItem item   = new TestorTreeItem(result, coreTest.TestId,
                                                               coreTest.TestName, type, null);
                    retValue.Add(item);
                }
                return(retValue.ToArray());
            }
        }
コード例 #25
0
        public void SaveTestorData(TestorData testorData, TestConfig config)
        {
            testorData.AcceptChanges();
            Dictionary <string, string> testKeys    = new Dictionary <string, string>();
            Dictionary <string, string> questCounts = new Dictionary <string, string>();

            foreach (TestorData.CoreTestsRow test in testorData.CoreTests)
            {
                testKeys.Add(test.TestKey.ToString(), test.TestName);
                questCounts.Add(test.TestKey.ToString(),
                                testorData.CoreQuestions.Where(c => c.TestId == test.TestId).Count().ToString());
            }
            PackagePart dataPart;
            PackagePart configPart;
            bool        createNew = true;
            Guid        fname     = Guid.NewGuid();
            Uri         partUri   = new Uri(
                String.Format("/tests/{0}.bin", fname.ToString()), UriKind.Relative);
            Uri configUri = new Uri(
                String.Format("/tests/{0}.conf", fname.ToString()), UriKind.Relative);
            List <Uri> parts = new List <Uri>();

            foreach (var rel in _manager.CurrentPackage.GetRelationships())
            {
                if (testKeys.Keys.Contains(rel.RelationshipType) &&
                    !parts.Contains(rel.TargetUri))
                {
                    parts.Add(rel.TargetUri);
                }
            }
            if (parts.Count == 1)
            {
                createNew = false;
                configUri = _manager.GetConfigUri(parts[0]);
                partUri   = parts[0];
            }
            else if (parts.Count > 1)
            {
                throw new Exception("Невозможно сохранить тесты в разных parts.");
            }
            if (createNew)
            {
                dataPart = _manager.CurrentPackage.CreatePart(partUri,
                                                              _manager.CnitType + ContentType.Test.ToString(), _testCompression);
                configPart = _manager.CurrentPackage.CreatePart(configUri,
                                                                _manager.CnitType + ContentType.TestConfig.ToString(), _testCompression);
                foreach (var id in testKeys)
                {
                    config.Uri           = partUri;
                    config.TestName      = id.Value;
                    config.QuestionCount = int.Parse(questCounts[id.Key]);
                    _manager.CurrentPackage.CreateRelationship(partUri, TargetMode.Internal, id.Key);
                }
            }
            else
            {
                dataPart   = _manager.CurrentPackage.GetPart(partUri);
                configPart = _manager.CurrentPackage.GetPart(configUri);
                Dictionary <string, TestConfig> testObjects = GetTestObjects(partUri);
                foreach (var key in testKeys)
                {
                    if (!testObjects.ContainsKey(key.Key))
                    {
                        _manager.CurrentPackage.CreateRelationship(partUri, TargetMode.Internal, key.Key);
                    }
                    config.Uri           = partUri;
                    config.TestName      = key.Value;
                    config.QuestionCount = int.Parse(questCounts[key.Key]);
                }
            }
            Uri versionUri = new Uri("/version.dat", UriKind.Relative);

            if (!_manager.CurrentPackage.PartExists(versionUri))
            {
                _manager.CurrentPackage.CreatePart(versionUri, _manager.CnitType + ContentType.VersionData.ToString());
                PackagePart versionPart = _manager.CurrentPackage.GetPart(versionUri);
                using (Stream versionStream = versionPart.GetStream())
                {
                    StreamWriter sw = new StreamWriter(versionStream);
                    sw.WriteLine("FileFormatVersion:{0}", _fileFormatVersion);
                    sw.Close();
                    versionStream.Close();
                }
            }
            BinaryFormatter bin = new BinaryFormatter();

            using (Stream stream = dataPart.GetStream())
            {
                bin.Serialize(stream, testorData);
                stream.Close();
            }
            using (Stream stream = configPart.GetStream())
            {
                bin.Serialize(stream, config);
                stream.Close();
            }
        }
コード例 #26
0
ファイル: HtmlStore.cs プロジェクト: clgray/Locator
 public static TestorData.CoreTestsRow AddToDataset(TestorData dataSet, HtmlStore[] store)
 {
     TestorData.CoreTestsRow retValue = CreateCoreTest(dataSet, String.Empty);
     AddToDataset(dataSet, retValue, store);
     return(retValue);
 }
コード例 #27
0
ファイル: DataCreator.cs プロジェクト: clgray/Locator
        public static TestorData CreateFullTestorDataSet(List <TestHelper> helpers)
        {
            TestorData retValue = new TestorData();
            int        testId = 1, questId = 1, ansId = 1;

            foreach (var helper in helpers)
            {
                TestorData td  = helper.TestorData;
                object[]   arr = td.CoreTests.Rows[0].ItemArray;
                arr[0] = testId;
                retValue.CoreTests.Rows.Add(arr);
                foreach (TestorData.CoreQuestionsRow row in td.CoreQuestions)
                {
                    object[] questArr = row.ItemArray;
                    questArr[0] = questId;
                    questArr[1] = testId;
                    retValue.CoreQuestions.Rows.Add(questArr);
                    foreach (var answer in td.CoreAnswers.Where(c => c.CoreQuestionsRow == row))
                    {
                        object[] ansArr = answer.ItemArray;
                        ansArr[0] = ansId;
                        ansArr[1] = questId;
                        retValue.CoreAnswers.Rows.Add(ansArr);
                        ansId++;
                    }
                    foreach (var blob in td.CoreBLOBs.Where(c => c.CoreQuestionsRow == row))
                    {
                        object[] blobArr = blob.ItemArray;
                        blobArr[1] = questId;
                        retValue.CoreBLOBs.Rows.Add(blobArr);
                    }
                    questId++;
                }
                testId++;
            }
            foreach (var helper in helpers)
            {
                var test = retValue.CoreTests.Where(c => c.TestKey == new Guid(helper.TestKey)).First();
                foreach (var req in helper.TestRequirements)
                {
                    TestorData.CoreRequirementsRow reqRow = retValue.CoreRequirements.NewCoreRequirementsRow();
                    reqRow.TestId      = test.TestId;
                    reqRow.Requirement = retValue.CoreTests.Where(
                        c => c.TestKey == new Guid(req)).First().TestId;
                    retValue.CoreRequirements.AddCoreRequirementsRow(reqRow);
                }
                if (helper.IsMasterTest)
                {
                    foreach (var subTest in helper.SubTests)
                    {
                        try
                        {
                            TestorData.CoreMasterPartsRow subTestRow = retValue.CoreMasterParts.NewCoreMasterPartsRow();
                            subTestRow.MasterTestId = test.TestId;
                            subTestRow.PartTestId   = retValue.CoreTests.Where(
                                c => c.TestKey == new Guid(subTest.Key)).First().TestId;
                            subTestRow.QuestionsNumber = subTest.Value;
                            retValue.CoreMasterParts.AddCoreMasterPartsRow(subTestRow);
                        }
                        catch
                        {
                            continue;
                        }
                    }
                }
            }
            return(retValue);
        }
コード例 #28
0
ファイル: TestStatistics.aspx.cs プロジェクト: clgray/Locator
        public void GetTestStatistics()
        {
            TestorData td = DataCompressor.DecompressData <TestorData>(
                LocalUser.TestEdit.GetTestSettings(_testId));
            var test = td.CoreTests[0];

            lblTest.Text            = test.TestName;
            lblQuestionsNumber.Text = test.QuestionsNumber.ToString();
            lblPassingScore.Text    = test.PassingScore.ToString();

            var tStat = LocalUser.TestClient.GetTestStatistics(_testId, _groupId);

            if (tStat.AverageScore.HasValue)
            {
                lblAverageScore.Text = tStat.AverageScore.Value.ToString("0.00");
            }
            else
            {
                lblAverageScore.Text = "-";
            }
            lblPassedPercent.Text = tStat.PassedPercent.ToString("0.00");

            if (tStat.TestStatistics.Length > 20)
            {
                List <TestStatistics> stat1 = new List <TestStatistics>();
                List <TestStatistics> stat2 = new List <TestStatistics>();

                int x = tStat.TestStatistics.Length / 2;

                if (tStat.TestStatistics.Length % 2 > 0)
                {
                    x++;
                }

                for (int i = 0; i < tStat.TestStatistics.Count(); i++)
                {
                    if (i < x && x > 5)
                    {
                        stat1.Add(tStat.TestStatistics[i]);
                    }
                    else
                    {
                        stat2.Add(tStat.TestStatistics[i]);
                    }
                }

                rpScore.DataSource      = stat1;
                rpScoreCount.DataSource = stat1;
                rpScore.DataBind();
                rpScoreCount.DataBind();

                rpScore1.DataSource      = stat2;
                rpScoreCount1.DataSource = stat2;
                rpScore1.DataBind();
                rpScoreCount1.DataBind();

                phScores.Visible = true;
            }
            else
            {
                rpScore.DataSource      = tStat.TestStatistics;
                rpScoreCount.DataSource = tStat.TestStatistics;
                rpScore.DataBind();
                rpScoreCount.DataBind();

                phScores.Visible = false;
            }

            testChart.DataSource = tStat.TestStatistics;
            testChart.DataBind();
        }
コード例 #29
0
ファイル: Default.aspx.cs プロジェクト: clgray/Locator
        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();
                }
            }
        }
コード例 #30
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);
        }