Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
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;
            }
        }
Пример #4
0
        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));
        }
Пример #5
0
        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));
        }
Пример #6
0
        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));
        }
Пример #7
0
        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)));
        }
Пример #8
0
        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());
        }
Пример #9
0
        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());
        }
Пример #10
0
        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));
        }
Пример #11
0
 public HaikuLmsCourseSectionsService(Dictionary <string, object> licenseSettings, ILtiParam param, IHaikuRestApiClient apiClient) :
     base(licenseSettings, param)
 {
     _haikuApi = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
 }
Пример #12
0
        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());
        }
Пример #13
0
        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));
        }
Пример #14
0
        //private readonly LTI2Api _lti2Api;

        public SakaiLmsCourseSectionsService(Dictionary <string, object> licenseSettings, ILtiParam param) : //, LTI2Api lti2Api
            base(licenseSettings, param)
        {
            //_lti2Api = lti2Api ?? throw new ArgumentNullException(nameof(lti2Api));
        }
Пример #15
0
        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;
            }
        }