public async Task <OperationResult> DeleteSlot(int slotId, LmsUser lmsUser, string message = null) { var slot = _slotModel.GetOneById(slotId).Value; if (slot == null) { return(OperationResult.Error("Slot not found")); } if (slot.Status == (int)OfficeHoursSlotStatus.Cancelled) { return(OperationResult.Error("Slot was deleted by teacher. Please refresh page")); } if (slot.User.Id != lmsUser.Id && slot.Availability.User.Id != lmsUser.Id) { return(OperationResult.Error("You don't have permissions to delete slot")); } //store availability to check who cancels //var meeting = slot.Availability.Meeting; slot.Availability.Slots.Remove(slot); _slotModel.RegisterDelete(slot, true); if (!string.IsNullOrEmpty(message)) { //var details = await _meetingService.GetMeetingApiDetails(meeting); //await _notificationService.SendOHCancellationEmail(slot.Start, details.Topic, message, slot.RequesterName); } return(OperationResult.Success()); }
public List <LmsUser> GetUnassignedUsers() { List <LmsUser> users = new List <LmsUser>(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("LMSUserSelectUnassigned", cn); //Name of Eric's sproc--AdministratorDashboard cmd.CommandType = CommandType.StoredProcedure; cn.Open(); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { var user = new LmsUser(); user.UserID = (int)dr["UserID"]; //user.Id = dr["ID"].ToString(); user.FirstName = dr["FirstName"].ToString(); user.LastName = dr["LastName"].ToString(); user.Email = dr["Email"].ToString(); user.SuggestedRole = dr["SuggestedRole"].ToString(); if (dr["GradeLevelID"] != DBNull.Value) { user.GradeLevelID = (byte)dr["GradeLevelID"]; } users.Add(user); } } } return(users); }
public ActionResult EditUser(LmsUser user) { var db = new SWC_LMSEntities(); db.UpdateUser(user.LastName, user.FirstName, user.SuggestedRole, user.UserId); return RedirectToAction("AdminDashboard"); }
public List <LmsUser> GetStudents(int UserID) { List <LmsUser> students = new List <LmsUser>(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("UserParentDashboard", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@UserID", UserID); cn.Open(); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { var student = new LmsUser(); student.UserID = (int)dr["UserID"]; student.FirstName = dr["FirstName"].ToString(); student.LastName = dr["LastName"].ToString(); students.Add(student); } } } return(students); }
public LmsUser GetUnassignedUserDetails(int UserID) { LmsUser user = new LmsUser(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("UserViewDetails", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@UserID", UserID); cn.Open(); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { user.UserID = (int)dr["UserID"]; user.ID = dr["ID"].ToString(); user.FirstName = dr["FirstName"].ToString(); user.LastName = dr["LastName"].ToString(); user.Email = dr["Email"].ToString(); user.SuggestedRole = dr["SuggestedRole"].ToString(); if (dr["GradeLevelID"] != DBNull.Value) { user.GradeLevelID = (byte)dr["GradeLevelID"]; } } } } return(user); }
public IFutureValue <LmsCourseMeeting> GetOneByUserAndType(int companyLmsId, string userId, LmsMeetingType type) { if (companyLmsId <= 0) { throw new ArgumentOutOfRangeException(nameof(companyLmsId)); } if (string.IsNullOrWhiteSpace(userId)) { throw new ArgumentException("userId can not be empty", nameof(userId)); } if (type <= 0) { throw new ArgumentOutOfRangeException(nameof(type)); } int typeValue = (int)type; LmsCourseMeeting x = null; OfficeHours oh = null; LmsUser u = null; var defaultQuery = new DefaultQueryOver <LmsCourseMeeting, int>() .GetQueryOver(() => x) .JoinAlias(() => x.OfficeHours, () => oh, JoinType.InnerJoin) .JoinAlias(() => oh.LmsUser, () => u, JoinType.InnerJoin) .Where(() => x.LmsCompanyId == companyLmsId && x.LmsMeetingType == typeValue && (x.OfficeHours != null && u.UserId == userId)) .Take(1); return(this.Repository.FindOne(defaultQuery)); }
public LmsUser GetByAspNetId(string aspNetId) { LmsUser user = new LmsUser(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("ASPNetIDGet", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@AspNetID", aspNetId); cn.Open(); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { user.UserID = (int)dr["UserID"]; user.FirstName = dr["FirstName"].ToString(); user.LastName = dr["LastName"].ToString(); user.Email = dr["Email"].ToString(); user.SuggestedRole = dr["SuggestedRole"].ToString(); //if (dr["GradeLevel"] != DBNull.Value) // user.GradeLevelID = (byte) dr["GradeLevelID"]; } } } return(user); }
public ActionResult EditUser(LmsUser user) { var db = new SWC_LMSEntities(); db.UpdateUser(user.LastName, user.FirstName, user.SuggestedRole, user.UserId); return(RedirectToAction("AdminDashboard")); }
public IEnumerable <OfficeHoursTeacherAvailability> GetAvailabilities(int ohId) { OfficeHoursTeacherAvailability x = null; OfficeHours oh = null; LmsUser u = null; var defaultQuery = new DefaultQueryOver <OfficeHoursTeacherAvailability, int>() .GetQueryOver(() => x) .JoinAlias(() => x.Meeting, () => oh, JoinType.InnerJoin) .JoinAlias(() => x.User, () => u, JoinType.InnerJoin) .Where(() => x.Meeting.Id == ohId); return(Repository.FindAll(defaultQuery)); }
public ActionResult StudentDashboard(int id) { var db = new SWC_LMSEntities(); var student = new LmsUser(); var user = db.GetUserById(id); foreach (var x in user) { student.FirstName = x.FirstName; student.LastName = x.LastName; student.UserId = x.UserId; } return View(student); }
private IEnumerable <LmsUser> UpdateDbUsers(List <LmsUserDTO> lmsUserDtos, ILmsLicense lmsCompany, IEnumerable <LmsUser> existedDbUsers, IAdobeConnectProxy provider) { var newUsers = new List <LmsUser>(); var company = lmsCompanyModel.GetOneById(lmsCompany.Id).Value; foreach (var lmsUserDto in lmsUserDtos.Where(x => x.Email != null || x.Login != null || x.Name != null)) { var dbUser = existedDbUsers.FirstOrDefault(u => (lmsUserDto.LtiId != null && u.UserId == lmsUserDto.LtiId) || u.UserId == lmsUserDto.Id); if (dbUser == null) { string login = lmsUserDto.GetLogin(); Principal principal = null; try { principal = acUserService.GetOrCreatePrincipal(provider, login, lmsUserDto.Email, lmsUserDto.GetFirstName(), lmsUserDto.GetLastName(), lmsCompany); } catch (Exception ex) { logger.Error("SyncUsers - GetOrCreatePrincipal", ex); continue; } var loginLength = login.Length > 50 ? 50 : login.Length; dbUser = new LmsUser { LmsCompany = company, Username = login.Substring(0, loginLength), // hack: to escape GenericADOException when name>50 //todo: review lmsUserDto.GetLogin() and lmsUser.Username usage UserId = lmsUserDto.LtiId ?? lmsUserDto.Id, PrincipalId = principal?.PrincipalId, }; newUsers.Add(dbUser); logger.InfoFormat( "New user to DB: lmsCompanyId={0}, UserId={1}, Username={2}, Name={3}, Email={4}", lmsCompany.Id, dbUser.UserId, login, lmsUserDto.Name, lmsUserDto.Email); lmsUserModel.RegisterSave(dbUser); } dbUser.Name = lmsUserDto.Name; dbUser.Email = lmsUserDto.Email; dbUser.UserIdExtended = lmsUserDto.LtiId != null ? lmsUserDto.Id : null; // todo: save lmsUserDto.id to dbUser.UserId } return(newUsers); }
public IEnumerable <OfficeHoursSlot> GetSlotsForDate(DateTime start, DateTime end, int ohId) { OfficeHoursTeacherAvailability availability = null; OfficeHoursSlot x = null; OfficeHours oh = null; LmsUser u = null; var defaultQuery = new DefaultQueryOver <OfficeHoursSlot, int>() .GetQueryOver(() => x) .JoinAlias(() => x.User, () => u, JoinType.InnerJoin) .JoinAlias(() => x.Availability, () => availability, JoinType.InnerJoin) .JoinAlias(() => availability.Meeting, () => oh, JoinType.InnerJoin) .Where(() => x.Start >= start && x.Start < end && oh.Id == ohId); return(Repository.FindAll(defaultQuery)); }
public OfficeHoursSlot GetSlotForDate(DateTime start, int ohId) { OfficeHoursTeacherAvailability availability = null; OfficeHoursSlot x = null; OfficeHours oh = null; LmsUser u = null; var defaultQuery = new DefaultQueryOver <OfficeHoursSlot, int>() .GetQueryOver(() => x) .JoinAlias(() => x.User, () => u, JoinType.InnerJoin) .JoinAlias(() => x.Availability, () => availability, JoinType.InnerJoin) .JoinAlias(() => availability.Meeting, () => oh, JoinType.InnerJoin) .Where(() => x.Start == start && oh.Id == ohId); return(Repository.FindOne(defaultQuery).Value); }
private static OfficeHoursTeacherAvailability ConvertFromDto(OfficeHours oh, LmsUser lmsUser, OfficeHoursTeacherAvailabilityDto availabilityDto) { var entity = new OfficeHoursTeacherAvailability { User = lmsUser, Duration = availabilityDto.Duration, Intervals = string.Join(",", availabilityDto.Intervals.Select(x => $"{x.Start}-{x.End}")), DaysOfWeek = string.Join(",", availabilityDto.DaysOfWeek), PeriodStart = availabilityDto.PeriodStart, PeriodEnd = availabilityDto.PeriodEnd, Meeting = oh }; return(entity); }
public Response Create(LmsUser user) // Lis 6/28 { var response = new Response(); try { _lmsUserRepository.Create(user); response.Success = true; } catch (Exception ex) { response.Message = ex.Message; } return(response); }
public ActionResult StudentDashboard(int id) { var db = new SWC_LMSEntities(); var student = new LmsUser(); var user = db.GetUserById(id); foreach (var x in user) { student.FirstName = x.FirstName; student.LastName = x.LastName; student.UserId = x.UserId; } return(View(student)); }
public List <LmsUser> UserSearch(AdminUserSearch searchName) { List <LmsUser> users = new List <LmsUser>(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("UserSearch", cn); cmd.CommandType = CommandType.StoredProcedure; if (!string.IsNullOrEmpty(searchName.FirstName)) { cmd.Parameters.Add(new SqlParameter("@FirstNamePartial", searchName.FirstName)); } if (!string.IsNullOrEmpty(searchName.LastName)) { cmd.Parameters.Add(new SqlParameter("@LastNamePartial", searchName.LastName)); } if (!string.IsNullOrEmpty(searchName.Email)) { cmd.Parameters.Add(new SqlParameter("@EmailPartial", searchName.Email)); } if (!string.IsNullOrEmpty(searchName.SelectedRoleID)) { cmd.Parameters.Add(new SqlParameter("@RoleID", searchName.SelectedRoleID)); } cn.Open(); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) { var user = new LmsUser(); user.UserID = (int)dr["UserID"]; user.FirstName = dr["FirstName"].ToString(); user.LastName = dr["LastName"].ToString(); user.Email = dr["Email"].ToString(); users.Add(user); } } } return(users); }
private bool CanJoin( LmsUser lmsUser, IEnumerable <MeetingPermissionInfo> permission) { // this method is called after the user has opened the application through LtiController, so there should already be Principal found and saved for the user. if (string.IsNullOrWhiteSpace(lmsUser.PrincipalId)) { throw new InvalidOperationException(string.Format("lmsUser.PrincipalId is empty. LmsUserID: {0}", lmsUser.Id)); } return((permission != null) && permission .Where(x => x.PrincipalId == lmsUser.PrincipalId) .Select(x => x.PermissionId) .Intersect(new List <MeetingPermissionId> { MeetingPermissionId.host, MeetingPermissionId.mini_host, MeetingPermissionId.view }) .Any()); }
public LmsUser UpdateUserDetails(LMSUserUpdateRequest user) { LmsUser user1 = new LmsUser(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("UserUpdateDetails", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@UserID", user.UserID); cmd.Parameters.AddWithValue("@ID", user.ID); cmd.Parameters.AddWithValue("@FirstName", user.FirstName); cmd.Parameters.AddWithValue("@LastName", user.LastName); cmd.Parameters.AddWithValue("@GradeLevelID", user.GradeLevelID); cn.Open(); cmd.ExecuteNonQuery(); } return(user1); }
public static LmsUser GetLmsUserById(int id) { using (var db = new SWC_LMSEntities()) { LmsUser newUser = new LmsUser(); var user = db.GetUserById(id); foreach (var x in user) { newUser.UserId = x.UserId; newUser.FirstName = x.FirstName; newUser.LastName = x.LastName; newUser.GradeLevelId = x.GradeLevelId; newUser.SuggestedRole = x.SuggestedRole; newUser.Id = x.Id; newUser.Email = x.Email; } return(newUser); } }
public static LmsUser GetLmsUserById(int id) { using (var db = new SWC_LMSEntities()) { LmsUser newUser = new LmsUser(); var user = db.GetUserById(id); foreach (var x in user) { newUser.UserId = x.UserId; newUser.FirstName = x.FirstName; newUser.LastName = x.LastName; newUser.GradeLevelId = x.GradeLevelId; newUser.SuggestedRole = x.SuggestedRole; newUser.Id = x.Id; newUser.Email = x.Email; } return newUser; } }
public void Create(LmsUser user) { user.ID = Guid.NewGuid().ToString(); using (var cn = new SqlConnection(Settings.GetConnectionString())) { var cmd = new SqlCommand("LmsUserAdd", cn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@Id", user.ID); cmd.Parameters.AddWithValue("@Email", user.Email); cmd.Parameters.AddWithValue("@FirstName", user.FirstName); cmd.Parameters.AddWithValue("@LastName", user.LastName); cmd.Parameters.AddWithValue("@SuggestedRole", user.SuggestedRole); cmd.Parameters.AddWithValue("@GradeLevelID", user.GradeLevelID); cmd.Parameters.AddWithValue("@UserId", user.UserID).Direction = ParameterDirection.Output; cn.Open(); cmd.ExecuteNonQuery(); int ans = (int)cmd.Parameters["@UserId"].Value; user.UserID = ans; } }
public async Task <ActionResult> Register(RegisterViewModel RegisterViewModel) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = RegisterViewModel.Email, Email = RegisterViewModel.Email }; var result = await UserManager.CreateAsync(user, RegisterViewModel.Password); if (result.Succeeded) { var lmsUser = new LmsUser(); lmsUser.Email = RegisterViewModel.Email; lmsUser.FirstName = RegisterViewModel.FirstName; lmsUser.LastName = RegisterViewModel.LastName; lmsUser.ID = user.Id; lmsUser.GradeLevelID = RegisterViewModel.GradeLevelID; lmsUser.SuggestedRole = RegisterViewModel.SuggestedRole; _lmsUserManager.Create(lmsUser); await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return(RedirectToAction("NotApprovedYet", "Home")); } AddErrors(result); } // If we got this far, something failed, redisplay form //return RedirectToAction("Home",RegisterViewModel); return(View()); }
public virtual async Task <ActionResult> ImsLogin(LtiParamDTO param) { try { Request.CheckForRequiredLtiParameters(); LmsCompany lmsCompany = lmsCompanyModel.GetOneByConsumerKey(param.oauth_consumer_key) .Value; if (lmsCompany != null) { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(LanguageModel.GetById(lmsCompany.LanguageId).TwoLetterCode); } else { Logger.ErrorFormat("Adobe Connect integration is not set up. param:{0}.", JsonSerializer.JsonSerialize(param)); throw new LtiException(Resources.Messages.LtiValidationNoSetup); } if (!lmsCompany.IsActive) { Logger.ErrorFormat("LMS license is not active. Request's lms_domain:{0}. oauth_consumer_key:{1}.", param.lms_domain, param.oauth_consumer_key); throw new LtiException(Resources.Messages.LtiValidationInactiveLmsLicense); } if (!BltiProviderHelper.VerifyBltiRequest(lmsCompany, Request, () => true)) { Logger.ErrorFormat("Invalid LTI request. Invalid signature. oauth_consumer_key:{0}.", param.oauth_consumer_key); throw new LtiException(Resources.Messages.LtiValidationWrongSignature); } ValidateLtiVersion(param); ValidateIntegrationRequiredParameters(lmsCompany, param); var contextRoles = GetContextRoles(param.roles); if (!contextRoles.Any()) { throw new LtiException(Resources.Messages.LtiValidationNoContextRole); } var adobeConnectProvider = this.GetAdminProvider(lmsCompany); // TRICK: if LMS don't return user login - try to call lms' API to fetch user's info using user's LMS-ID. param.ext_user_username = await usersSetup.GetParamLogin(param, lmsCompany); // NOTE: is saved in session! var lmsUser = lmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value; LmsUserSession session = this.SaveSession(lmsCompany, param, lmsUser); var key = session.Id.ToString(); if (!string.IsNullOrWhiteSpace(param.lis_outcome_service_url) && !string.IsNullOrWhiteSpace(param.lis_result_sourcedid)) { return(View("~/Views/Lti/Outcomes.cshtml", new OutcomeModel { LmsProviderName = key })); } //this.meetingSetup.SetupFolders(lmsCompany, adobeConnectProvider); Principal acPrincipal = null; acPrincipal = acUserService.GetOrCreatePrincipal( adobeConnectProvider, param.lms_user_login, param.lis_person_contact_email_primary, param.PersonNameGiven, param.PersonNameFamily, lmsCompany); if (lmsUser == null) { lmsUser = new LmsUser { LmsCompany = lmsCompany, UserId = param.lms_user_id, Username = param.GetUserNameOrEmail(), PrincipalId = acPrincipal?.PrincipalId, }; this.lmsUserModel.RegisterSave(lmsUser); // TRICK: save lmsUser to session SaveSessionUser(session, lmsUser); } if (acPrincipal != null && !acPrincipal.PrincipalId.Equals(lmsUser.PrincipalId)) { lmsUser.PrincipalId = acPrincipal.PrincipalId; this.lmsUserModel.RegisterSave(lmsUser); } if (acPrincipal == null) { Logger.ErrorFormat( "[LoginWithProvider] Unable to create AC account. LmsCompany ID: {0}. LmsUserID: {1}. lms_user_login: {2}.", lmsCompany.Id, lmsUser.Id, param.lms_user_login); throw new Core.WarningMessageException(Resources.Messages.LtiNoAcAccount); } return(await RedirectToExtJs(session, lmsUser)); } catch (LtiException ex) { Logger.Error("Lti exception", ex); ViewBag.Message = $"Invalid LTI request. {ex.Message}"; if (!string.IsNullOrEmpty(param.launch_presentation_return_url)) { ViewBag.ReturnUrl = param.launch_presentation_return_url; } return(View("~/Views/Lti/LtiError.cshtml")); } catch (Core.WarningMessageException ex) { Logger.WarnFormat("[WarningMessageException] param:{0}.", JsonSerializer.JsonSerialize(param)); this.ViewBag.Message = ex.Message; return(this.View("~/Views/Lti/LtiError.cshtml")); } catch (Exception ex) { Logger.ErrorFormat(ex, "LoginWithProvider exception. oauth_consumer_key:{0}.", param.oauth_consumer_key); this.ViewBag.DebugError = IsDebug ? (ex.Message + ex.StackTrace) : string.Empty; return(this.View("~/Views/Lti/LtiError.cshtml")); } }
public LmsUser GetByAspNetId(string aspNetId) { LmsUser user = new LmsUser(); return(user); }
public void Create(LmsUser user) { LmsUser user3 = new LmsUser(); }
public LmsUser GetUnassignedUserDetails(int UserID) { LmsUser user = new LmsUser(); return(user); }
public LmsUser UpdateUserDetails(LmsUser user) { LmsUser user1 = new LmsUser(); return(user1); }
public async Task <OperationResultWithData <OfficeHoursTeacherAvailabilityDto> > AddAvailability(OfficeHours oh, LmsUser lmsUser, OfficeHoursTeacherAvailabilityDto availabilityDto) { var overlappingSlots = await ValidateSlotsRange(oh, lmsUser.Id, availabilityDto); if (overlappingSlots.Any()) { return(OperationResultWithData <OfficeHoursTeacherAvailabilityDto> .Error( "The range of dates overlaps another date range. Please choose another date range.")); } var entity = ConvertFromDto(oh, lmsUser, availabilityDto); _availabilityModel.RegisterSave(entity, true); return(ConvertToDto(entity).ToSuccessResult()); }
public async Task <OperationResultWithData <IEnumerable <SlotDto> > > AddSlots(int ohId, LmsUser lmsUser, IEnumerable <CreateSlotDto> dtos, OfficeHoursSlotStatus status = OfficeHoursSlotStatus.Booked) { var availabilities = _availabilityModel.GetAvailabilities(ohId); //await _context.OhTeacherAvailabilities.Include(x => x.Meeting).Where(x => x.Meeting.Id == meetingId).ToListAsync();// &&x.lmsUserId == lmsUserId var entities = new List <OfficeHoursSlot>(); foreach (var dto in dtos) { //validate interval and non-busy var availability = availabilities.FirstOrDefault(x => { var availabilityDto = ConvertToDto(x); var slots = GetSlotsForAvailability(availabilityDto, dto.Start, dto.End, lmsUser.Id, x); return(slots.Any(s => s.Start == dto.Start && s.Status == (int)OfficeHoursSlotStatus.Free)); }); if (availability == null) { return(OperationResultWithData <IEnumerable <SlotDto> > .Error( "Time is already booked or out of any availability range. Please refresh page.")); } var entity = new OfficeHoursSlot { Availability = availability, //RequesterName = requesterName, User = lmsUser, Start = dto.Start, End = dto.End, Subject = dto.Subject, Questions = dto.Questions, Status = (int)status }; _slotModel.RegisterSave(entity, false); entities.Add(entity); } _slotModel.Flush(); return(entities.Select(x => ConvertToDto(x, lmsUser.Id)).ToSuccessResult()); }
private void PopulateLicenseRooms( string licenseScoId, string licenseName, bool canAddSeminars, ref List <SeminarLicenseDto> licenseDtos, IAdobeConnectProxy acProxy, IEnumerable <LmsCourseMeeting> seminarRecords, LmsUser lmsUser, LtiParamDTO param, LmsCompany lmsCompany //,TimeZoneInfo timeZone ) { var seminars = GetSeminars(licenseScoId, acProxy); var rooms = new List <SeminarDto>(); foreach (ScoContent seminar in seminars) { LmsCourseMeeting meetingRecord = seminarRecords.FirstOrDefault(x => x.ScoId == seminar.ScoId); if (meetingRecord == null) { continue; } var sessions = GetSeminarSessions(seminar.ScoId, acProxy); var room = GetDtoByScoInfo(acProxy, lmsUser, param, lmsCompany, seminar, meetingRecord, /* timeZone,*/ canAddSeminars); if (canAddSeminars || room.CanJoin) //don't show user-seminars to those who is not participating { room.Id = meetingRecord.Id; // TRICK: within LTI we use RECORD ID - not original SCO-ID!! room.Sessions = sessions.Select(x => new Esynctraining.AdobeConnect.Api.Seminar.Dto.SeminarSessionDto { Id = x.ScoId, Name = x.Name, StartTimeStamp = (long)x.BeginDate.ConvertToUnixTimestamp(), // + (long) GetTimezoneShift(timeZone, x.BeginDate), Duration = (x.EndDate - x.BeginDate).ToString(@"h\:mm"), Summary = x.Description, AcRoomUrl = x.UrlPath.Trim('/'), IsEditable = room.IsEditable, // TRICK: within LTI we use RECORD ID - not original SCO-ID!! SeminarRoomId = meetingRecord.Id.ToString(), }).ToArray(); rooms.Add(room); } } if (canAddSeminars || rooms.Any()) { var dto = new SeminarLicenseDto { Id = licenseScoId, Name = licenseName, Rooms = rooms.ToArray(), CanAddSeminars = canAddSeminars }; licenseDtos.Add(dto); } }
private SeminarDto GetDtoByScoInfo( IAdobeConnectProxy provider, LmsUser lmsUser, LtiParamDTO param, LmsCompany lmsCompany, ScoContent seminar, LmsCourseMeeting seminarMeeting, //TimeZoneInfo timeZone, bool isEditable, StringBuilder trace = null) { var psw = Stopwatch.StartNew(); bool meetingExistsInAC; IEnumerable <MeetingPermissionInfo> permission = provider.GetMeetingPermissions(seminar.ScoId, new List <string> { "public-access", lmsUser.PrincipalId }, out meetingExistsInAC).Values; psw.Stop(); if (trace != null) { trace.AppendFormat("\t GetMeetings - AC GetMeetingPermissions time: {0}. MeetingId: {1}\r\n", psw.Elapsed.ToString(), seminar.ScoId); } if (!meetingExistsInAC) { return(null); } var canJoin = this.CanJoin(lmsUser, permission) || GetGuestAuditRoleMappings(lmsCompany, param).Any() || (lmsCompany.UseSynchronizedUsers && seminarMeeting.EnableDynamicProvisioning); MeetingPermissionInfo permissionInfo = permission != null ? permission.FirstOrDefault(x => x.PrincipalId == "public-access" && x.PermissionId != MeetingPermissionId.none) : null; var sw = Stopwatch.StartNew(); sw.Stop(); if (trace != null) { trace.AppendFormat("\t GetMeetings - DB GetByCompanyAndScoId time: {0}. MeetingId: {1}\r\n", sw.Elapsed.ToString(), seminar.ScoId); } var scoInfo = provider.GetScoInfo(seminar.ScoId); var ret = new SeminarDto { Id = long.Parse(seminar.ScoId), AcRoomUrl = seminar.UrlPath.Trim("/".ToCharArray()), Name = seminar.Name, Summary = seminar.Description, Template = seminar.SourceScoId, StartTimeStamp = (long)seminar.BeginDate.ConvertToUnixTimestamp(), // + (long)GetTimezoneShift(timeZone, seminar.BeginDate), Duration = (seminar.EndDate - seminar.BeginDate).ToString(@"h\:mm"), // TRICK: .Replace("-", "_") for "view_hidded" on client-side AccessLevel = permissionInfo != null?permissionInfo.PermissionId.ToString().Replace("-", "_") : "remove", CanJoin = canJoin, IsEditable = isEditable, Type = (int)LmsMeetingType.Seminar, OfficeHours = null, Reused = false, AudioProfileId = scoInfo.ScoInfo.TelephonyProfile, // TODO: ???seminar.AudioProfileId SeminarLicenseId = seminar.FolderId.ToString(), }; return(ret); }
public IEnumerable <SeminarLicenseDto> GetLicensesWithContent(IAdobeConnectProxy acProxy, IEnumerable <LmsCourseMeeting> seminarRecords, LmsUser lmsUser, LtiParamDTO param, LmsCompany lmsCompany //,TimeZoneInfo timeZone ) { if (acProxy == null) { throw new ArgumentNullException(nameof(acProxy)); } if (seminarRecords == null) { throw new ArgumentNullException(nameof(seminarRecords)); } if (lmsUser == null) { throw new ArgumentNullException(nameof(lmsUser)); } if (param == null) { throw new ArgumentNullException(nameof(param)); } if (lmsCompany == null) { throw new ArgumentNullException(nameof(lmsCompany)); } //if (timeZone == null) // throw new ArgumentNullException(nameof(timeZone)); var licenseDtos = new List <SeminarLicenseDto>(); bool canAddSeminars = UsersSetup.IsTeacher(param, lmsCompany); var sharedLicenses = GetSharedSeminarLicenses(acProxy).Where(x => !x.IsExpired); foreach (var license in sharedLicenses) { PopulateLicenseRooms( license.ScoId, license.Name, canAddSeminars, ref licenseDtos, acProxy, seminarRecords, lmsUser, param, lmsCompany //,timeZone ); } try { var userLicenses = GetUserSeminarLicenses(acProxy);//.Where(x => x.PrincipalId == lmsUser.PrincipalId); foreach (var license in userLicenses) { PopulateLicenseRooms( license.ScoId, license.Name, canAddSeminars && license.PrincipalId == lmsUser.PrincipalId, ref licenseDtos, acProxy, seminarRecords, lmsUser, param, lmsCompany //,timeZone ); } } catch (Exception ex) { _logger.Error("[GetUserSeminarLicenses] error", ex); } return(licenseDtos); }