public QuestionInExamViewModel GetQuestionInExamById(int questionId) { QuestionInExam question = unitOfWork.Repository <QuestionInExam>().GetById(questionId); QuestionInExamViewModel questionInExamViewModel = new QuestionInExamViewModel(); if (question != null) { questionInExamViewModel = new QuestionInExamViewModel() { Id = question.Id, PartId = question.PartId.HasValue ? (int)question.PartId : 0, QuestionReference = question.QuestionReference.HasValue ? (int)question.QuestionReference : 0, QuestionContent = question.QuestionContent, Priority = question.Priority.HasValue ? (int)question.Priority : 0, Frequency = question.Frequency.HasValue ? (int)question.Frequency : 0, QuestionCode = question.QuestionCode, LevelId = question.LevelId.HasValue ? (int)question.LevelId : 0, Image = question.Image, PartOfExam = new PartOfExamViewModel() { Id = question.PartOfExamination.Id, LearningOutcomeId = question.PartOfExamination.LearningOutcomeId.HasValue ? (int)question.PartOfExamination.LearningOutcomeId : 0, ExaminationId = question.PartOfExamination.ExaminationId.HasValue ? (int)question.PartOfExamination.ExaminationId : 0 } }; } return(questionInExamViewModel); }
public FileResult ExportBank(int[] loId, string extension, bool?getCategory = false) { CourseViewModel course = null; var result = new List <QuestionViewModel>(); if (loId != null) { foreach (var id in loId) { if (course == null) { course = learningOutcomeService.GetCourseByLearningOutcome(id); } var questionsByLo = questionService.GetQuestionList(null, null, id, null, null); if (questionsByLo != null && questionsByLo.Count > 0) { result.AddRange(questionsByLo); } } } string fileName = course.Code + "_" + DateTime.Now.ToString("yyyyMMdd"); List <QuestionInExamViewModel> questions = new List <QuestionInExamViewModel>(); for (int i = 0; i < result.Count; i++) { QuestionInExamViewModel question = new QuestionInExamViewModel { Id = result[i].Id, QuestionCode = result[i].Code, QuestionContent = result[i].QuestionContent, Image = result[i].Image, Options = result[i].Options, Category = new CategoryViewModel { Id = result[i].CategoryId, Name = result[i].Category }, LearningOutcomeName = result[i].LearningOutcomeName, Images = result[i].Images, Level = new LevelViewModel { Id = result[i].LevelId, Name = ((LevelEnum)result[i].LevelId).ToString() } }; questions.Add(question); } if (extension.ToLower().Equals("xml")) { byte[] byteArray = ExportToXMLFile(questions, getCategory); return(File(byteArray, System.Net.Mime.MediaTypeNames.Application.Octet, fileName + "_XML" + ".xml")); } else { byte[] byteArray = ExportToGIFTFile(questions, getCategory); return(File(byteArray, System.Net.Mime.MediaTypeNames.Application.Octet, fileName + "GIFT" + ".txt")); } }
private byte[] ExportToGIFTFile(List <QuestionInExamViewModel> questions, bool?getCategory = false) { byte[] result = null; using (MemoryStream stream = new MemoryStream()) { StreamWriter writer = new StreamWriter(stream); //CATEGORY string switchCategoryLine = ""; string categoryLine = ""; for (int i = 0; i < questions.Count; i++) { QuestionInExamViewModel question = questions[i]; //CATEGORY if ((i == 0 || (question.LevelId != questions[i - 1].LevelId || !question.Category.Name.Equals(questions[i - 1].Category))) && (getCategory.Value)) { switchCategoryLine = String.Format(COMMENT_SWITCH_CATEGORY_LINE, question.Category.Name, question.LearningOutcomeName, question.Level.Name); writer.WriteLine(switchCategoryLine); categoryLine = String.Format(CATEGORY_LINE, question.Category.Name, question.LearningOutcomeName, question.Level.Name); writer.WriteLine(categoryLine); writer.WriteLine(); writer.WriteLine(); } string questionComment = String.Format(QUESTION_COMMENT, question.Id, question.QuestionCode); writer.WriteLine(questionComment); string questionTitle = String.Format(QUESTION_TITLE, question.QuestionCode, StringUtilities.FormatStringExportGIFT(question.QuestionContent).Trim()) + "{"; writer.Write(questionTitle); writer.WriteLine(); foreach (var option in question.Options) { if (option.IsCorrect == true) { string optionString = String.Format(OPTION_TRUE, StringUtilities.FormatStringExportGIFT(option.OptionContent).Trim()); writer.Write(optionString); writer.WriteLine(); } else { string optionString = String.Format(OPTION_FALSE, StringUtilities.FormatStringExportGIFT(option.OptionContent).Trim()); writer.Write(optionString); writer.WriteLine(); } } writer.WriteLine("}"); writer.WriteLine(); } writer.Flush(); result = stream.ToArray(); writer.Close(); } return(result); }
private byte[] ExportToXMLFile(List <QuestionInExamViewModel> questions, bool?getCategory = false) { byte[] result = null; int count = 0; using (MemoryStream stream = new MemoryStream()) { XmlTextWriter xmlWriter = new XmlTextWriter(stream, System.Text.Encoding.UTF8); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("quiz"); //CATEGORY string switchCategory = ""; for (int i = 0; i < questions.Count; i++) { QuestionInExamViewModel question = questions[i]; #region category if ((i == 0 || (question.LevelId != questions[i - 1].LevelId || !question.Category.Name.Equals(questions[i - 1].Category))) && (getCategory.Value)) { xmlWriter.WriteComment(XML_COMMENT_CATEGORY); xmlWriter.WriteStartElement(XML_QUESTION_TAG); xmlWriter.WriteAttributeString(XML_TYPE_ATTR_NAME, XML_CATEGORY_ATTR_VALUE); xmlWriter.WriteStartElement(XML_CATEGORY_TAG); switchCategory = String.Format(XML_SWITCH_CATEGORY, question.Category.Name, question.LearningOutcomeName, question.Level.Name); xmlWriter.WriteElementString(XML_TEXT_TAG, switchCategory); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } #endregion string questionComment = String.Format(XML_COMMENT_QUESTION, question.Id); xmlWriter.WriteComment(questionComment); xmlWriter.WriteStartElement(XML_QUESTION_TAG); xmlWriter.WriteAttributeString(XML_TYPE_ATTR_NAME, XML_MULTICHOICE_ATTR_VALUE); //name tag xmlWriter.WriteStartElement(XML_NAME_TAG); xmlWriter.WriteElementString(XML_TEXT_TAG, question.QuestionCode); xmlWriter.WriteEndElement(); //questiontext tag if (question.Images == null || question.Images.Count == 0) { xmlWriter.WriteStartElement(XML_QUESTIONTEXT_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); string questionContentEncode = StringUtilities.FormatStringExportXML(question.QuestionContent).Trim(); if (questionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(questionContentEncode); } else { xmlWriter.WriteString(questionContentEncode); } xmlWriter.WriteEndElement(); } else { //questiontext tag List <string> imageNames = new List <string>(); string questionContentEncode = StringUtilities.FormatStringExportXML(question.QuestionContent).Trim(); foreach (var image in question.Images) { string imageName = "Image" + count++ + ".png"; imageNames.Add(imageName); questionContentEncode = questionContentEncode + String.Format(HTML_IMAGE_TAG, imageName); } xmlWriter.WriteStartElement(XML_QUESTIONTEXT_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); if (questionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(questionContentEncode); } else { xmlWriter.WriteString(questionContentEncode); } xmlWriter.WriteEndElement(); //Image tag for (int j = 0; j < question.Images.Count; j++) { xmlWriter.WriteStartElement(XML_FILE_TAG); xmlWriter.WriteAttributeString(XML_NAME_ATTR_NAME, imageNames[j]); xmlWriter.WriteAttributeString(XML_PATH_ATTR_NAME, XML_PATH_ATTR_VALUE); xmlWriter.WriteAttributeString(XML_ENCODING_ATTR_NAME, XML_ENCODING_ATTR_VALUE); xmlWriter.WriteString(question.Images[j].Source); xmlWriter.WriteEndElement(); } } xmlWriter.WriteEndElement(); //generalfeedback tag xmlWriter.WriteStartElement(XML_GENRALFEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); //defaultgrade tag xmlWriter.WriteStartElement(XML_DEFAULTGRADE_TAG); xmlWriter.WriteString(String.Format("{0:0.0000000}", DEFAULTGRADE_VALUE.ToString())); xmlWriter.WriteEndElement(); //penalty tag xmlWriter.WriteStartElement(XML_PENALTY_TAG); xmlWriter.WriteString(PENALTY_VALUE.ToString()); xmlWriter.WriteEndElement(); //hidden tag xmlWriter.WriteStartElement(XML_HIDDEN_TAG); xmlWriter.WriteString(HIDDEN_VALUE.ToString()); xmlWriter.WriteEndElement(); //single tag xmlWriter.WriteStartElement(XML_SINGLE_TAG); xmlWriter.WriteString(SINGLE_VALUE.ToString()); xmlWriter.WriteEndElement(); //shuffleanswers tag xmlWriter.WriteStartElement(XML_SHUFFLEANSWERS_TAG); xmlWriter.WriteString(SHUFFLEANSWERS_VALUE.ToString()); xmlWriter.WriteEndElement(); //answernumbering tag xmlWriter.WriteStartElement(XML_ANSWERNUMBERING_TAG); xmlWriter.WriteString(ANSWERNUMBERING_VALUE.ToString()); xmlWriter.WriteEndElement(); //correctfeedback tag xmlWriter.WriteStartElement(XML_CORRECTFEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); //partiallycorrectfeedback tag xmlWriter.WriteStartElement(XML_PARTIALLYCORRECTFEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); //incorrectfeedback tag xmlWriter.WriteStartElement(XML_INCORRECTFEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); // answer tag foreach (var option in question.Options) { if (option.IsCorrect) { xmlWriter.WriteStartElement(XML_ANSWER_TAG); xmlWriter.WriteAttributeString(XML_FRACTION_ATTR_NAME, XML_CORRECT_FRACTION_ATTR_VALUE.ToString()); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); if (option.Images == null || option.Images.Count == 0) { //text tag xmlWriter.WriteStartElement(XML_TEXT_TAG); string optionContentEncode = StringUtilities.FormatStringExportXML(option.OptionContent).Trim(); if (optionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(optionContentEncode); } else { xmlWriter.WriteString(optionContentEncode); } xmlWriter.WriteEndElement(); } else { List <string> imageNames = new List <string>(); string optionContentEncode = StringUtilities.FormatStringExportXML(option.OptionContent).Trim(); foreach (var image in option.Images) { string imageName = "Image" + count++ + ".png"; imageNames.Add(imageName); optionContentEncode = optionContentEncode + String.Format(HTML_IMAGE_TAG, imageName); } // text atg xmlWriter.WriteStartElement(XML_TEXT_TAG); if (optionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(optionContentEncode); } else { xmlWriter.WriteString(optionContentEncode); } xmlWriter.WriteEndElement(); //Image tag for (int j = 0; j < option.Images.Count; j++) { xmlWriter.WriteStartElement(XML_FILE_TAG); xmlWriter.WriteAttributeString(XML_NAME_ATTR_NAME, imageNames[j]); xmlWriter.WriteAttributeString(XML_PATH_ATTR_NAME, XML_PATH_ATTR_VALUE); xmlWriter.WriteAttributeString(XML_ENCODING_ATTR_NAME, XML_ENCODING_ATTR_VALUE); xmlWriter.WriteString(option.Images[j].Source); xmlWriter.WriteEndElement(); } } //feedback tag xmlWriter.WriteStartElement(XML_FEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } else { xmlWriter.WriteStartElement(XML_ANSWER_TAG); xmlWriter.WriteAttributeString(XML_FRACTION_ATTR_NAME, XML_INCORRECT_FRACTION_ATTR_VALUE.ToString()); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); if (option.Images == null || option.Images.Count == 0) { //text atg xmlWriter.WriteStartElement(XML_TEXT_TAG); string optionContentEncode = StringUtilities.FormatStringExportXML(option.OptionContent).Trim(); if (optionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(optionContentEncode); } else { xmlWriter.WriteString(optionContentEncode); } xmlWriter.WriteEndElement(); } else { List <string> imageNames = new List <string>(); string optionContentEncode = StringUtilities.FormatStringExportXML(option.OptionContent).Trim(); foreach (var image in option.Images) { string imageName = "Image" + count++ + ".png"; imageNames.Add(imageName); optionContentEncode = optionContentEncode + String.Format(HTML_IMAGE_TAG, imageName); } // text atg xmlWriter.WriteStartElement(XML_TEXT_TAG); if (optionContentEncode.IndexOfAny(SpecialChars.ToCharArray()) != -1) { xmlWriter.WriteCData(optionContentEncode); } else { xmlWriter.WriteString(optionContentEncode); } xmlWriter.WriteEndElement(); //Image tag for (int j = 0; j < option.Images.Count; j++) { xmlWriter.WriteStartElement(XML_FILE_TAG); xmlWriter.WriteAttributeString(XML_NAME_ATTR_NAME, imageNames[j]); xmlWriter.WriteAttributeString(XML_PATH_ATTR_NAME, XML_PATH_ATTR_VALUE); xmlWriter.WriteAttributeString(XML_ENCODING_ATTR_NAME, XML_ENCODING_ATTR_VALUE); xmlWriter.WriteString(option.Images[j].Source); xmlWriter.WriteEndElement(); } } //feedback tag xmlWriter.WriteStartElement(XML_FEEDBACK_TAG); xmlWriter.WriteAttributeString(XML_FORMAT_ATTR_NAME, XML_HTML_ATTR_VALUE); xmlWriter.WriteStartElement(XML_TEXT_TAG); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); } } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); xmlWriter.Flush(); // Convert the memory stream to an array of bytes. result = stream.ToArray(); xmlWriter.Close(); } return(result); }