Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
Archivo: BS.cs Proyecto: hnjm/Exam
        /*
         * 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)
            {
            }
        }
Ejemplo n.º 3
0
        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"));
        }