public GroupsController(ILogger logger, WebCourseManager courseManager, UlearnDb db, GroupsRepo groupsRepo, GroupAccessesRepo groupAccessesRepo) : base(logger, courseManager, db) { this.groupsRepo = groupsRepo; this.groupAccessesRepo = groupAccessesRepo; }
public static List <string> GetEnabledAdditionalScoringGroupsForGroups(GroupsRepo groupsRepo, Course course, List <string> groupsIds, IPrincipal User) { if (groupsIds.Contains("all") || groupsIds.Contains("not-in-group")) { return(course.Settings.Scoring.Groups.Keys.ToList()); } var enabledAdditionalScoringGroupsForGroups = groupsRepo.GetEnabledAdditionalScoringGroups(course.Id) .GroupBy(e => e.GroupId) .ToDictionary(g => g.Key, g => g.Select(e => e.ScoringGroupId).ToList()); /* if groupsIds is empty, get members of all own groups. Available for instructors */ if (groupsIds.Count == 0 || groupsIds.Any(string.IsNullOrEmpty)) { var accessableGroupsIds = groupsRepo.GetMyGroupsFilterAccessibleToUser(course.Id, User).Select(g => g.Id).ToList(); return(enabledAdditionalScoringGroupsForGroups.Where(kv => accessableGroupsIds.Contains(kv.Key)).SelectMany(kv => kv.Value).ToList()); } var result = new List <string>(); foreach (var groupId in groupsIds) { int groupIdInt; if (int.TryParse(groupId, out groupIdInt)) { result.AddRange(enabledAdditionalScoringGroupsForGroups.GetOrDefault(groupIdInt, new List <string>())); } } return(result); }
public ExerciseController(CourseManager courseManager) { this.courseManager = courseManager; groupsRepo = new GroupsRepo(db); solutionsRepo = new UserSolutionsRepo(db); visitsRepo = new VisitsRepo(db); slideCheckingsRepo = new SlideCheckingsRepo(db); }
public QuizController(CourseManager courseManager) { this.courseManager = courseManager; userQuizzesRepo = new UserQuizzesRepo(db); visitsRepo = new VisitsRepo(db); quizzesRepo = new QuizzesRepo(db); groupsRepo = new GroupsRepo(db); slideCheckingsRepo = new SlideCheckingsRepo(db); }
public static T GetFilterOptionsByGroup <T>(GroupsRepo groupsRepo, IPrincipal User, string courseId, List <string> groupsIds, bool allowSeeGroupForAnyMember = false) where T : AbstractFilterOptionByCourseAndUsers, new() { var result = new T { CourseId = courseId }; /* if groupsIds contains "all" (it should be exclusive), get all users. Available only for course admins */ if (groupsIds.Contains("all") && User.HasAccessFor(courseId, CourseRole.CourseAdmin)) { return(result); } /* if groupsIds contains "not-group" (it should be exclusive), get all users not in any groups, available only for course admins */ if (groupsIds.Contains("not-in-group") && User.HasAccessFor(courseId, CourseRole.CourseAdmin)) { var usersInGroups = groupsRepo.GetUsersIdsForAllGroups(courseId); result.UserIds = usersInGroups.ToList(); result.IsUserIdsSupplement = true; return(result); } result.UserIds = new List <string>(); /* if groupsIds is empty, get members of all groups user has access to. Available for instructors */ if ((groupsIds.Count == 0 || groupsIds.Any(string.IsNullOrEmpty)) && User.HasAccessFor(courseId, CourseRole.Instructor)) { var accessibleGroupsIds = groupsRepo.GetMyGroupsFilterAccessibleToUser(courseId, User).Select(g => g.Id).ToList(); var groupUsersIdsQuery = groupsRepo.GetGroupsMembersAsUserIds(accessibleGroupsIds); result.UserIds = groupUsersIdsQuery.ToList(); return(result); } var usersIds = new HashSet <string>(); var groupsIdsInts = groupsIds.Select(s => int.TryParse(s, out var i) ? i : (int?)null).Where(i => i.HasValue).Select(i => i.Value).ToList(); var group2GroupMembersIds = groupsRepo.GetGroupsMembersAsGroupsIdsAndUserIds(groupsIdsInts) .GroupBy(u => u.GroupId) .ToDictionary(g => g.Key, g => g.Select(p => p.UserId).ToList()); foreach (var groupIdInt in groupsIdsInts) { if (!group2GroupMembersIds.ContainsKey(groupIdInt)) { continue; } var hasAccessToGroup = groupsRepo.IsGroupAvailableForUser(groupIdInt, User); if (allowSeeGroupForAnyMember) { hasAccessToGroup |= group2GroupMembersIds[groupIdInt].Contains(User.Identity.GetUserId()); } if (hasAccessToGroup) { usersIds.AddAll(group2GroupMembersIds[groupIdInt]); } } result.UserIds = usersIds.ToList(); return(result); }
public AnalyticsController(CourseManager courseManager) { this.courseManager = courseManager; additionalScoresRepo = new AdditionalScoresRepo(db); userSolutionsRepo = new UserSolutionsRepo(db); groupsRepo = new GroupsRepo(db); usersRepo = new UsersRepo(db); visitsRepo = new VisitsRepo(db); }
public QuizController() { metricSender = new GraphiteMetricSender("web"); userQuizzesRepo = new UserQuizzesRepo(db); visitsRepo = new VisitsRepo(db); groupsRepo = new GroupsRepo(db, courseManager); slideCheckingsRepo = new SlideCheckingsRepo(db); notificationsRepo = new NotificationsRepo(db); }
public AccountController() { db = new ULearnDb(); userManager = new ULearnUserManager(db); courseManager = WebCourseManager.Instance; usersRepo = new UsersRepo(db); userRolesRepo = new UserRolesRepo(db); groupsRepo = new GroupsRepo(db); certificatesRepo = new CertificatesRepo(db); visitsRepo = new VisitsRepo(db); }
public override void SetUp() { base.SetUp(); var groupsCreatorAndCopier = serviceProvider.GetService <IGroupsCreatorAndCopier>(); var manualCheckingsForOldSolutionsAdder = new Mock <IManualCheckingsForOldSolutionsAdder>(); groupsRepo = new GroupsRepo( db, groupsCreatorAndCopier, manualCheckingsForOldSolutionsAdder.Object ); }
public QuizController() { metricSender = new MetricSender(ApplicationConfiguration.Read <UlearnConfiguration>().GraphiteServiceName); userQuizzesRepo = new UserQuizzesRepo(db); visitsRepo = new VisitsRepo(db); groupsRepo = new GroupsRepo(db, courseManager); slideCheckingsRepo = new SlideCheckingsRepo(db); notificationsRepo = new NotificationsRepo(db); unitsRepo = new UnitsRepo(db); }
public SlideNavigationController() { var db = new ULearnDb(); unitsRepo = new UnitsRepo(db); solutionsRepo = new UserSolutionsRepo(db, courseManager); visitsRepo = new VisitsRepo(db); userQuizzesRepo = new UserQuizzesRepo(db); groupsRepo = new GroupsRepo(db, courseManager); additionalScoresRepo = new AdditionalScoresRepo(db); }
public RunnerController(ULearnDb db, CourseManager courseManager) { this.db = db; this.courseManager = courseManager; userSolutionsRepo = new UserSolutionsRepo(db, courseManager); slideCheckingsRepo = new SlideCheckingsRepo(db); visitsRepo = new VisitsRepo(db); groupsRepo = new GroupsRepo(db, courseManager); usersRepo = new UsersRepo(db); metricSender = new MetricSender(ApplicationConfiguration.Read <UlearnConfiguration>().GraphiteServiceName); }
public CourseController() { slideCheckingsRepo = new SlideCheckingsRepo(db); visitsRepo = new VisitsRepo(db); unitsRepo = new UnitsRepo(db); slideRateRepo = new SlideRateRepo(db); solutionsRepo = new UserSolutionsRepo(db, courseManager); ltiRequestsRepo = new LtiRequestsRepo(db); groupsRepo = new GroupsRepo(db, courseManager); userQuizzesRepo = new UserQuizzesRepo(db); coursesRepo = new CoursesRepo(db); }
public AccountController() { userRolesRepo = new UserRolesRepo(db); groupsRepo = new GroupsRepo(db, courseManager); certificatesRepo = new CertificatesRepo(db); visitsRepo = new VisitsRepo(db); notificationsRepo = new NotificationsRepo(db); coursesRepo = new CoursesRepo(db); systemAccessesRepo = new SystemAccessesRepo(db); telegramSecret = WebConfigurationManager.AppSettings["ulearn.telegram.webhook.secret"] ?? ""; }
public CodeReviewStatisticsController(ILogger logger, WebCourseManager courseManager, SlideCheckingsRepo slideCheckingsRepo, UserRolesRepo userRolesRepo, UsersRepo usersRepo, GroupsRepo groupsRepo, UlearnDb db) : base(logger, courseManager, db) { this.slideCheckingsRepo = slideCheckingsRepo; this.userRolesRepo = userRolesRepo; this.usersRepo = usersRepo; this.groupsRepo = groupsRepo; }
public BaseExerciseController(ULearnDb db, CourseManager courseManager, GraphiteMetricSender metricSender) { this.db = db; this.courseManager = courseManager; this.metricSender = metricSender; userSolutionsRepo = new UserSolutionsRepo(db, courseManager); slideCheckingsRepo = new SlideCheckingsRepo(db); groupsRepo = new GroupsRepo(db, courseManager); visitsRepo = new VisitsRepo(db); notificationsRepo = new NotificationsRepo(db); usersRepo = new UsersRepo(db); styleErrorsRepo = new StyleErrorsRepo(db); }
public static int GetManualCheckingsCountInQueue(SlideCheckingsRepo slideCheckingsRepo, GroupsRepo groupsRepo, IPrincipal user, string courseId, Slide slide, List <string> groupsIds) { var filterOptions = GetFilterOptionsByGroup <ManualCheckingQueueFilterOptions>(groupsRepo, user, courseId, groupsIds); if (filterOptions.UserIds == null) { groupsIds = new List <string> { "all" } } ; filterOptions.SlidesIds = new List <Guid> { slide.Id }; if (slide is ExerciseSlide) { return(slideCheckingsRepo.GetManualCheckingQueue <ManualExerciseChecking>(filterOptions).Count()); } if (slide is QuizSlide) { return(slideCheckingsRepo.GetManualCheckingQueue <ManualQuizChecking>(filterOptions).Count()); } throw new ArgumentException("Slide should be quiz or exercise", nameof(slide)); } }
protected void RepoInit() { EnvInit(); users = new UserRepo(guc); groups = new GroupsRepo(guc); }
public static async Task <bool> SendToReviewAndUpdateScore(UserExerciseSubmission submission, CourseManager courseManager, SlideCheckingsRepo slideCheckingsRepo, GroupsRepo groupsRepo, VisitsRepo visitsRepo, MetricSender metricSender, bool startTransaction) { var userId = submission.User.Id; var courseId = submission.CourseId; var course = courseManager.GetCourse(courseId); var exerciseSlide = course.FindSlideById(submission.SlideId, true) as ExerciseSlide; // SlideId проверен в вызывающем методе if (exerciseSlide == null) { return(false); } var exerciseMetricId = GetExerciseMetricId(courseId, exerciseSlide); var automaticChecking = submission.AutomaticChecking; var isProhibitedUserToSendForReview = slideCheckingsRepo.IsProhibitedToSendExerciseToManualChecking(courseId, exerciseSlide.Id, userId); var sendToReview = exerciseSlide.Scoring.RequireReview && submission.AutomaticCheckingIsRightAnswer && !isProhibitedUserToSendForReview && groupsRepo.IsManualCheckingEnabledForUser(course, userId); if (sendToReview) { await slideCheckingsRepo.RemoveWaitingManualCheckings <ManualExerciseChecking>(courseId, exerciseSlide.Id, userId, false); await slideCheckingsRepo.AddManualExerciseChecking(courseId, exerciseSlide.Id, userId, submission); await visitsRepo.MarkVisitsAsWithManualChecking(courseId, exerciseSlide.Id, userId); metricSender.SendCount($"exercise.{exerciseMetricId}.sent_to_review"); metricSender.SendCount("exercise.sent_to_review"); } await visitsRepo.UpdateScoreForVisit(courseId, exerciseSlide, userId); if (automaticChecking != null) { var verdictForMetric = automaticChecking.GetVerdict().Replace(" ", ""); metricSender.SendCount($"exercise.{exerciseMetricId}.{verdictForMetric}"); } return(sendToReview); }
public ParticipantsController(ParticipantsRepo aParticipantsRepo, SessionsRepo aSessionsRepo, GroupsRepo aGroupsRepo) { mParticipantsRepo = aParticipantsRepo; mSessionsRepo = aSessionsRepo; mGroupsRepo = aGroupsRepo; }
public AntiPlagiarismController(UserSolutionsRepo userSolutionsRepo, GroupsRepo groupsRepo) { this.userSolutionsRepo = userSolutionsRepo; this.groupsRepo = groupsRepo; }
public void Setup() { repo = new GroupsRepo(Config); }
public GroupsController(GroupsRepo aGroupsRepo, SessionsRepo aSessionsRepo) { mGroupsRepo = aGroupsRepo; mSessionsRepo = aSessionsRepo; }
public static T GetFilterOptionsByGroup <T>(GroupsRepo groupsRepo, IPrincipal User, string courseId, List <string> groupsIds, bool allowSeeGroupForAnyMember = false) where T : AbstractFilterOptionByCourseAndUsers, new() { var result = new T { CourseId = courseId }; /* if groupsIds contains "all" (it should be exclusive), get all users. Available only for instructors */ if (groupsIds.Contains("all") && User.HasAccessFor(courseId, CourseRole.Instructor)) { return(result); } /* if groupsIds contains "not-group" (it should be exclusive), get all users not in any groups, available only for course admins */ if (groupsIds.Contains("not-in-group") && User.HasAccessFor(courseId, CourseRole.CourseAdmin)) { var usersInGroups = groupsRepo.GetUsersIdsForAllGroups(courseId); result.UsersIds = usersInGroups.ToList(); result.IsUserIdsSupplement = true; return(result); } result.UsersIds = new List <string>(); var usersIds = new HashSet <string>(); /* if groupsIds is empty, get members of all own groups. Available for instructors */ if ((groupsIds.Count == 0 || groupsIds.Any(string.IsNullOrEmpty)) && User.HasAccessFor(courseId, CourseRole.Instructor)) { var ownGroupsIds = groupsRepo.GetGroupsOwnedByUser(courseId, User).Select(g => g.Id).ToList(); foreach (var ownGroupId in ownGroupsIds) { var groupUsersIds = groupsRepo.GetGroupMembers(ownGroupId).Select(u => u.Id); usersIds.AddAll(groupUsersIds); } result.UsersIds = usersIds.ToList(); return(result); } foreach (var groupId in groupsIds) { int groupIdInt; if (int.TryParse(groupId, out groupIdInt)) { var group = groupsRepo.FindGroupById(groupIdInt); if (group != null) { var groupMembersIds = groupsRepo.GetGroupMembers(group.Id).Select(u => u.Id).ToList(); var hasAccessToGroup = groupsRepo.IsGroupAvailableForUser(group.Id, User); if (allowSeeGroupForAnyMember) { hasAccessToGroup |= groupMembersIds.Contains(User.Identity.GetUserId()); } if (hasAccessToGroup) { usersIds.AddAll(groupMembersIds); } } } } result.UsersIds = usersIds.ToList(); return(result); }
public AntiPlagiarismController(ULearnDb db, UserSolutionsRepo userSolutionsRepo, GroupsRepo groupsRepo) { this.db = db; this.userSolutionsRepo = userSolutionsRepo; this.groupsRepo = groupsRepo; }