private static XmlNode GetProgressTestSequantialNode(XmlDocument xml, string topicName, string topicId, string kStructure, IEnumerable <List <IExcelColumn <ExamExcelColumnType> > > topicGroup) { var sequentialNode = xml.CreateElement("sequential"); sequentialNode.SetAttribute("display_name", topicName); sequentialNode.SetAttribute("url_name", CourseConverterHelper.getGuid(topicId, CourseTypes.StudySession)); sequentialNode.SetAttribute("taxon_id", kStructure); string itemSetTitle = topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle2) != null?topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle2).Value : ""; string vignetteTitle = topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteTitle) != null?topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteTitle).Value : ""; string vignetteBody = topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteBody) != null?topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteBody).Value : ""; string topicTaxonId = topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.TopicTaxonId) != null?topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.TopicTaxonId).Value : ""; //if item set title empty leave old vertical display name, if not change it string displayName = (itemSetTitle == null) ? "Progress test - R" : itemSetTitle; var verticalNode = xml.CreateElement("vertical"); verticalNode.SetAttribute("display_name", displayName); verticalNode.SetAttribute("study_session_test_id", ""); verticalNode.SetAttribute("url_name", CourseConverterHelper.getGuid(topicId, CourseTypes.Reading)); verticalNode.SetAttribute("taxon_id", topicTaxonId); verticalNode.SetAttribute("vignette_title", vignetteTitle); verticalNode.SetAttribute("vignette_body", vignetteBody); sequentialNode.AppendChild(verticalNode); //skip vignette row. if there is any topicGroup = topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.Question).HaveValue() && topicGroup.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.Question) != null ? topicGroup : topicGroup.Skip(1); var problemBuilderNode = ProblemBuilderNodeGenerator.Generate(xml, topicGroup, new ProblemBuilderNodeSettings { DisplayName = "Progress test", UrlName = CourseConverterHelper.getGuid(topicId, CourseTypes.Question), ProblemBuilderNodeElement = "problem-builder-progress-test", PbMcqNodeElement = "pb-mcq-progress-test", PbChoiceBlockElement = "pb-choice-progress-test", PbTipBlockElement = "pb-tip-progress-test" }); verticalNode.AppendChild(problemBuilderNode); return(sequentialNode); }
private static XmlNode GetMockExamVerticalNode(XmlDocument xml, string seqContainerRef, IEnumerable <List <IExcelColumn <ExamExcelColumnType> > > mockRows) { string topicName = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.TopicName).Value; string topicTaxonId = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.TopicTaxonId).Value; string container2Title = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle2).Value != null? mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle2).Value : ""; //if item set title empty leave old vertical display name, if not change it topicName = (container2Title == "") ? topicName : container2Title; string vignetteTitle = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteTitle).Value != null? mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteTitle).Value : ""; string vignetteBody = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteBody).Value != null? mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteBody).Value : ""; //create vertical node var verticalNode = xml.CreateElement("vertical"); verticalNode.SetAttribute("display_name", topicName); verticalNode.SetAttribute("url_name", CourseConverterHelper.getGuid(String.Format("mock-vertical-{0}-{1}", seqContainerRef, topicName), CourseTypes.Mock)); verticalNode.SetAttribute("study_session_test_id", ""); verticalNode.SetAttribute("taxon_id", topicTaxonId); verticalNode.SetAttribute("vignette_title", vignetteTitle); verticalNode.SetAttribute("vignette_body", vignetteBody); //skip vignette row, if there is any var topicQuestions = mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.Question).HaveValue() && mockRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.Question).Value != null ? mockRows : mockRows.Skip(1); var problemBuilderNode = ProblemBuilderNodeGenerator.Generate(xml, topicQuestions, new ProblemBuilderNodeSettings { DisplayName = String.Format("Mock exam questions - {0} - {1}", seqContainerRef, topicName), UrlName = CourseConverterHelper.getGuid(String.Format("mock-progress-test-{0}-{1}", seqContainerRef, topicName), CourseTypes.Mock), ProblemBuilderNodeElement = "problem-builder-mock-exam", PbMcqNodeElement = "pb-mcq-mock-exam", PbChoiceBlockElement = "pb-choice-mock-exam", PbTipBlockElement = "pb-tip-mock-exam" }); verticalNode.AppendChild(problemBuilderNode); return(verticalNode); }
private void AppendStudySessionTestQuestions(XmlDocument xml, XmlElement sequentialNode, string studySessionId, Excel <ExamExcelColumn, ExamExcelColumnType> ssTestExcel) { var excelRows = ssTestExcel.Rows.Where(r => r.Any(c => c.Type == ExamExcelColumnType.SessionRef && c.Value == studySessionId)); if (excelRows.Any()) { string verticalTestId = excelRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.Structure).Value; verticalTestId = String.Join("|", verticalTestId.Split('|').Take(3)); var verticalNode = xml.CreateElement("vertical"); verticalNode.SetAttribute("display_name", "Study Session Test"); verticalNode.SetAttribute("cfa_type", "test"); verticalNode.SetAttribute("cfa_short_name", "SST"); verticalNode.SetAttribute("study_session_test_id", verticalTestId); verticalNode.SetAttribute("url_name", CourseConverterHelper.getGuid(verticalTestId, CourseTypes.Reading)); var containerReferences = excelRows.GroupBy(r => r.First(tn => tn.Type == ExamExcelColumnType.ContainerRef1).Value); foreach (var containerReference in containerReferences) { string containerReferenceValue = containerReference.Key; var ssRows = excelRows.Where(r => r.Any(c => c.Type == ExamExcelColumnType.ContainerRef1 && c.Value.Contains(containerReferenceValue))); if (ssRows.Any()) { char index = containerReferenceValue.Last(); var problemBuilderNode = ProblemBuilderNodeGenerator.Generate(xml, ssRows, new ProblemBuilderNodeSettings { DisplayName = "Study Session Test", UrlName = CourseConverterHelper.getGuid(verticalTestId + '_' + index, CourseTypes.Question), ProblemBuilderNodeElement = "problem-builder-block", PbMcqNodeElement = "pb-mcq-block", PbChoiceBlockElement = "pb-choice-block", PbTipBlockElement = "pb-tip-block" }); verticalNode.AppendChild(problemBuilderNode); } } sequentialNode.AppendChild(verticalNode); } }
private void AppendTopicWorkshop(XmlDocument xml, XmlElement chapterNode, string topicId, Excel <ExamExcelColumn, ExamExcelColumnType> TopicWorkshopExcel) { var topicWorkshopRows = TopicWorkshopExcel.Rows.Where(r => r.Any(c => c.Type == ExamExcelColumnType.TopicRef && c.Value == topicId)); if (topicWorkshopRows.Any()) { var workshopReferences = topicWorkshopRows.GroupBy(r => r.First(tn => tn.Type == ExamExcelColumnType.ContainerRef1).Value); foreach (var workshopReference in workshopReferences) { string workshopReferenceValue = workshopReference.Key; var workshopRows = topicWorkshopRows.Where(r => r.Any(c => c.Type == ExamExcelColumnType.ContainerRef1 && c.Value.Contains(workshopReferenceValue))); if (workshopRows.Any()) { string topicWorkshopTitle = workshopRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle1).Value; string topicWorkshopType = workshopRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerType1).Value; if (topicWorkshopType == "Topic Workshop") { topicWorkshopType = "topic_workshop"; } else if (topicWorkshopType == "Review Course Workshop") { topicWorkshopType = "course_workshop"; } var sequentialNode = xml.CreateElement("sequential"); sequentialNode.SetAttribute("display_name", topicWorkshopTitle); sequentialNode.SetAttribute("url_name", CourseConverterHelper.getGuid(workshopReferenceValue, CourseTypes.Workshop)); sequentialNode.SetAttribute("workshop_id", workshopReferenceValue); sequentialNode.SetAttribute("cfa_type", topicWorkshopType); chapterNode.AppendChild(sequentialNode); var itemSetReferences = workshopRows.GroupBy(r => r.First(tn => tn.Type == ExamExcelColumnType.ContainerRef2).Value); foreach (var itemSetReference in itemSetReferences) { string itemSetReferenceValue = itemSetReference.Key; char index = itemSetReferenceValue.Last(); var itemSetRows = workshopRows.Where(r => r.Any(c => c.Type == ExamExcelColumnType.ContainerRef2 && c.Value.Contains(itemSetReferenceValue))); if (itemSetRows.Any()) { string itemSetType = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerType2).Value; string itemSetTitle = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerTitle2).Value; string topicTaxonId = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.TopicTaxonId).Value; string itemSetStudySessions = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.SessionName).Value; string itemSetPdf = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerPdf2).Value; string itemSetAnswerVideo = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.AnswerVideo).Value; var verticalNode = xml.CreateElement("vertical"); verticalNode.SetAttribute("item_set_id", itemSetReferenceValue); verticalNode.SetAttribute("display_name", itemSetTitle); verticalNode.SetAttribute("taxon_id", topicTaxonId); verticalNode.SetAttribute("item_set_sessions", itemSetStudySessions); verticalNode.SetAttribute("item_set_pdf", itemSetPdf); verticalNode.SetAttribute("item_set_video", itemSetAnswerVideo); if (itemSetType == "Item Set") { string vignetteTitle = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteTitle).Value; string vignetteBody = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.VignetteBody).Value; verticalNode.SetAttribute("cfa_type", "item_set"); verticalNode.SetAttribute("url_name", CourseConverterHelper.getGuid(itemSetReferenceValue, CourseTypes.ItemSet)); verticalNode.SetAttribute("vignette_title", vignetteTitle); verticalNode.SetAttribute("vignette_body", vignetteBody); sequentialNode.AppendChild(verticalNode); //skip first row(vignette row) itemSetRows = itemSetRows.Skip(1); var problemBuilderNode = ProblemBuilderNodeGenerator.Generate(xml, itemSetRows, new ProblemBuilderNodeSettings { DisplayName = "Item Set " + index, UrlName = CourseConverterHelper.getGuid(itemSetReferenceValue, CourseTypes.Question), ProblemBuilderNodeElement = "problem-builder-block", PbMcqNodeElement = "pb-mcq-block", PbChoiceBlockElement = "pb-choice-block", PbTipBlockElement = "pb-tip-block" }); verticalNode.AppendChild(problemBuilderNode); } else if (itemSetType == "Essay") { string essayMaxPoints = itemSetRows.First().FirstOrDefault(c => c.Type == ExamExcelColumnType.ContainerMaxPoints2).Value; verticalNode.SetAttribute("cfa_type", "essay"); verticalNode.SetAttribute("url_name", CourseConverterHelper.getGuid(itemSetReferenceValue, CourseTypes.Essay)); verticalNode.SetAttribute("essay_max_points", essayMaxPoints); sequentialNode.AppendChild(verticalNode); } } } } } } }