コード例 #1
0
ファイル: CourseLoader.cs プロジェクト: Griboedoff/Ulearn
        private static IEnumerable <Unit> LoadUnits(DirectoryInfo dir, CourseSettings settings, string courseId)
        {
            var unitsDirectories = dir.GetDirectories().OrderBy(d => d.Name);

            var unitIds    = new HashSet <Guid>();
            var unitUrls   = new HashSet <string>();
            var slideIndex = 0;

            foreach (var unitDirectory in unitsDirectories)
            {
                var unit = UnitLoader.LoadUnit(unitDirectory, settings, courseId, slideIndex);

                if (unitIds.Contains(unit.Id))
                {
                    throw new CourseLoadingException($"Ошибка в курсе \"{settings.Title}\" при загрузке модуля \"{unit.Title}\" из {unitDirectory.FullName}. " +
                                                     $"Повторяющийся идентификатор модуля: {unit.Id}. Идентификаторы модулей должны быть уникальными. " +
                                                     $"К этому времени загружены модули {string.Join(", ", unitIds)}");
                }
                unitIds.Add(unit.Id);

                if (unitUrls.Contains(unit.Url))
                {
                    throw new CourseLoadingException($"Ошибка в курсе \"{settings.Title}\" при загрузке модуля \"{unit.Title}\" из {unitDirectory.FullName}. Повторяющийся url-адрес модуля: {unit.Url}. Url-адреса модулей должны быть уникальными");
                }
                unitUrls.Add(unit.Url);

                yield return(unit);

                slideIndex += unit.Slides.Count;
            }
        }
コード例 #2
0
        private static void CreateCourseFromExample(string courseId, string path, FileInfo helpPackage)
        {
            helpPackage.CopyTo(path, true);
            var nsResolver = new XmlNamespaceManager(new NameTable());

            nsResolver.AddNamespace("course", "https://ulearn.azurewebsites.net/course");
            nsResolver.AddNamespace("lesson", "https://ulearn.azurewebsites.net/lesson");
            nsResolver.AddNamespace("quiz", "https://ulearn.azurewebsites.net/quiz");
            using (var zip = ZipFile.Read(path, new ReadOptions {
                Encoding = Encoding.GetEncoding(866)
            }))
            {
                if (zip.ContainsEntry("Course.xml"))
                {
                    UpdateXmlElement(zip["Course.xml"], "//course:Course/course:title", courseId, zip, nsResolver);
                }
                foreach (var entry in zip.SelectEntries("name = *.lesson.xml").Where(entry => UnitLoader.IsSlideFile(Path.GetFileName(entry.FileName))))
                {
                    UpdateXmlElement(entry, "//lesson:Lesson/lesson:id", Guid.NewGuid().ToString(), zip, nsResolver);
                }
                foreach (var entry in zip.SelectEntries("name = *.quiz.xml").Where(entry => UnitLoader.IsSlideFile(Path.GetFileName(entry.FileName))))
                {
                    UpdateXmlAttribute(entry, "//quiz:Quiz", "id", Guid.NewGuid().ToString(), zip, nsResolver);
                }
                foreach (var entry in zip.SelectEntries("name = *.cs").Where(entry => UnitLoader.IsSlideFile(Path.GetFileName(entry.FileName))))
                {
                    UpdateCsFiles(entry, Guid.NewGuid().ToString(), zip);
                }
            }
        }