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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }