Ejemplo n.º 1
0
        public async Task <ActionResult> Courses(string courseId = null, string courseTitle = null)
        {
            var isSystemAdministrator = User.IsSystemAdministrator();
            var userId  = User.Identity.GetUserId();
            var courses = courseManager.GetCourses();

            // Неопубликованные курсы не покажем тем, кто не имеет роли в них.
            if (!isSystemAdministrator)
            {
                var visibleCourses = unitsRepo.GetVisibleCourses();
                var coursesInWhichUserHasAnyRole = userRolesRepo.GetCoursesWhereUserIsInRole(userId, CourseRole.Tester);
                var coursesWhereIAmStudent       = groupsRepo.GetUserGroups(userId)
                                                   .Select(g => g.CourseId)
                                                   .Distinct(StringComparer.OrdinalIgnoreCase)
                                                   .Where(c => visibleCourses.Contains(c)).ToList();
                courses = courses.Where(c => coursesInWhichUserHasAnyRole.Contains(c.Id, StringComparer.OrdinalIgnoreCase) ||
                                        coursesWhereIAmStudent.Contains(c.Id, StringComparer.OrdinalIgnoreCase));
            }

            var incorrectChars = new string(CourseManager.GetInvalidCharacters().OrderBy(c => c).Where(c => 32 <= c).ToArray());

            if (isSystemAdministrator)
            {
                courses = courses.OrderBy(course => course.Id, StringComparer.InvariantCultureIgnoreCase);
            }
            else
            {
                courses = courses.OrderBy(course => course.Title, StringComparer.InvariantCultureIgnoreCase);
            }

            var tempCourses = tempCoursesRepo.GetTempCourses().Select(c => c.CourseId).ToHashSet();
            var model       = new CourseListViewModel
            {
                Courses = courses
                          .Select(course => new CourseViewModel
                {
                    Id            = course.Id,
                    Title         = course.Title,
                    LastWriteTime = courseManager.GetLastWriteTime(course.Id),
                    IsTemp        = tempCourses.Contains(course.Id)
                })
                          .ToList(),
                LastTryCourseId    = courseId,
                LastTryCourseTitle = courseTitle,
                InvalidCharacters  = incorrectChars
            };

            return(View(model));
        }