public IActionResult CreateExamSuite([FromBody] ExamSuiteDetail request) { //HACK: use SubjectId instead of ConsiderationStatus var _subject = repoQ.GetInActiveSubject(request.ConsiderationStatus); //var qid = string.Concat(qcode, "TH"); var qid = Guid.NewGuid().ToString(); var qsuite = new TheS.ExamBank.DataFormats.QuestionSuite() { _id = qid, Code = request.TitleCode, Title = request.TitleName, SubjectName = _subject.SubjectName, Description = "Description", SubjectId = request.ConsiderationStatus, SubjectCode = _subject.SubjectCode, Level = 1, LayoutCode = "LayoutCode", Questions = Enumerable.Empty <TheS.ExamBank.DataFormats.Question>(), }; repoQ.InsertQuestionSuite(qsuite); var examSuiteCount = repoQ.GetAllQuestionSuiteBySubjectId(_subject._id).Count(); repoQ.UpdateQuestionCount(_subject._id, _subject.QuestionCount, examSuiteCount); return(Ok(new { Message = $"Created!", ExamSuiteId = qid })); }
public void EditQuestion(string TitleCode, int?QuestionId, [FromBody] Question question) { //For Edit IsAllowrandom กับ เฉลย if (question == null || !QuestionId.HasValue) { return; } var _suite = repoQ.GetQuestionSuite(question.ExamSuiteId); var _question = _suite?.Questions?.Where(x => x.No == question.QuestionNumber)?.FirstOrDefault(); if (_question != null) { return; } _question.NoShuffleChoice = question?.IsAllowRandomChoice ?? false; _question.Choices = question.Choices?.Select(x => new TheS.ExamBank.DataFormats.SelectableChoice { Code = x.id, Content = x.Detail, IsCorrectAnswer = x.IsCorrect, }); //Convert QuestionSuiteVM To QuestionSuite var qsuite = new TheS.ExamBank.DataFormats.QuestionSuite() { _id = _suite?._id, Code = _suite?.Code, Title = _suite?.Title, SubjectName = _suite?.SubjectName, Description = _suite?.Description, SubjectId = _suite?.Description, SubjectCode = _suite?.SubjectCode, Level = _suite?.Level ?? 0, LayoutCode = _suite?.LayoutCode, Questions = _suite?.Questions, }; repoQ.Upsert(qsuite); }
public IActionResult DeleteQuestion(string examsuiteid, string questionid) { var qsuiteVm = repoQ.GetQuestionSuite(examsuiteid); var qsuite = new TheS.ExamBank.DataFormats.QuestionSuite() { _id = qsuiteVm?._id, Code = qsuiteVm?.Code, Title = qsuiteVm?.Title, SubjectName = qsuiteVm?.SubjectName, Description = qsuiteVm?.Description, SubjectId = qsuiteVm?.Description, SubjectCode = qsuiteVm?.SubjectCode, Level = qsuiteVm?.Level ?? 0, LayoutCode = qsuiteVm?.LayoutCode, Questions = qsuiteVm.Questions.Where(q => q._id != questionid).ToList(), }; repoQ.Upsert(qsuite); return(Ok(new { Message = $"Deleted!", QuestionId = questionid })); }
public IActionResult VerifyMarkdown(IEnumerable <IFormFile> files, string Language) { var mdFi = files.FirstOrDefault(f => System.IO.Path.GetExtension(ContentDispositionHeaderValue.Parse(f.ContentDisposition).FileName.Trim('"')) == ".md"); string md = string.Empty; if (mdFi != null) { using (var fi = new System.IO.StreamReader(mdFi.OpenReadStream())) { md = fi.ReadToEnd(); } } List <string> fileList = new List <string>(); var subjectId = string.Empty; foreach (var f in files) { using (var fi = f.OpenReadStream()) { if (ZipFile.IsZipFile(fi, true)) { fi.Seek(0, System.IO.SeekOrigin.Begin); var assets = TheS.ExamBank.Parsers.AssetFileUtil.ReadZipEntries(fi).ToArray(); var parser = new TheS.ExamBank.Parsers.MarkdownParser(); if (parser.CheckAssets(md, assets)) { fileList = assets.ToList(); assets = parser.GetAssetLinks(md).ToArray(); fi.Seek(0, System.IO.SeekOrigin.Begin); var assetFiles = TheS.ExamBank.Parsers.AssetFileUtil.GetAssets(fi, assets); try { var questions = parser.ParseQuestionsFromString(md); var header = parser.ParseHeaderFromString(md); subjectId = string.Concat(header.SubjectCode + "L" + header.Level, Language); var qcode = (header.Code ?? string.Empty).Trim(); var qid = string.Concat(qcode, Language); var qsuite = new TheS.ExamBank.DataFormats.QuestionSuite() { _id = qid, Code = qcode, Title = header.Title, SubjectName = header.SubjectName, Description = header.Description, SubjectId = subjectId, SubjectCode = header.SubjectCode, Level = header.Level, LayoutCode = header.LayoutCode, Questions = questions, }; var inActiveSubject = repoQ.GetInActiveSubject(subjectId); var suite = repoQ.GetQuestionSuite(qid); //no suite and no subject : create new suite and subject if (suite == null && inActiveSubject == null) { if (inActiveSubject == null) { var newSubject = new InActive.InactiveSubject { _id = subjectId, SubjectCode = qsuite.SubjectCode, SubjectName = qsuite.SubjectName, CreateDateTime = DateTime.Now, IsEReadiness = false, //Hack ContentLanguage = Language, SiteId = HomeController._centerdata.SiteId, QuestionCount = questions.Count(), ExamSuiteCount = 1, ExamSuiteAcceptCount = 0, ExamSuiteRejectCount = 0, ExamSuiteGroups = new List <InActive.ExamSuiteGroup>() { new InActive.ExamSuiteGroup { _id = "ก", ExamSuiteGroupName = "ก", // HACK IsUsed = true, PassScore = null, ExamDuration = null, ExamSuiteGroupMaps = new List <InActive.ExamSuiteGroupMap> { new InActive.ExamSuiteGroupMap { _id = Guid.NewGuid().ToString(), ExamSuiteId = qid, RandomCount = 0, } }, } }, }; repoQ.InsertInActiveSubject(newSubject); } } //has old suite and already has subject : upsert suite add groupmap to new suite //ใช้ group map เดิม else if (inActiveSubject != null && suite != null) { //suite upsert ปกติ subject ไม่เปลี่ยนอะไร } //new suite and already has subject : add groupmap to new suite //เพิ่ม group map ใหม่ else if (inActiveSubject != null && suite == null) { foreach (var item in inActiveSubject.ExamSuiteGroups) { item.ExamSuiteGroupMaps.Add(new InActive.ExamSuiteGroupMap { _id = repoExamForApprove.GetNewGuid("").ToString(), ExamSuiteId = qid, RandomCount = 0, }); } repoQ.UpsertInActiveSubject(inActiveSubject); } if (inActiveSubject != null) { //update SubjectName and ContentLanguage repoQ.UpdateSubjectNameAndContentLanguage(inActiveSubject._id, qsuite.SubjectName, Language); //UpdateQuestionCount UpdateExamSuiteCount var examSuites = repoQ.GetAllQuestionSuiteBySubjectId(subjectId); var questionCount = examSuites.Sum(es => es.Questions.Count()); repoQ.UpdateQuestionCount(subjectId, questionCount + questions.Count(), examSuites.Count() + 1); } repoQ.Upsert(qsuite); repoQ.UploadAssets(assetFiles, qid, this.iCloudStorage); } finally { TheS.ExamBank.Parsers.AssetFileUtil.CleanUpAssets(assetFiles, iFile); } } } } } ViewData["files"] = fileList; return(Redirect("~/#!/inactivesubjectview/" + subjectId)); }