コード例 #1
0
ファイル: PageModel.cs プロジェクト: kjmtks/LMS7
 public PageModel(Entities.Lecture lecture, Entities.User user, CommitInfo commitInfo, string current_page_path, string branch, System.Dynamic.ExpandoObject viewBag)
 {
     this.lecture    = lecture;
     Lecture         = new Lecture(lecture);
     CommitInfo      = commitInfo;
     CurrentPagePath = current_page_path;
     Branch          = branch;
     ViewBag         = viewBag;
     User            = new User(user, user.IsTeacher(lecture) ? Role.Teacher : Role.Studnet);
     Teachers        = lecture.GetTeachers().Where(x => x.IsTeacher(lecture)).Select(x => new User(x, Role.Teacher));
     Students        = lecture.GetTeachers().Where(x => x.IsStudent(lecture)).Select(x => new User(x, Role.Studnet));
 }
コード例 #2
0
ファイル: ActivityParser.cs プロジェクト: kjmtks/LMS7
        public static async Task <Activity> BuildActivityAsync(Entities.Lecture lecture, string activity_filename, Entities.User user, IDictionary <string, string> args, string current_page_path, string branch)
        {
            var text = lecture.ReadActivityFile(activity_filename, branch);

            var engine = new RazorLight.RazorLightEngineBuilder()
                         .UseEmbeddedResourcesProject(typeof(Dummy))
                         .UseMemoryCachingProvider()
                         .Build();
            var           commitInfo = lecture.LectureContentsRepositoryPair.ReadCommitInfo($"activities/{activity_filename}", branch);
            dynamic       viewbag    = new System.Dynamic.ExpandoObject();
            var           model      = new PageModel(lecture, user, commitInfo, current_page_path, branch, viewbag);
            StringBuilder sb         = new StringBuilder();

            sb.AppendLine($"@model {model.GetType().FullName}");
            sb.AppendLine("@{ DisableEncoding = true; }");
            sb.Append(text);

            var x = viewbag as IDictionary <string, Object>;

            foreach (var p in lecture.GetParameters().GetValues())
            {
                x.Add(p.Name, p.GetValue());
            }
            foreach (var p in args)
            {
                x.Add(p.Key, p.Value);
            }

            var xml = await engine.CompileRenderStringAsync($"{lecture.DirectoryPath}/contents/activities/{activity_filename}:{branch}", sb.ToString(), model, viewbag);

            XmlSchemaSet set = new XmlSchemaSet();

            set.Add("urn:activity-schema", $"ActivitySchema.xsd");
            XmlSchema schema = null;

            foreach (XmlSchema s in set.Schemas("urn:activity-schema"))
            {
                schema = s;
            }

            XmlDocument xdoc = new XmlDocument();

            xdoc.Schemas.Add(schema);
            xdoc.LoadXml(xml);
            var sb2 = new System.Text.StringBuilder();

            xdoc.Validate((sender, args) => {
                if (args.Severity == XmlSeverityType.Error)
                {
                    sb2.AppendLine("Error: " + args.Message);
                }
            });
            var validateResult = sb2.ToString().TrimEnd();

            if (validateResult != string.Empty)
            {
                throw new FormatException(validateResult);
            }
            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Activity));
            using (var ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml)))
            {
                return((Activity)serializer.Deserialize(ms));
            }
        }
コード例 #3
0
ファイル: PageModel.cs プロジェクト: kjmtks/LMS7
 public Lecture(Entities.Lecture lecture)
 {
     Name    = lecture.Name;
     Subject = lecture.Subject;
     Owner   = new User(lecture.Owner, lecture.Owner.IsTeacher(lecture) ? Role.Teacher : Role.Studnet);
 }