public string BuildName(MeetingDTOLtiBase <MeetingSessionDTO> meeting, ILtiParam param, string courseId) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (param == null) { throw new ArgumentNullException(nameof(param)); } if (courseId == null) { throw new ArgumentNullException(nameof(courseId)); } if (meeting.GetMeetingType() == LmsMeetingType.OfficeHours) { return(meeting.Name.TruncateIfMoreThen(60)); } int extraDataLength = param.context_label.Length + ": ".Length + " - ".Length + courseId.Length; if (extraDataLength > 52) { throw new WarningMessageException("Can't generate Adobe Connect meeting name. Course Label is too long."); } return(string.Format("{0}: {1} - {2}", param.context_label, meeting.Name.TruncateIfMoreThen(60 - extraDataLength), courseId)); }
public bool IsTeacher(ILtiParam param, ILmsLicense lmsCompany) { if (param == null) { throw new ArgumentNullException(nameof(param)); } if (lmsCompany == null) { throw new ArgumentNullException(nameof(lmsCompany)); } if (param.roles == null) { return(false); } // ACLTI-1132 Blackboard: IsTeacher Functionality if (lmsCompany.LmsProviderId == (int)LmsProviderEnum.Blackboard && !string.IsNullOrWhiteSpace(param.custom_role)) { var isTeacher = lmsCompany.RoleMappings .Where(x => x.IsTeacherRole) .Select(x => x.LmsRoleName) .Any(x => param.custom_role.Equals(x.Trim(), StringComparison.InvariantCultureIgnoreCase)); if (isTeacher) { return(isTeacher); } } //LTI PARAMs from canvas do not contain custom roles. if (lmsCompany.LmsProviderId == (int)LmsProviderEnum.Canvas) { char[] delimiterChars = { '/', ',', '.', ':' }; string roles = System.Web.HttpUtility.UrlDecode(param.roles); string[] lmsRolesFromParams = roles.Split(delimiterChars); return //defaultTeacherRoles ((!string.IsNullOrWhiteSpace(_teacherRoles) && _teacherRoles.Split(',') .Any(x => lmsRolesFromParams.Any(p => p.Equals(x.Trim(), StringComparison.InvariantCultureIgnoreCase)))) //licenseSpecificTeacherRoles || lmsCompany.RoleMappings.Where(x => x.IsTeacherRole).Select(x => x.LmsRoleName) .Any(x => lmsRolesFromParams.Any(p => p.Equals(x.Trim(), StringComparison.InvariantCultureIgnoreCase)))); } return //defaultTeacherRoles ((!string.IsNullOrWhiteSpace(_teacherRoles) && _teacherRoles.Split(',') .Any(x => param.roles.IndexOf(x.Trim(), StringComparison.InvariantCultureIgnoreCase) >= 0)) //licenseSpecificTeacherRoles || lmsCompany.RoleMappings.Where(x => x.IsTeacherRole).Select(x => x.LmsRoleName) .Any(x => param.roles.IndexOf(x.Trim(), StringComparison.InvariantCultureIgnoreCase) >= 0)); }
private async Task CreateAnnouncement( LmsMeetingType meetingType, ILmsLicense lmsCompany, ILtiParam param, MeetingDTOInput meetingDto) { if (!lmsCompany.ShowAnnouncements.GetValueOrDefault() || string.IsNullOrEmpty(param.context_title)) { return; } var announcementTitle = string.Format( "A new {0} room was created for course {1}", meetingNames[meetingType], param.context_title); string announcementMessage = GetAnnouncementMessage(meetingType, meetingDto, param.referer); switch (lmsCompany.LmsProviderId) { case (int)LmsProviderEnum.Canvas: var lmsUser = LmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value; var token = UsersSetup.IsTeacher(param, lmsCompany) && !string.IsNullOrEmpty(lmsUser.Token) ? lmsUser.Token : lmsCompany.AdminUser.Return(a => a.Token, string.Empty); await CanvasApi.CreateAnnouncement( lmsCompany.LmsDomain, token, param.course_id, announcementTitle, announcementMessage); break; case (int)LmsProviderEnum.Blackboard: BlackboardApi.CreateAnnouncement(param.course_id.ToString(), param.lms_user_id, lmsCompany.GetLMSSettings(Settings), announcementTitle, announcementMessage); break; case (int)LmsProviderEnum.AgilixBuzz: // string error; // this.dlapApi.CreateAnnouncement( // credentials, // param.course_id, // announcementTitle, // announcementMessage, // out error); break; } }
public string BuildName(MeetingDTOLtiBase <MeetingSessionDTO> meeting, ILtiParam param, string courseId) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (param == null) { throw new ArgumentNullException(nameof(param)); } if (courseId == null) { throw new ArgumentNullException(nameof(courseId)); } return(meeting.Name.TruncateIfMoreThen(60)); }
public string BuildName(MeetingDTOLtiBase <MeetingSessionDTO> meeting, ILtiParam param, string courseId) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (param == null) { throw new ArgumentNullException(nameof(param)); } if (courseId == null) { throw new ArgumentNullException(nameof(courseId)); } if (meeting.GetMeetingType() == LmsMeetingType.OfficeHours) { return(meeting.Name.TruncateIfMoreThen(60)); } return(string.Format("[{0}]: {1}", courseId, meeting.Name).TruncateIfMoreThen(60)); }
public LmsCourseSectionsServiceBase GetCourseSectionsService(int lmsProviderId, Dictionary <string, object> licenseSettings, ILtiParam param) { var lmsId = (LmsProviderEnum)lmsProviderId; switch (lmsId) { case LmsProviderEnum.Canvas: case LmsProviderEnum.Haiku: //case LmsProviderEnum.Sakai: var container = IoC.Resolve <IWindsorContainer>(); //bad hack - until parameterized methods are added to IoC and IServiceLocator return(container.Resolve <LmsCourseSectionsServiceBase>(lmsId + "SectionsService", new { licenseSettings, param })); } return(new LmsCourseSectionsServiceBase(new Dictionary <string, object>(), param)); }
public IMeetingSessionService GetMeetingSessionService(ILmsLicense lmsLicense, ILtiParam param) { var lmsCourseMeetingModel = IoC.Resolve <LmsCourseMeetingModel>(); var logger = IoC.Resolve <ILogger>(); ICalendarExportService calendarExportService = null; var lmsId = (LmsProviderEnum)lmsLicense.LmsProviderId; switch (lmsId) { // case LmsProviderEnum.Sakai: case LmsProviderEnum.Bridge: var container = IoC.Resolve <IWindsorContainer>(); //bad hack - until parameterized methods are added to IoC and IServiceLocator calendarExportService = IoC.Resolve <ICalendarExportService>(lmsId + "CalendarExportService"); return(container.Resolve <IMeetingSessionService>(lmsId + "SessionsService", new { license = lmsLicense, param, calendarExportService })); } return(new MeetingSessionService(lmsCourseMeetingModel, logger, calendarExportService, lmsLicense, GetCalendarEventService(lmsId, lmsLicense))); }
public override async Task <OperationResultWithData <List <LmsUserDTO> > > GetUsers(Dictionary <string, object> licenseSettings, string courseId, ILtiParam param = null) { var res = await api.GetCourseUsers(courseId, licenseSettings); var users = res.Select(result => new LmsUserDTO() { Email = result?.Email, Id = result?.Id.ToString(), LmsRole = result?.Roles?.FirstOrDefault(), Name = result?.Name, LtiId = result?.Id.ToString(), Login = result?.Uid }); return(users.ToList().ToSuccessResult()); }
public override async Task <OperationResultWithData <LmsUserDTO> > GetUser(Dictionary <string, object> licenseSettings, string lmsUserId, string courseId, ILtiParam extraData = null) { var result = await api.GetUserProfile(lmsUserId, licenseSettings); return(new LmsUserDTO { Email = result?.Email, Id = result?.Id.ToString(), LmsRole = result?.Roles?.FirstOrDefault(), Name = result?.Name, LtiId = result?.Id.ToString(), Login = result?.Uid }.ToSuccessResult()); }
public override async Task <OperationResultWithData <List <LmsUserDTO> > > GetUsers(Dictionary <string, object> licenseSettings, string courseId, ILtiParam extraData = null) { if (licenseSettings == null) { throw new ArgumentNullException(nameof(licenseSettings)); } var result = await _restApiClient.GetUsersForCourseAsync(licenseSettings, courseId); return(string.IsNullOrEmpty(result.error) ? result.users.ToSuccessResult() : OperationResultWithData <List <LmsUserDTO> > .Error(result.error)); }
public HaikuLmsCourseSectionsService(Dictionary <string, object> licenseSettings, ILtiParam param, IHaikuRestApiClient apiClient) : base(licenseSettings, param) { _haikuApi = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); }
public override async Task <OperationResultWithData <List <LmsUserDTO> > > GetUsers(Dictionary <string, object> licenseSettings, string courseId, ILtiParam param = null) { if (licenseSettings == null) { throw new ArgumentNullException(nameof(licenseSettings)); } string error = null; string[] userIds = null; WebserviceWrapper client = null; List <LmsUserDTO> users = _soapApi.GetUsersForCourse( licenseSettings, courseId, userIds, out error, ref client); if ((users.Count == 0) && error.Return( x => x.IndexOf("ACCESS DENIED", StringComparison.InvariantCultureIgnoreCase) >= 0, false)) { Logger.Warn("GetBlackBoardUsers.AccessDenied. " + error); if (client != null) { client.logout(); } // NOTE: set to null to re-create session. client = null; users = _soapApi.GetUsersForCourse( licenseSettings, courseId, userIds, out error, ref client); } // NOTE: always call logout if (client != null) { client.logout(); } return(!string.IsNullOrEmpty(error) ? OperationResultWithData <List <LmsUserDTO> > .Error(error) : users.ToSuccessResult()); }
public override async Task <OperationResultWithData <LmsUserDTO> > GetUser(Dictionary <string, object> licenseSettings, string lmsUserId, string courseId, ILtiParam extraData = null) { Guid guid; //return GetUsersOldStyle(lmsCompany, courseId, out error) // .FirstOrDefault(u => lmsUserId == (Guid.TryParse(lmsUserId, out guid) ? u.LtiId : u.Id)); var result = await GetUsers(licenseSettings, courseId, extraData); return(result.IsSuccess ? result.Data .FirstOrDefault(u => lmsUserId == (Guid.TryParse(lmsUserId, out guid) ? u.LtiId : u.Id)) .ToSuccessResult() : OperationResultWithData <LmsUserDTO> .Error(result.Message)); }
//private readonly LTI2Api _lti2Api; public SakaiLmsCourseSectionsService(Dictionary <string, object> licenseSettings, ILtiParam param) : //, LTI2Api lti2Api base(licenseSettings, param) { //_lti2Api = lti2Api ?? throw new ArgumentNullException(nameof(lti2Api)); }
public TelephonyProfile CreateProfile(ILmsLicense lmsCompany, ILtiParam param, string profileName, IAdobeConnectProxy acProxy) { if (lmsCompany == null) { throw new ArgumentNullException(nameof(lmsCompany)); } if (param == null) { throw new ArgumentNullException(nameof(param)); } if (string.IsNullOrWhiteSpace(profileName)) { throw new ArgumentException("Non-empty value expected", nameof(profileName)); } if (acProxy == null) { throw new ArgumentNullException(nameof(acProxy)); } try { var profiles = acProxy.TelephonyProviderList(null); var meetingOne = profiles.Values.FirstOrDefault(x => x.ClassName == ClassName); string providerId = meetingOne.ProviderId; if (meetingOne.ProviderStatus != "enabled") { throw new InvalidOperationException("MeetingOne provider is not enabled"); } var access = new AccessDetails { UserName = lmsCompany.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.UserName), SecretHashKey = lmsCompany.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.SecretHashKey), OwningAccountNumber = lmsCompany.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.OwningAccountNumber), }; var room = new RoomDto { Host = new Host { Email = param.lis_person_contact_email_primary, FirstName = param.PersonNameGiven, LastName = param.PersonNameFamily, MailingAddress = param.lis_person_contact_email_primary, }, RoomSettings = new RoomSettings { DialoutEnabled = true, AllowDomesticDialouts = true, AllowInternationalDialouts = true, }, }; // TODO: DI RoomDto result = null; try { var client = new MeetingOneClient(_baseAddress, _logger); result = client.CreateRoom(access, room); } catch (Exception ex) { _logger.Error("MeetingOneClient.CreateRoomAsync failed.", ex); return(null); } var acProfile = new TelephonyProfileUpdateItem { ProfileName = profileName, // ProfileStatus = "enabled", ProviderId = providerId, ProviderFields = new MeetingOneProviderFields { ConferenceId = result.Number, HostPin = result.HostPIN, }, }; TelephonyProfileInfoResult createdProfile = acProxy.TelephonyProfileUpdate(acProfile, false); return(createdProfile.TelephonyProfile); } catch (Exception ex) { _logger.Error($"CreateProfileAsync error. CompanyLicenseId: {lmsCompany.Id}.", ex); throw; } }