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, })); }
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, })); }