public void ReadXml(XmlTextReader xmlReader) { try { var isEndCycle = false; while (!isEndCycle && xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name.Equals("group", StringComparison.OrdinalIgnoreCase)) { #region Группа var g = new Group(); if (xmlReader.GetAttribute("name") != null) { g.Text = xmlReader.GetAttribute("name"); } else { g.Text = string.Concat("Группа ", testModule.Groups.Count + 1); } g.ChosenQuestionsCount = int.Parse(xmlReader.GetAttribute("count")); g.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(g); #endregion } if (xmlReader.Name.Equals("question", StringComparison.OrdinalIgnoreCase)) { // Название вопроса. var qname = xmlReader.GetAttribute("name"); // Идентификатор вопроса. var qid = xmlReader.GetAttribute("id").Substring(8, 36); // Тип вопроса. var qtype = xmlReader.GetAttribute("type"); // Ограничение по времени на прохождение вопроса. var qtime = xmlReader.GetAttribute("time"); // Идентификатор следующего вопроса. var qNextQuestion = xmlReader.GetAttribute("next_question"); if (!string.IsNullOrEmpty(qNextQuestion)) { qNextQuestion = qNextQuestion.Substring(8, 36); } if (qtype.Equals("radio", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Одновариантный выбор var q = new ChoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("checkbox", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Множественный выбор var q = new MultichoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("order", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Ранжирование var q = new OrderingQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase) || qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Открытый вопрос var q = new OpenQuestion { Text = qname }; if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = false; } else if (qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = true; } try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("outer", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Внешний вопрос var q = new OuterQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { if (xmlReader.Name.Equals("module", StringComparison.OrdinalIgnoreCase)) { isEndCycle = true; } } } } catch (Exception ex) { ExceptionManager.Instance.LogException(ex); } }
private static OuterQuestion PrepareOuterQuestion() { var q = new OuterQuestion { Id = Guid.NewGuid() }; if (Warehouse.Warehouse.Instance.CourseTree.CurrentNode is Group) { var g = Warehouse.Warehouse.Instance.CourseTree.CurrentNode as Group; q.TimeRestriction = g.TimeRestriction; q.Profile = g.Profile; q.Marks = g.Marks; } Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Nodes.Add(q); if (!Warehouse.Warehouse.Instance.CourseTree.CurrentNode.IsExpanded) { Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Toggle(); } // Создает и отображает редактор. q.QuestionDocument = new QuestionDocument { Question = q, HtmlEditingTool = {Mode = Utils.Controls.HtmlEditing.Enums.HtmlEditingToolMode.Design} }; //q.QuestionDocument.VisualHtmlEditor.SetDefaultFont(); HtmlEditingToolHelper.SetDefaultDocumentHtml(q.QuestionDocument.HtmlEditingTool); PreviewObserver.AddDocument(q.QuestionDocument); q.QuestionDocument.Show(); return q; }
public static Question Clone(Question question) { Question newQuestion = null; #region Инициализация вопроса if (question is ChoiceQuestion) { newQuestion = new ChoiceQuestion(); } else if (question is MultichoiceQuestion) { newQuestion = new MultichoiceQuestion(); } else if (question is InteractiveQuestion) { newQuestion = new InteractiveQuestion(); } else if (question is OrderingQuestion) { newQuestion = new OrderingQuestion(); } else if (question is OpenQuestion) { newQuestion = new OpenQuestion(); } else if (question is CorrespondenceQuestion) { newQuestion = new CorrespondenceQuestion(); } else if (question is OuterQuestion) { newQuestion = new OuterQuestion(); (newQuestion as OuterQuestion).TaskId = (question as OuterQuestion).TaskId; (newQuestion as OuterQuestion).TaskName = (question as OuterQuestion).TaskName; (newQuestion as OuterQuestion).TestName = (question as OuterQuestion).TestName; (newQuestion as OuterQuestion).SubjectName = (question as OuterQuestion).SubjectName; (newQuestion as OuterQuestion).Declaration = (question as OuterQuestion).Declaration; (newQuestion as OuterQuestion).Url = (question as OuterQuestion).Url; } #endregion newQuestion.LowerBound = question.LowerBound; newQuestion.Cardinality = question.Cardinality; newQuestion.Text = question.Text; newQuestion.Id = Guid.NewGuid(); newQuestion.DocumentHtml = string.Copy(question.DocumentHtml); newQuestion.TimeRestriction = question.TimeRestriction; newQuestion.Profile = question.Profile; newQuestion.Marks = question.Marks; newQuestion.Hint = question.Hint; newQuestion.NextQuestion = question.NextQuestion; newQuestion.IsAdaptive = question.IsAdaptive; newQuestion.BaseType = question.BaseType; newQuestion.DefaultValue = question.DefaultValue; //newQuestion.Mark = question.Mark; newQuestion.IsShuffle = question.IsShuffle; newQuestion.MaxChoices = question.MaxChoices; // newQuestion.timeRestriction = question.timeRestriction; newQuestion.identifier = question.identifier; // идентификатор вопроса ("VE-" + questionNumber + questionType) foreach (var questionResponse in question.Responses) { var response = Response.Clone(questionResponse); newQuestion.Nodes.Add(response); } foreach (ResponseVariant questionResponseVariant in question.ResponseVariants) { var responseVariant = new ResponseVariant(question); if (!(question is OrderingQuestion) && !(question is OpenQuestion)) { foreach (Response response in questionResponseVariant.Responses) { for (var i = 0; i < question.Responses.Count; i++) { if ((question.Responses[i]).Text.Equals(response.Text)) { responseVariant.Responses.Add(question.Responses[i]); break; } } } } else { for (var i = 0; i < questionResponseVariant.Responses.Count; i++) { responseVariant.Responses.Add(questionResponseVariant.Responses[i]); } } responseVariant.Weight = questionResponseVariant.Weight; responseVariant.Hint = questionResponseVariant.Hint; responseVariant.NextQuestion = questionResponseVariant.NextQuestion; // моё newQuestion.ResponseVariants.Add(responseVariant); } return newQuestion; }
public void ReadXml(XmlTextReader xmlReader) { try { var isEndCycle = false; group.ChosenQuestionsCount = int.Parse(xmlReader.GetAttribute("count")); while (!isEndCycle && xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name.Equals("question", StringComparison.OrdinalIgnoreCase)) { var qname = xmlReader.GetAttribute("name"); var qid = xmlReader.GetAttribute("id").Substring(8, 36); var qtype = xmlReader.GetAttribute("type"); var qtime = xmlReader.GetAttribute("time"); group.TimeRestriction = int.Parse(qtime); if (qtype.Equals("radio", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Одновариантный выбор var q = new ChoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); q.XmlReader.ReadXml(xmlReader); group.Nodes.Add(q); #endregion } else if (qtype.Equals("checkbox", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Множественный выбор var q = new MultichoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); q.XmlReader.ReadXml(xmlReader); group.Nodes.Add(q); #endregion } else if (qtype.Equals("order", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Ранжирование var q = new OrderingQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); q.XmlReader.ReadXml(xmlReader); group.Nodes.Add(q); #endregion } else if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase) || qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Открытый вопрос var q = new OpenQuestion { Text = qname }; if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = false; } else if (qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = true; } try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); q.XmlReader.ReadXml(xmlReader); group.Nodes.Add(q); #endregion } else if (qtype.Equals("outer", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Внешний вопрос var q = new OuterQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); q.XmlReader.ReadXml(xmlReader); group.Nodes.Add(q); #endregion } } if (xmlReader.Name.Equals("mark", StringComparison.OrdinalIgnoreCase)) { group.Marks = int.Parse(xmlReader.GetAttribute("value")); try { var id = new Guid(xmlReader.GetAttribute("concept_id").Substring(6, 36)); foreach (Concept c in Warehouse.Warehouse.Instance.ConceptTree.Nodes) { if (c.Id.Equals(id)) { group.Profile = c; break; } } } catch { group.Profile = null; } foreach (var q in group.Questions) { q.Marks = group.Marks; q.Profile = group.Profile; } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { if (xmlReader.Name.Equals("group", StringComparison.OrdinalIgnoreCase)) { isEndCycle = true; } } } } catch (Exception ex) { ExceptionManager.Instance.LogException(ex); } }