Example #1
0
        public ActionResult UsersPartial(UserSearchQueryModel queryModel)
        {
            var userRoles = usersRepo.FilterUsers(queryModel, userManager);
            var model     = GetUserListModel(userRoles, queryModel.CourseId);

            return(PartialView("_UserListPartial", model));
        }
Example #2
0
        public ActionResult ListPartial(UserSearchQueryModel queryModel)
        {
            var userRoles = usersRepo.FilterUsers(queryModel);
            var model     = GetUserListModel(userRoles);

            return(PartialView("_UserListPartial", model));
        }
Example #3
0
 public ActionResult Users(UserSearchQueryModel queryModel)
 {
     if (string.IsNullOrEmpty(queryModel.CourseId))
     {
         return(RedirectToAction("CourseList"));
     }
     return(View(queryModel));
 }
Example #4
0
        /* Pass limit=0 to disable limiting */
        public List <UserRolesInfo> FilterUsers(UserSearchQueryModel query, int limit = 100)
        {
            var usersIdsByNamePrefix = string.IsNullOrEmpty(query.NamePrefix)
                                ? null
                                : GetUsersByNamePrefix(query.NamePrefix).Select(u => u.Id);

            return(FilterUsers(query, usersIdsByNamePrefix, limit));
        }
Example #5
0
        public async Task <ActionResult> ListPartial(UserSearchQueryModel queryModel)
        {
            var userRolesByEmail = User.IsSystemAdministrator() ? usersRepo.FilterUsersByEmail(queryModel) : null;
            var userRoles        = usersRepo.FilterUsers(queryModel);
            var model            = await GetUserListModel(userRolesByEmail.EmptyIfNull().Concat(userRoles).DistinctBy(r => r.UserId).ToList());

            return(PartialView("_UserListPartial", model));
        }
Example #6
0
        public List <UserRolesInfo> FilterUsersByEmail(UserSearchQueryModel query, int limit = 100)
        {
            if (string.IsNullOrEmpty(query.NamePrefix) || !query.NamePrefix.Contains('@'))
            {
                return(null);
            }
            var email           = query.NamePrefix;
            var usersIdsByEmail = db.Users.Where(u => u.Email == email).Select(u => u.Id);

            return(FilterUsers(query, usersIdsByEmail, limit));
        }
Example #7
0
        public List <UserRolesInfo> FilterUsers(UserSearchQueryModel query, UserManager <ApplicationUser> userManager)
        {
            var role = db.Roles.FirstOrDefault(r => r.Name == query.Role);

            return(db.Users
                   .FilterByName(query.NamePrefix)
                   .FilterByRole(role, userManager)
                   .FilterByUserIds(
                       userRolesRepo.GetListOfUsersWithCourseRole(query.CourseRole, query.CourseId),
                       userRolesRepo.GetListOfUsersByPrivilege(query.OnlyPrivileged, query.CourseId)
                       )
                   .GetUserRolesInfo(50, userManager));
        }
Example #8
0
        /* Pass limit=0 to disable limiting */
        public List <UserRolesInfo> FilterUsers(UserSearchQueryModel query, UserManager <ApplicationUser> userManager, int limit = 100)
        {
            var role  = db.Roles.FirstOrDefault(r => r.Name == query.Role);
            var users = db.Users.Where(u => !u.IsDeleted);

            if (!string.IsNullOrEmpty(query.NamePrefix))
            {
                var usersIds = GetUsersByNamePrefix(query.NamePrefix).Select(u => u.Id);
                users = users.Where(u => usersIds.Contains(u.Id));
            }
            return(users
                   .FilterByRole(role, userManager)
                   .FilterByUserIds(
                       userRolesRepo.GetListOfUsersWithCourseRole(query.CourseRole, query.CourseId, query.IncludeHighCourseRoles),
                       userRolesRepo.GetListOfUsersByPrivilege(query.OnlyPrivileged, query.CourseId)
                       )
                   .GetUserRolesInfo(limit, userManager));
        }
