public void StorePreferences(ISharedPreferences spr) { var prefsEditor = spr.Edit(); prefsEditor.PutInt("TableOf", TableOf); prefsEditor.PutString("strRandomQuestions", RandomQuestions.ToString()); prefsEditor.PutInt("UpperLimit", UpperLimit); prefsEditor.PutInt("CounterMin", CounterMin); prefsEditor.PutInt("CounterMax", CounterMax); prefsEditor.Commit(); }
/* * public bool Working * { * * set * { * if (!value) * { * // Exam.CurrentChanged += Exam_CurrentChanged; * ExamsList.CurrentChanged += currentChanged; * // Student.CurrentChanged += Exam_CurrentChanged; * StudentsList.CurrentChanged += currentChanged; * Questions.CurrentChanged += currentChanged; * // Answers.CurrentChanged += Exam_CurrentChanged; * // Preferences.CurrentChanged += Exam_CurrentChanged; * LogPref.CurrentChanged += currentChanged; * // Order.CurrentChanged += Exam_CurrentChanged; * // Class.CurrentChanged += Exam_CurrentChanged; * // AYear.CurrentChanged += Exam_CurrentChanged; * * Topics.CurrentChanged += currentChanged; * } * else * { * // Exam.CurrentChanged += Exam_CurrentChanged; * ExamsList.CurrentChanged -= currentChanged; * // Student.CurrentChanged += Exam_CurrentChanged; * StudentsList.CurrentChanged -= currentChanged; * Questions.CurrentChanged -= currentChanged; * // Answers.CurrentChanged += Exam_CurrentChanged; * // Preferences.CurrentChanged += Exam_CurrentChanged; * LogPref.CurrentChanged -= currentChanged; * // Order.CurrentChanged += Exam_CurrentChanged; * // Class.CurrentChanged += Exam_CurrentChanged; * // AYear.CurrentChanged += Exam_CurrentChanged; * * Topics.CurrentChanged -= currentChanged; * } * } * } */ private void currentChanged(object sender, EventArgs e) { if (Working) { return; } try { // DataGridView dgv = sender as DataGridView; BindingSource bs = sender as BindingSource; if (bs.Current == null) { return; } DataRowView view = (bs.Current as DataRowView); DataRow row = view.Row; if (row == null) { return; } // byte[] auxiliar = null; if (sender.Equals(this.Topics)) { DB.TopicsRow r = row as DB.TopicsRow; DB.QuestionsDataTable dt = set.Questions; Questions.Filter = dt.TopicIDColumn.ColumnName + " = " + r.TopicID; } else if (sender.Equals(this.Questions)) { DB.QuestionsRow r = row as DB.QuestionsRow; string dt = set.Answers.QIDColumn.ColumnName; Answers.Filter = dt + " = " + r.QID; } else if (sender.Equals(this.RandomQuestions)) { DB.QuestionsRow r = row as DB.QuestionsRow; string dt = auxiliar.Answers.QIDColumn.ColumnName; RandomAnswers.Filter = dt + " = " + r.QID; } else if (sender.Equals(this.Exam)) { string dt = auxiliar.Questions.QIDColumn.ColumnName; DB.ExamsRow r = row as DB.ExamsRow; // string[] aux = r.AIDString.Split(','); RandomQuestions.Position = RandomQuestions.Find(dt, r.QID); Questions.Position = Questions.Find(dt, r.QID); } else if (sender.Equals(this.StudentsList)) { DB.StuListRow r = row as DB.StuListRow; DB.StudentDataTable dt = set.Student; Student.Filter = dt.EIDColumn.ColumnName + " = " + r.SLID; // DB.TAM.ExamsTableAdapter.FillByEID(dt, r.EID); } else if (sender.Equals(this.ExamsList)) { DB.ExamsListRow r = row as DB.ExamsListRow; // DB.ExamsDataTable dt = set.Exams; Exam.Filter = auxiliar.Exams.EIDColumn.ColumnName + " = " + r.EID; Working = true; auxiliar.PopulateExamQuestions(ref r); Working = false; Exam.MoveFirst(); } else if (sender.Equals(this.LogPref)) { DB.PreferencesRow r = row as DB.PreferencesRow; DB.ExamsListDataTable dt = set.ExamsList; ExamsList.Filter = dt.PIDColumn.ColumnName + " = " + r.PID; DB.TAM.ExamsListTableAdapter.FillByPID(dt, r.PID); /* * if (!r.IsELDataNull()) * { * // string pid = ExasmPath + r.PID.ToString() + ".xml"; * auxiliar = r.ELData; * Tables.ReadDTBytes(ExasmPath,ref auxiliar, ref dt); * } * else * { * DB.TAM.ExamsListTableAdapter.FillByPID(dt, r.PID); * // MakeTableBytes(ref r); * } */ } } catch (SystemException ex) { } }
public async Task <IActionResult> New(int?TestId) { var user = await userManager.GetUserAsync(User); // найдем и провалидируем этот тест var access = await dataContext.TitleUserCountAccess.Include(x => x.Title).ThenInclude(q => q.QuestionsId).Include(s => s.StartedTestLogCollection) .Where( x => x.User == user && x.State == true && x.DateStart is DateTime && x.Attempts > 0 && x.Title.CountTestQuestion <= x.Title.QuestionsId.Where(q => q.WorkStateQuestion == true).Count() && x.Title.CountTestQuestion != 0 && x.Title.QuestionsId.Count() > 0 && x.Title.WorkStateTitle == true).FirstOrDefaultAsync(x => x.Title.Id == TestId); // смотрим начали ли мы уже этот тест сегодня var continueTest = await dataContext.StartedTestLog.FirstOrDefaultAsync(st => st.UserId == user && st.State == true && st.DateStarted.Date == DateTime.Now.Date && st.TitleUserAccess.Title.Id == TestId); //доступ есть и тест уже начали сегодня if (continueTest != null && access != null) { return(RedirectToAction("Continue", "Home", new { StLg = continueTest.Id })); } // есть доступ и тест ещё не начат сегодня else if (access != null && continueTest == null) { // все вопросы по даной теме var idAll = dataContext.TestQuestions.Where(x => x.Title == access.Title && x.WorkStateQuestion == true).Select(x => x.Id); // выбираем случайны-уникальный список id-вопросов из всех var IdQuestRandom = RandomQuestions.ReturnRandomUnique(access.Title.CountTestQuestion, idAll.ToList()); // полученный список вопросов случайный-уникальный и захватим ответы var Questions = dataContext.TestQuestions.Include(x => x.Title). Where(x => IdQuestRandom.Any(r => r == x.Id)).Where(x => x.Title == access.Title && x.WorkStateQuestion == true).Include(x => x.TestAnswers).OrderBy(x => x.Id); List <TestQuestions> QuestionsRandomUnique = new List <TestQuestions>(); foreach (var id in IdQuestRandom) { QuestionsRandomUnique.Add(await Questions.FirstOrDefaultAsync(x => x.Id == id)); } #region startedLog // создаем запись старт сдачи теста var startedLog = new StartedTestLog() { UserId = user, State = true, TitleUserAccess = access, IP = Request.HttpContext.Connection.RemoteIpAddress.ToString() //todo: ip-addres }; await dataContext.StartedTestLog.AddAsync(startedLog); #endregion #region factTitle // создаем запись с темой для старта сегодня var factTitle = new FactTitleLog() { StartedTestLog = startedLog, TitleText = access.Title.Title, }; await dataContext.FactTitleLog.AddAsync(factTitle); #endregion #region factQuest // запись с вопросами на текущий момент ICollection <FactQuestLog> factQuest = new List <FactQuestLog>(); foreach (var item in QuestionsRandomUnique) { if (item.WorkStateQuestion == true) { factQuest.Add(new FactQuestLog() { FactTitleLog = factTitle, QuestText = item.Questions }); } } await dataContext.FactQuestLog.AddRangeAsync(factQuest); #endregion #region factAnswer // запись с ответами на текущий момент ICollection <FactAnswersLog> factAnswer = new List <FactAnswersLog>(); foreach (var answers in QuestionsRandomUnique.Select(a => a.TestAnswers)) { foreach (var answ in answers) { if (answ.WorkStateAnswers == true) { factAnswer.Add(new FactAnswersLog() { AnswersText = answ.Title, FactQuestLog = factQuest.FirstOrDefault(x => x.QuestText == answ.TestQuestions.Questions), State = answ.State }); } } } await dataContext.FactAnswersLog.AddRangeAsync(factAnswer); #endregion // уменьшаем попытки if (access.Attempts > 0) { access.Attempts = access.Attempts - 1; dataContext.TitleUserCountAccess.Update(access); } await dataContext.SaveChangesAsync(); return(RedirectToAction("Continue", "Home", new { StLg = startedLog.Id })); } return(View("Index")); }