Exemplo n.º 1
0
        public override void Execute(object @object)
        {
            if (!Enabled)
            {
                return;
            }

            var g = new Group();

            if (Warehouse.Warehouse.Instance.CourseTree.CurrentNode is TestModule)
            {
                var tm = Warehouse.Warehouse.Instance.CourseTree.CurrentNode as TestModule;
                g.Text = string.Concat("Группа ", tm.Groups.Count + 1);

                #region Если в контроле есть группы, то последовательность вопросов случайная

                tm.QuestionSequence = Enums.QuestionSequence.Random;

                #endregion
            }

            Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Nodes.Add(g);

            if (!Warehouse.Warehouse.Instance.CourseTree.CurrentNode.IsExpanded)
            {
                Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Toggle();
            }

            Warehouse.Warehouse.Instance.CourseTree.CurrentNode = g;
            Warehouse.Warehouse.IsProjectModified = true;
        }
Exemplo n.º 2
0
        public static Group Clone(Group group)
        {
            var newGroup = new Group
                               {
                                   Text = group.Text,
                                   TimeRestriction = group.TimeRestriction,
                                   Profile = group.Profile,
                                   Marks = group.Marks,
                                   ChosenQuestionsCount = group.ChosenQuestionsCount
                               };

            foreach (var groupQuestion in group.Questions)
            {
                var question = Question.Clone(groupQuestion);
                newGroup.Nodes.Add(question);
            }

            return newGroup;
        }
        /// <summary>
        /// Импорт файла теста из формата IMS QTI. 
        /// </summary>
        /// <param name="fileName">Имя файла теста.</param>
        public void ReadQti(string fileName)
        {
            XmlTextReader reader = new XmlTextReader(fileName);
            string testFolder = Path.GetDirectoryName(fileName);

            while (reader.Read())
            {
                if (reader.NodeType == XmlNodeType.Element)
                {
                    if (reader.Name.Equals("assessmentTest"))
                    {
                        identificator = reader.GetAttribute("identifier");
                        if (reader.GetAttribute("title") != "")
                            testName = reader.GetAttribute("title");
                        else testName = identificator;

                    }
                    if (reader.Name.Equals("defaultValue"))
                    {
                        bool endCycle = false;
                        // считываем содержимое defaultValue
                        while (!endCycle && reader.Read())
                        {
                            if (reader.NodeType == XmlNodeType.Element)
                            {
                                if (reader.Name.Equals("value"))
                                {
                                    int.TryParse(reader.ReadElementString(), out defaultValue);
                                }
                            }
                            else if (reader.NodeType == XmlNodeType.EndElement)
                            {
                                if (reader.Name.Equals("defaultValue"))
                                {
                                    endCycle = true;
                                }
                            }
                        }
                    }
                    if (reader.Name.Equals("testPart"))
                    {
                        if (reader.GetAttribute("navigationMode") == "linear")
                        {
                           // navigationMode = Enums.NavigationMode.linear;
                            questionSequence = Enums.QuestionSequence.Natural;
                        }
                        else if (reader.GetAttribute("navigationMode") == "nonlinear")
                        {
                          //  navigationMode = Enums.NavigationMode.nonlinear;
                            questionSequence = Enums.QuestionSequence.Random;
                        }
                    }
                    if (reader.Name.Equals("assessmentSection"))
                    {
                        Group group = new Group();
                        group.Text = reader.GetAttribute("title");  //хз.. вроде так)
                        bool endCycle = false;

                        while (!endCycle && reader.Read())
                        {
                            if (reader.NodeType == XmlNodeType.Element)
                            {
                                if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase))
                                {
                                    int tr;
                                    int.TryParse(reader.GetAttribute("maxTime"), out tr);
                                    group.TimeRestriction = tr;
                                }

                                if (reader.Name.Equals("assessmentItemRef"))
                                {
                                    Question q = ReadQuestionFile(testFolder + "\\" + reader.GetAttribute("href"), tmd);//(TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode);
                                    if (q != null)
                                    {
                                        if (!reader.IsEmptyElement)
                                        {
                                            bool end = false;
                                            while (!end && reader.Read())
                                            {
                                                if (reader.NodeType == XmlNodeType.Element)
                                                {
                                                    if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase))
                                                    {
                                                        int tr;
                                                        int.TryParse(reader.GetAttribute("maxTime"), out tr);
                                                        q.TimeRestriction = tr;
                                                    }
                                                }
                                                else if (reader.NodeType == XmlNodeType.EndElement)
                                                {
                                                    if (reader.Name.Equals("assessmentItemRef", System.StringComparison.OrdinalIgnoreCase))
                                                    {
                                                        end = true;
                                                    }
                                                }
                                            }
                                        }
                                        //пока не поняла, зачем это вообще надо
                                        // q.TestModule = (TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode;//this;
                                        // q.Group = group;
                                        group.Questions.Add(q);
                                        //roups
                                        if (q.Text != "")
                                            group.Nodes.Add(q);//скорее эта строчка правильная)
                                    }
                                }
                            }
                            else if (reader.NodeType == XmlNodeType.EndElement)
                            {
                                if (reader.Name.Equals("assessmentSection"))
                                {
                                    endCycle = true;
                                }
                            }
                        }
                        // group.QuestionNumber = group.questions.Count + 1;
                        groups.Add(group);

                        //  groups.
                    }
                    if (reader.Name.Equals("assessmentItemRef"))
                    {
                        Question q = ReadQuestionFile(testFolder + "\\" + reader.GetAttribute("href"), tmd);//(TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode /*this*/);
                        if (q != null)
                        {
                            if (!reader.IsEmptyElement)
                            {
                                bool end = false;
                                while (!end && reader.Read())
                                {
                                    if (reader.NodeType == XmlNodeType.Element)
                                    {
                                        if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase))
                                        {
                                            int tr;
                                            int.TryParse(reader.GetAttribute("maxTime"), out tr);
                                            q.TimeRestriction = tr;
                                        }
                                    }
                                    else if (reader.NodeType == XmlNodeType.EndElement)
                                    {
                                        if (reader.Name.Equals("assessmentItemRef", System.StringComparison.OrdinalIgnoreCase))
                                        {
                                            end = true;
                                        }
                                    }
                                }
                            }
                            //  q.TestModule = this;
                            questions.Add(q);
                            //    TestModule tmd = (TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode;
                            //    tmd.Nodes.Add(q);
                            //   int o = 90;
                            //tmd.Questions.Count+=1;

                        }
                    }
                }
            }
            reader.Close();
            questionNumber = questions.Count + 1;
            groupNumber = groups.Count + 1;
            if (groups.Count != 0)
            {
                QuestionSequence = Enums.QuestionSequence.Random;
            }

        }
 public GroupXmlWriter(Group group)
 {
     this.group = group;
 }
        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);
            }
        }
 public GroupXmlReader(Group group)
 {
     this.group = group;
 }