// GET: Quiz
        public ActionResult Quiz()
        {
            QuizFactory       qf       = new QuizFactory();
            List <QuizEntity> QuizList = qf.GetQuiz().ToList();

            return(View(QuizList));
        }
        public ActionResult DeleteQuiz(long id)
        {
            try
            {
                QuizFactory DeleteQuiz = new QuizFactory();
                QuizEntity  Quiz       = new QuizEntity();
                Quiz = DeleteQuiz.GetQuizById(id);

                DataLayer.tblQuiz NewQuiz = new DataLayer.tblQuiz();
                NewQuiz.QuizId = id;

                NewQuiz.QuizName    = Quiz.QuizName;
                NewQuiz.CreatedDate = Quiz.CreatedDate;
                NewQuiz.CreatedBy   = Quiz.CreatedBy;
                NewQuiz.UpdatedDate = DateTime.Now;
                NewQuiz.UpdatedBy   = null;
                NewQuiz.IsActive    = false; // IsActive will be false in delete record

                DeleteQuiz.SaveQuiz(NewQuiz);

                return(RedirectToAction("Quiz"));
            }
            catch
            {
                return(View());
            }
        }
Пример #3
0
        public void CreateQuiz_Test(KanaType type)
        {
            // Arrange
            var kanaRepository = Substitute.For <IKanaRepository>();

            kanaRepository.GetAllByType(type).Returns(_hiraganas);
            switch (type)
            {
            case KanaType.Hiragana:
                kanaRepository.CountByType(Arg.Any <KanaType>()).Returns((byte)_hiraganas.Count());
                break;

            case KanaType.Katakana:
                kanaRepository.CountByType(Arg.Any <KanaType>()).Returns((byte)_katakana.Count());
                break;
            }

            // Act
            var quizFactory = new QuizFactory(kanaRepository);
            var result      = quizFactory.CreateQuiz(type);

            // Assert
            Assert.Equal(4, result.Answers.Count());
            Assert.Contains(result.GoodAnswer, result.Answers);
        }
Пример #4
0
        // GET: Question

        public void GetQuiz()
        {
            QuizFactory       UF       = new QuizFactory();
            List <QuizEntity> QuizList = UF.GetQuiz().ToList();

            ViewBag.Quizs = new SelectList(QuizList, "QuizId", "QuizName");
        }
        // GET: Quiz/Edit/5
        public ActionResult EditQuiz(int id)
        {
            QuizFactory EditQuiz = new QuizFactory();
            QuizEntity  quiz     = new QuizEntity();

            quiz = EditQuiz.GetQuizById(id);
            return(View(quiz));
        }
        public ActionResult DeleteQuiz(int id)
        {
            QuizFactory EditQuiz = new QuizFactory();
            QuizEntity  channel  = new QuizEntity();

            channel = EditQuiz.GetQuizById(id);
            return(View(channel));
        }
Пример #7
0
        public void CreateKatakanaQuiz_OutOfRange_Test(byte nbAnwsers)
        {
            // Arrange
            var kanaRepository = Substitute.For <IKanaRepository>();

            kanaRepository.GetAllByType(Arg.Any <KanaType>()).Returns(_katakana);
            kanaRepository.CountByType(Arg.Any <KanaType>()).Returns((byte)_katakana.Count());

            // Act
            var quizFactory = new QuizFactory(kanaRepository);

            // Assert
            Assert.Throws <KanaQuizException>(() => quizFactory.CreateKatakanaQuiz(nbAnwsers));
        }
