Exemplo n.º 1
0
 public GroupsController(ILogger logger, WebCourseManager courseManager, UlearnDb db,
                         GroupsRepo groupsRepo, GroupAccessesRepo groupAccessesRepo)
     : base(logger, courseManager, db)
 {
     this.groupsRepo        = groupsRepo;
     this.groupAccessesRepo = groupAccessesRepo;
 }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public ExerciseController(CourseManager courseManager)
 {
     this.courseManager = courseManager;
     groupsRepo         = new GroupsRepo(db);
     solutionsRepo      = new UserSolutionsRepo(db);
     visitsRepo         = new VisitsRepo(db);
     slideCheckingsRepo = new SlideCheckingsRepo(db);
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 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);
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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);
 }
Exemplo n.º 9
0
        public override void SetUp()
        {
            base.SetUp();

            var groupsCreatorAndCopier = serviceProvider.GetService <IGroupsCreatorAndCopier>();
            var manualCheckingsForOldSolutionsAdder = new Mock <IManualCheckingsForOldSolutionsAdder>();

            groupsRepo = new GroupsRepo(
                db, groupsCreatorAndCopier, manualCheckingsForOldSolutionsAdder.Object
                );
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 12
0
 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);
 }
Exemplo n.º 13
0
 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);
 }
Exemplo n.º 14
0
        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"] ?? "";
        }
Exemplo n.º 15
0
 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;
 }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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));
        }
    }
Exemplo n.º 18
0
 protected void RepoInit()
 {
     EnvInit();
     users  = new UserRepo(guc);
     groups = new GroupsRepo(guc);
 }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 20
0
 public ParticipantsController(ParticipantsRepo aParticipantsRepo, SessionsRepo aSessionsRepo, GroupsRepo aGroupsRepo)
 {
     mParticipantsRepo = aParticipantsRepo;
     mSessionsRepo     = aSessionsRepo;
     mGroupsRepo       = aGroupsRepo;
 }
Exemplo n.º 21
0
 public AntiPlagiarismController(UserSolutionsRepo userSolutionsRepo, GroupsRepo groupsRepo)
 {
     this.userSolutionsRepo = userSolutionsRepo;
     this.groupsRepo        = groupsRepo;
 }
Exemplo n.º 22
0
 public void Setup()
 {
     repo = new GroupsRepo(Config);
 }
Exemplo n.º 23
0
 public GroupsController(GroupsRepo aGroupsRepo, SessionsRepo aSessionsRepo)
 {
     mGroupsRepo   = aGroupsRepo;
     mSessionsRepo = aSessionsRepo;
 }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
 public AntiPlagiarismController(ULearnDb db, UserSolutionsRepo userSolutionsRepo, GroupsRepo groupsRepo)
 {
     this.db = db;
     this.userSolutionsRepo = userSolutionsRepo;
     this.groupsRepo        = groupsRepo;
 }