Beispiel #1
0
        public async Task <ActionResult> Profile(string userId)
        {
            var user = usersRepo.FindUserById(userId);

            if (user == null)
            {
                return(HttpNotFound());
            }

            if (!systemAccessesRepo.HasSystemAccess(User.Identity.GetUserId(), SystemAccessType.ViewAllProfiles) && !User.IsSystemAdministrator())
            {
                return(HttpNotFound());
            }

            var logins = await userManager.GetLoginsAsync(userId);

            var userCoursesIds = visitsRepo.GetUserCourses(user.Id).Select(s => s.ToLower());
            var userCourses    = courseManager.GetCourses().Where(c => userCoursesIds.Contains(c.Id.ToLower())).OrderBy(c => c.Title).ToList();

            var allCourses    = courseManager.GetCourses().ToDictionary(c => c.Id, c => c, StringComparer.InvariantCultureIgnoreCase);
            var tempCourseIds = tempCoursesRepo.GetTempCourses()
                                .Select(c => c.CourseId)
                                .Where(c => allCourses.ContainsKey(c))
                                .ToHashSet();
            var certificates = certificatesRepo.GetUserCertificates(user.Id).OrderBy(c => allCourses.GetOrDefault(c.Template.CourseId)?.Title ?? "<курс удалён>").ToList();

            var courseGroups         = userCourses.ToDictionary(c => c.Id, c => groupsRepo.GetUserGroupsNamesAsString(c.Id, userId, User, actual: true, archived: false, maxCount: 10));
            var courseArchivedGroups = userCourses.ToDictionary(c => c.Id, c => groupsRepo.GetUserGroupsNamesAsString(c.Id, userId, User, actual: false, archived: true, maxCount: 10));
            var coursesWithRoles     = (await userRolesRepo.GetUserRolesHistory(userId)).Select(x => x.CourseId.ToLower()).Distinct().ToList();
            var coursesWithAccess    = (await coursesRepo.GetUserAccessHistory(userId)).Select(x => x.CourseId.ToLower()).Distinct().ToList();

            return(View(new ProfileModel
            {
                User = user,
                Logins = logins,
                UserCourses = userCourses,
                CourseGroups = courseGroups,
                CourseArchivedGroups = courseArchivedGroups,
                Certificates = certificates,
                AllCourses = allCourses,
                TempCoursesIds = tempCourseIds,
                CoursesWithRoles = coursesWithRoles,
                CoursesWithAccess = coursesWithAccess
            }));
        }
        public ActionResult Settings()
        {
            var user = userManager.FindByName(User.Identity.Name);

            var mailTransport     = notificationsRepo.FindUsersNotificationTransport <MailNotificationTransport>(user.Id, includeDisabled: true);
            var telegramTransport = notificationsRepo.FindUsersNotificationTransport <TelegramNotificationTransport>(user.Id, includeDisabled: true);

            var courseIds    = visitsRepo.GetUserCourses(user.Id).Where(c => courseManager.FindCourse(c) != null).ToList();
            var courseTitles = courseIds.ToDictionary(c => c, c => courseManager.GetCourse(c).Title);
            var notificationTypesByCourse = courseIds.ToDictionary(c => c, c => notificationsRepo.GetNotificationTypes(User, c));
            var allNotificationTypes      = NotificationsRepo.GetAllNotificationTypes();

            var notificationTransportsSettings = courseIds.SelectMany(
                c => notificationsRepo.GetNotificationTransportsSettings(c, user.Id).Select(
                    kvp => Tuple.Create(Tuple.Create(c, kvp.Key.Item1, kvp.Key.Item2), kvp.Value.IsEnabled)
                    )
                ).ToDictionary(kvp => kvp.Item1, kvp => kvp.Item2);

            var selectedTransportIdStr = Request.QueryString["transportId"] ?? "";

            int.TryParse(selectedTransportIdStr, out int selectedTransportId);

            var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
            var getEnableLinkSignature = new Func <int, string>(transportId => GetNotificationTransportEnablingSignature(transportId, timestamp));

            return(PartialView(new NotificationSettingsViewModel
            {
                User = user,
                TelegramBotName = telegramBotName,

                MailTransport = mailTransport,
                TelegramTransport = telegramTransport,
                SelectedTransportId = selectedTransportId,

                CourseTitles = courseTitles,
                AllNotificationTypes = allNotificationTypes,
                NotificationTypesByCourse = notificationTypesByCourse,
                NotificationTransportsSettings = notificationTransportsSettings,

                EnableLinkTimestamp = timestamp,
                GetEnableLinkSignature = getEnableLinkSignature,
            }));
        }
Beispiel #3
0
        public ActionResult Info(string userName)
        {
            var user = db.Users.FirstOrDefault(u => u.Id == userName || u.UserName == userName);

            if (user == null)
            {
                return(RedirectToAction("List"));
            }

            var userCoursesIds = visitsRepo.GetUserCourses(user.Id);
            var userCourses    = courseManager.GetCourses().Where(c => userCoursesIds.Contains(c.Id)).ToList();

            var certificates = certificatesRepo.GetUserCertificates(user.Id);

            return(View(new UserInfoModel {
                User = user,
                GroupsNames = groupsRepo.GetUserGroupsNamesAsString(userCoursesIds.ToList(), user.Id, User, 10),
                Certificates = certificates,
                Courses = courseManager.GetCourses().ToDictionary(c => c.Id, c => c),
                UserCourses = userCourses,
            }));
        }