Пример #8
0
        public void CreateHiraganaQuiz_Test(byte nbAnwsers)
        {
            // Arrange
            var kanaRepository = Substitute.For <IKanaRepository>();

            kanaRepository.GetAllByType(Arg.Any <KanaType>()).Returns(_hiraganas);
            kanaRepository.CountByType(Arg.Any <KanaType>()).Returns((byte)_hiraganas.Count());

            // Act
            var quizFactory = new QuizFactory(kanaRepository);
            var result      = quizFactory.CreateHiraganaQuiz(nbAnwsers);

            // Assert
            Assert.Equal(nbAnwsers, result.Answers.Count());
            Assert.Equal(KanaType.Hiragana, result.Type);
            Assert.Contains(result.GoodAnswer, result.Answers);
        }
        public ActionResult EditQuiz(int id, QuizEntity Quiz)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    QuizFactory       EditQuiz = new QuizFactory();
                    DataLayer.tblQuiz NewQuiz  = new DataLayer.tblQuiz();

                    ValidationFactory VF      = new ValidationFactory();
                    string            Message = VF.QuizValidity(Quiz.QuizName, id);
                    if (Message != "Success")
                    {
                        ModelState.AddModelError("QuizName", Message);
                        return(View(Quiz));
                    }
                    else
                    {
                        NewQuiz.QuizId      = id;
                        NewQuiz.QuizName    = Quiz.QuizName;
                        NewQuiz.CreatedDate = Quiz.CreatedDate;
                        NewQuiz.CreatedBy   = null;
                        NewQuiz.UpdatedDate = DateTime.Now;
                        NewQuiz.UpdatedBy   = null;
                        NewQuiz.IsActive    = Quiz.IsActive;
                        EditQuiz.SaveQuiz(NewQuiz);
                        return(RedirectToAction("Quiz"));
                    }
                }
                else
                {
                    return(View(Quiz));
                }
            }
            catch
            {
                return(View());
            }
        }
        public ActionResult GetQuiz(long QuizId)
        {
            Session["QuizId"] = QuizId;
            QuizFactory EditQuiz = new QuizFactory();
            QuizEntity  quiz     = new QuizEntity();

            quiz             = EditQuiz.GetQuizById(QuizId);
            ViewBag.QuizName = quiz.QuizName;

            UserQuizEntity        userQuiz           = new UserQuizEntity();
            PlayQuizFactory       qf                 = new PlayQuizFactory();
            List <QuestionEntity> QuestionListByQuiz = qf.GetQuestionsByQuizId(QuizId).ToList();

            ViewBag.QuestionList    = QuestionListByQuiz;
            userQuiz.QuestionEntity = QuestionListByQuiz;

            //  ViewBag.QuizListByQuiz = QuizListByQuiz;
            List <QuestionOptionMappingEntity> Options = qf.GetOption();

            ViewBag.OptionList = Options;
            userQuiz.QuestionOptionMappingEntity = Options;
            // ViewBag.OptionList = Options;
            return(View(userQuiz));
        }
Пример #11
0
        private async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result)
        {
            var question = new QuizFactory().Question;

            PromptDialog.Choice(context, this.CheckAnswerAfterQuestion, question.Answers, question.Text, "É o que temos pra hoje meu fio. Escolhe ae..", 3);
        }
