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