Example #9
0
        private List <UserRolesInfo> FilterUsers(UserSearchQueryModel query, [CanBeNull] IQueryable <string> userIds, int limit)
        {
            var roles = db.Roles.ToList();
            var role  = string.IsNullOrEmpty(query.Role) ? null : roles.FirstOrDefault(r => r.Name == query.Role);
            var users = db.Users.Include(u => u.Roles).Where(u => !u.IsDeleted);

            if (userIds != null)
            {
                users = users.Where(u => userIds.Contains(u.Id));
            }

            return(users
                   .FilterByRole(role)
                   .FilterByUserIds(
                       userRolesRepo.GetListOfUsersWithCourseRole(query.CourseRole, query.CourseId, query.IncludeHighCourseRoles),
                       userRolesRepo.GetListOfUsersByPrivilege(query.OnlyPrivileged, query.CourseId)
                       )
                   .GetUserRolesInfo(limit, roles));
        }
Example #10
0
 public ActionResult List(UserSearchQueryModel queryModel)
 {
     return(View(queryModel));
 }
        private StudentSubmissionsModel GetStudentSubmissionsModel(string courseId, Guid slideId, string name)
        {
            const int maxUsersCount = 30;

            var course = courseManager.GetCourse(courseId);
            var slide  = course.GetSlideById(slideId) as ExerciseSlide;

            if (slide == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }

            var canViewAllSubmissions = User.HasAccessFor(courseId, CourseRole.CourseAdmin) || User.HasCourseAccess(courseId, CourseAccessType.ViewAllStudentsSubmissions);
            var hasFilterByName       = !string.IsNullOrEmpty(name);
            /* By default show members of `my` groups, but if filter is enabled course admin's and users with special access can view any student's submissions */

            SubmissionsFilterOptions filterOptions;
            var slideIdInList = new List <Guid> {
                slideId
            };
            var visitedUserIds = visitsRepo.GetVisitsInPeriod(new VisitsFilterOptions {
                CourseId = courseId, SlidesIds = slideIdInList, PeriodStart = DateTime.MinValue, PeriodFinish = DateTime.MaxValue
            })
                                 .Select(v => v.UserId)
                                 .ToList();

            if (hasFilterByName && canViewAllSubmissions)
            {
                /* Get all members who has visits to this slide */
                filterOptions = new SubmissionsFilterOptions
                {
                    CourseId = courseId,
                    UserIds  = visitedUserIds,
                    SlideIds = slideIdInList,
                };
            }
            else
            {
                /* Get members of `my` groups */
                filterOptions          = ControllerUtils.GetFilterOptionsByGroup <SubmissionsFilterOptions>(groupsRepo, User, courseId, groupsIds: new List <string>());
                filterOptions.SlideIds = slideIdInList;
                /* Filter out only users with visits to this slide */
                filterOptions.UserIds = filterOptions.UserIds.Intersect(visitedUserIds).ToList();
            }

            if (hasFilterByName)
            {
                var userQueryModel = new UserSearchQueryModel {
                    NamePrefix = name, OnlyPrivileged = false
                };
                var filteredUsers = usersRepo.FilterUsers(userQueryModel, userManager, 0);
                filterOptions.UserIds = filterOptions.UserIds.Intersect(filteredUsers.Select(u => u.UserId)).ToList();
            }

            filterOptions.UserIds = filterOptions.UserIds.Take(maxUsersCount).ToList();

            var submissions       = userSolutionsRepo.GetAllSubmissionsByUsers(filterOptions);
            var submissionsByUser = submissions.GroupBy(s => s.UserId).ToDictionary(g => g.Key, g => g.ToList()).ToDefaultDictionary();

            var automaticCheckingScores = slideCheckingsRepo.GetAutomaticScoresForSlide(courseId, slideId, filterOptions.UserIds);
            var manualCheckingScores    = slideCheckingsRepo.GetManualScoresForSlide(courseId, slideId, filterOptions.UserIds);

            var userGroups = groupsRepo.GetUsersGroupsNamesAsStrings(courseId, filterOptions.UserIds, User).ToDefaultDictionary();

            return(new StudentSubmissionsModel
            {
                CourseId = courseId,
                Slide = slide,
                Users = usersRepo.GetUsersByIds(filterOptions.UserIds).ToDictionary(u => u.Id),
                SubmissionsByUser = submissionsByUser,
                AutomaticCheckingScores = automaticCheckingScores,
                ManualCheckingScores = manualCheckingScores,
                HasFilterByName = hasFilterByName,
                UserGroups = userGroups,
            });
        }