Пример #12
0
        public async Task <JsonResult> Submit(
            [Required][FromRoute] FormType form,
            [Required][FromForm] string formJsonString,
            [FromForm] string code)
        {
            if (!form.Enable)
            {
                throw new UnauthorizedAccessException("該問卷已關閉");
            }
            if (Database.Records.Any(x => x.FormId.Equals(form.Id) && x.UserId == User.Id))
            {
                throw new InvalidOperationException("您已經作答過此問卷");
            }
            if (Database.Writeds.Any(x => x.FormId.Equals(form.Id) && x.UserId == User.Id))
            {
                throw new InvalidOperationException("您已經作答過此問卷");
            }

            ReCaptchaFactory.Vaild(code);

            if (form.UserType != UserTypes.Null)
            {
                if (User.Type != form.UserType)
                {
                    throw new UnauthorizedAccessException("該問卷您無法填寫");
                }
            }

            var questions = (from t in Database.Questions
                             //過濾出可回答問題
                             where t.FormId.Equals(form.Id) && t.ParentId == null
                             select t).ToArray().Where(x => QuizFactory.IsQuestion(x));

            var rawRecord = JObject.Parse(formJsonString);
            var keys      = rawRecord.Properties().Select(x => x.Name);

            /*
             *  {
             *      "QuestionID" : value,
             *      "1" : [Boolean],//是否勾選  如  我同意
             *      "2" : ["3","4",{"5":["6","7"]}] //多重布林值勾選
             *      "3" : ["8","9",{"10":"TEST VALUE"}] //多重布林值勾選+文字輸入
             *      "4" : {"11":"TEST VALUE2"}//單選一+文字輸入
             *      "5" : {"12":["13","14"]}
             *  }
             */

            #region 檢查該有的題目都有資料
            foreach (var question in questions)
            {
                if (keys.Contains(question.Id.ToString()))
                {
                    continue;
                }
                if (!question.Required)
                {
                    continue;                    //非強制回答內容
                }
                throw new InvalidOperationException("您有題目忘記作答,請再檢查一次");
            }
            #endregion

            DateTime now = DateTime.Now;

            List <RecordType> DeepRecord(IQuestion <IdType> q, JToken ans)
            {
                List <RecordType> result = new List <RecordType>();

                switch (q.Type)
                {
                    #region 樹狀題目
                case QuestionTypes.Checkbox:
                case QuestionTypes.CheckboxGroup:
                    if (q.Type == QuestionTypes.Checkbox)
                    {
                        result.Add(new RecordType()
                        {
                            QuestionId = q.Id
                        });
                    }

                    var ary = (JArray)ans;
                    foreach (var item in ary)
                    {
                        if (item.Type == JTokenType.String)      //普通選項
                        {
                            result.Add(new RecordType()
                            {
                                QuestionId = q.Children.First(x => x.Id.Equals(QuizFactory.ParseId <IdType>(item.Value <string>()))).Id,
                            });
                        }
                        else if (item.Type == JTokenType.Object)         //複合選項
                        {
                            var obj_Temp = item.Value <JObject>();
                            foreach (var qid in obj_Temp.Properties().Select(x => x.Name))
                            {
                                result.AddRange(DeepRecord(q.Children.First(x => x.Id.Equals(QuizFactory.ParseId <IdType>(qid))), obj_Temp[qid]));
                            }
                        }
                    }
                    break;

                case QuestionTypes.Radio:
                case QuestionTypes.RadioGroup:
                    if (q.Type == QuestionTypes.Radio)
                    {
                        result.Add(new RecordType()
                        {
                            QuestionId = q.Id
                        });
                    }

                    if (ans.Type == JTokenType.String)      //普通選項
                    {
                        result.Add(new RecordType()
                        {
                            QuestionId = q.Children.First(x => x.Id.Equals(QuizFactory.ParseId <IdType>(ans.Value <string>()))).Id
                        });
                    }
                    else if (ans.Type == JTokenType.Object)         //複合選項
                    {
                        var obj_Temp2 = ans.Value <JObject>();
                        foreach (var qid in obj_Temp2.Properties().Select(x => x.Name))
                        {
                            result.AddRange(DeepRecord(q.Children.First(x => x.Id.Equals(QuizFactory.ParseId <IdType>(qid))), obj_Temp2[qid]));
                        }
                    }
                    break;
                    #endregion

                    #region 單純資料
                case QuestionTypes.Dropdown:    //簡易多選一
                    result.Add(new RecordType()
                    {
                        QuestionId = q.Children.First(x => x.Id.Equals(QuizFactory.ParseId <IdType>(ans.Value <string>()))).Id,
                    });
                    break;

                case QuestionTypes.InputNumber:
                    result.Add(new RecordType()
                    {
                        QuestionId = q.Id,
                        Value      = ans.Value <string>()
                    });
                    break;

                case QuestionTypes.InputText:
                    result.Add(new RecordType()
                    {
                        QuestionId = q.Id,
                        Value      = ans.Value <string>()
                    });
                    break;

                case QuestionTypes.Level:
                    result.Add(new RecordType()
                    {
                        QuestionId = q.Id,
                        Value      = ans.Value <string>()
                    });
                    break;
                    #endregion
                }
                return(result);
            }

            List <RecordType> record = new List <RecordType>();
            foreach (var question in questions)
            {
                var userAns = rawRecord[question.Id.ToString()];
                record.AddRange(DeepRecord(question, userAns));
            }

            var AnonUserName = "******" + (Database.Writeds.Count(x => x.FormId.Equals(form.Id)) + 1);
            foreach (var item in record)
            {
                item.FormId = form.Id;
                item.Time   = now.ToJsTime();
                item.UserId = User.Id;

                if (form.Anonymous)
                {
                    item.UserId = AnonUserName;
                }
            }

            if (form.Anonymous)
            {
                Database.Writeds.Add(new WritedType()
                {
                    FormId = form.Id,
                    UserId = User.Id
                });
            }

            Database.Records.AddRange(record);
            await Database.SaveChangesAsync();

            return(new ApiResult());
        }
Пример #13
0
 public QuizController(QuizFactory quizFactory)
 {
     _quizFactory = quizFactory;
 }