private string ReplaceQuizzesBuiltinParameters(string content, Certificate certificate, Course course) { var passedQuizzesCount = userQuizzesRepo.GetIdOfQuizPassedSlides(course.Id, certificate.UserId).Count; var scoredMaximumQuizzesCount = userQuizzesRepo.GetIdOfQuizSlidesScoredMaximum(course.Id, certificate.UserId).Count; content = SubstituteOneParameter(content, "quizzes.passed", passedQuizzesCount.ToString()); content = SubstituteOneParameter(content, "quizzes.passed_maxscore", scoredMaximumQuizzesCount.ToString()); return(content); }
private async Task AddManualCheckingsForOldSolutions(string courseId, string userId) { log.Info($"Создаю ручные проверки для всех решения пользователя {userId} в курсе {courseId}"); var course = courseManager.GetCourse(courseId); /* For exercises */ var acceptedSubmissionsBySlide = userSolutionsRepo.GetAllAcceptedSubmissionsByUser(courseId, userId) .GroupBy(s => s.SlideId) .ToDictionary(g => g.Key, g => g.ToList()); foreach (var acceptedSubmissionsForSlide in acceptedSubmissionsBySlide.Values) { /* If exists at least one manual checking for at least one submissions on slide, then ignore this slide */ if (!acceptedSubmissionsForSlide.Any(s => s.ManualCheckings.Any())) { /* Otherwise found the latest accepted submission */ var lastSubmission = acceptedSubmissionsForSlide.OrderByDescending(s => s.Timestamp).First(); var slideId = lastSubmission.SlideId; var slide = course.FindSlideById(slideId) as ExerciseSlide; if (slide == null || !slide.Exercise.RequireReview) { continue; } log.Info($"Создаю ручную проверку для решения {lastSubmission.Id}, слайд {slideId}"); await slideCheckingsRepo.AddManualExerciseChecking(courseId, slideId, userId, lastSubmission); await visitsRepo.MarkVisitsAsWithManualChecking(slideId, userId); } } /* For quizzes */ var passedQuizzesIds = userQuizzesRepo.GetIdOfQuizPassedSlides(courseId, userId); foreach (var quizSlideId in passedQuizzesIds) { var slide = course.FindSlideById(quizSlideId) as QuizSlide; if (slide == null || !slide.ManualChecking) { continue; } if (!userQuizzesRepo.IsWaitingForManualCheck(courseId, quizSlideId, userId)) { log.Info($"Создаю ручную проверку для теста {slide.Id}"); await slideCheckingsRepo.AddQuizAttemptForManualChecking(courseId, quizSlideId, userId); await visitsRepo.MarkVisitsAsWithManualChecking(quizSlideId, userId); } } }