Exemple #1
0
        private static void UpdateCertificateArchives(UlearnDb db)
        {
            var directory = new DirectoryInfo("Templates");

            foreach (var file in directory.EnumerateFiles())
            {
                var guid    = file.Name.Split(".")[0];
                var content = file.ReadAllContent();
                var a       = db.CertificateTemplateArchives.Find(guid);
                if (a != null)
                {
                    a.Content = content;
                    db.SaveChanges();
                }
                else
                {
                    var id = db.CertificateTemplates.FirstOrDefault(t => t.ArchiveName == guid).Id;
                    db.CertificateTemplateArchives.Add(new CertificateTemplateArchive
                    {
                        ArchiveName           = guid,
                        Content               = content,
                        CertificateTemplateId = id
                    });
                    db.SaveChanges();
                }
                Console.WriteLine(guid);
            }
        }
Exemple #2
0
        // Обновляет пройденные тесты с нулевым баллом
        public static async Task UpdateTests(UlearnDb db, string courseId)
        {
            var courseManager      = new CourseManager(CourseManager.GetCoursesDirectory());
            var course             = courseManager.GetCourse(courseId);
            var slideCheckingsRepo = new SlideCheckingsRepo(db, null);
            var visitsRepo         = new VisitsRepo(db, slideCheckingsRepo);
            var tests = course.GetSlides(true).OfType <QuizSlide>().ToList();

            foreach (var test in tests)
            {
                var testVisits = db.Visits.Where(v => v.CourseId == courseId && v.SlideId == test.Id && v.IsPassed && v.Score == 0).ToList();
                foreach (var visit in testVisits)
                {
                    var answers            = db.UserQuizAnswers.Where(s => s.Submission.CourseId == courseId && s.Submission.UserId == visit.UserId && s.Submission.SlideId == visit.SlideId).ToList();
                    var groupsBySubmission = answers.GroupBy(a => a.Submission.Id).ToList();

                    foreach (var group in groupsBySubmission)
                    {
                        var submissionAnswers = group.ToList();
                        var blockAnswers      = submissionAnswers.GroupBy(s => s.BlockId);

                        var allQuizInfos = new List <QuizInfoForDb>();
                        foreach (var ans in blockAnswers)
                        {
                            var quizInfos = CreateQuizInfo(test, ans);
                            if (quizInfos != null)
                            {
                                allQuizInfos.AddRange(quizInfos);
                            }
                        }

                        foreach (var answer in submissionAnswers)
                        {
                            var valid = allQuizInfos.First(i => i.BlockId == answer.BlockId && i.ItemId == answer.ItemId);
                            answer.QuizBlockScore    = valid.QuizBlockScore;
                            answer.QuizBlockMaxScore = valid.QuizBlockMaxScore;
                        }

                        var score = allQuizInfos
                                    .DistinctBy(forDb => forDb.BlockId)
                                    .Sum(forDb => forDb.QuizBlockScore);

                        var checking = db.AutomaticQuizCheckings.FirstOrDefault(c => c.Submission.Id == group.Key);
                        if (checking != null)                         // В случае попытки сверх лимита AutomaticQuizCheckings не создается, но ответы сохраняются в UserQuizAnswers
                        {
                            checking.Score = score;
                        }

                        db.SaveChanges();
                    }

                    await visitsRepo.UpdateScoreForVisit(courseId, test, visit.UserId);
                }
                Console.WriteLine(test.Id);
            }
        }
        public void DropQuiz(string userId, Guid slideId)
        {
            var quizzes = db.UserQuizzes.Where(q => q.UserId == userId && q.SlideId == slideId).ToList();

            foreach (var q in quizzes)
            {
                q.isDropped = true;
            }
            db.SaveChanges();
        }
Exemple #4
0
        private static void TextBlobsWithZeroByte(UlearnDb db)
        {
            int i      = 0;
            var hashes = new List <string>();

            foreach (var text in db.Texts.AsNoTracking())
            {
                if (text.Text.Contains('\0'))
                {
                    Console.WriteLine(i);
                    hashes.Add(text.Hash);
                    i++;
                }
            }
            i = 0;
            foreach (var hash in hashes)
            {
                var temp = db.Texts.Find(hash);
                temp.Text = temp.Text.Replace("\0", "");
                Console.WriteLine("s" + i);
                i++;
                db.SaveChanges();
            }
        }
Exemple #5
0
        public QuizVersion AddQuizVersionIfNeeded(string courseId, QuizSlide slide)
        {
            var slideId = slide.Id;

            var quizXml         = slide.QuizNormalizedXml;
            var lastQuizVersion = GetLastQuizVersion(courseId, slideId);
            var newQuizVersion  = new QuizVersion
            {
                CourseId      = courseId,
                SlideId       = slideId,
                LoadingTime   = DateTime.Now,
                NormalizedXml = quizXml
            };

            if (lastQuizVersion == null || lastQuizVersion.NormalizedXml != newQuizVersion.NormalizedXml)
            {
                db.QuizVersions.Add(newQuizVersion);
                db.SaveChanges();

                return(newQuizVersion);
            }

            return(lastQuizVersion);
        }
Exemple #6
0
 public void Delete(UserQuestion userSolution)
 {
     db.UserQuestions.Remove(userSolution);
     db.SaveChanges();
 }