public virtual async Task <OperationResult> ConvertWithSubtitles([FromBody] RecordingActionRequestDto input) { try { string licenseKey = LmsCompany.GetSetting <string>(LmsLicenseSettingNames.Mp4ServiceWithSubtitlesLicenseKey); if (string.IsNullOrWhiteSpace(licenseKey)) { throw new WarningMessageException("Can't find your MP4Service license. Contact administrator."); } Guid license; if (!Guid.TryParse(licenseKey, out license)) { throw new WarningMessageException("Invalid MP4Service license. Contact administrator."); } return(await Mp4ApiUtility.DoConvert(Mp4Client, license, MP4Service.Contract.Client.LicenseType.MP4WithSubtitles, input.RecordingId, null, Logger).ConfigureAwait(false)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ConvertWithSubtitles", ex); return(OperationResult.Error(errorMessage)); } }
public virtual async Task <OperationResultWithData <Mp4TaskStatusDto> > GetRecordingStatus([FromBody] RecordingActionRequestDto input) { try { Guid mp4; if (!Guid.TryParse(LmsCompany.GetSetting <string>(LmsLicenseSettingNames.Mp4ServiceLicenseKey), out mp4)) { mp4 = Guid.Empty; } Guid mp4Subtitles; if (!Guid.TryParse(LmsCompany.GetSetting <string>(LmsLicenseSettingNames.Mp4ServiceWithSubtitlesLicenseKey), out mp4Subtitles)) { mp4Subtitles = Guid.Empty; } if ((mp4 != Guid.Empty) || (mp4Subtitles != Guid.Empty)) { var mp4Client = IoC.Resolve <TaskClient>(); return(await Mp4ApiUtility.GetRecordingStatus(mp4Client, input.RecordingId, mp4, mp4Subtitles, _mp4LinkBuilder, _vttLinkBuilder, Logger)); } return(OperationResultWithData <Mp4TaskStatusDto> .Error("No MP4 license found")); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("MP4-GetRecordings", ex); return(OperationResultWithData <Mp4TaskStatusDto> .Error(errorMessage)); } }
private void ProcessTelephony(CompanyLmsDTO dto, LmsCompany instance) { if (dto.Telephony != null) { UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.ActiveProfile, dto.Telephony.ActiveProfile); UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.CourseMeetingOption, dto.Telephony.CourseMeetingOption); UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.OfficeHoursOption, dto.Telephony.OfficeHoursOption); UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.StudyGroupOption, dto.Telephony.StudyGroupOption); if (dto.Telephony.MeetingOne != null) { UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.MeetingOne.OwningAccountNumber, dto.Telephony.MeetingOne.OwningAccountNumber); UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.MeetingOne.UserName, dto.Telephony.MeetingOne.UserName); UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.MeetingOne.SecretHashKey, dto.Telephony.MeetingOne.SecretHashKey); } if (dto.Telephony.Arkadin != null) { UpdateOrDeleteSetting(instance, LmsLicenseSettingNames.Telephony.Arkadin.UserName, dto.Telephony.Arkadin.UserName); } } }
public virtual async Task <OperationResult> UpdateMeetingCourseSections([FromBody] UpdateCourseSectionsDto updateCourseSectionsDto) { if (!LmsCompany.GetSetting <bool>(LmsLicenseSettingNames.UseCourseSections)) { return(OperationResult.Error("License doesn't support 'Sections' feature")); } var param = Session.LtiSession.LtiParam; var ac = GetAdminProvider(); try { await meetingSetup.UpdateMeetingCourseSectionsAsync(LmsCompany, updateCourseSectionsDto, param); var users = await usersSetup.GetUsers(LmsCompany, ac, param.course_id, param, updateCourseSectionsDto.MeetingId); return(users.Item2 != null ? OperationResult.Error(users.Item2) : users.Item1.ToSuccessResult()); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("UpdateMeetingCourseSections", ex); return(OperationResult.Error(errorMessage)); } }
private void ProcessAc(LmsCompany lmsCompany) { IAdobeConnectProxy provider = IoC.Resolve <IAdobeConnectAccountService>().GetProvider(lmsCompany); var stopwatch = Stopwatch.StartNew(); var result = provider.GetAllPrincipals(); stopwatch.Stop(); var acTime = stopwatch.Elapsed; if (!result.Success) { _log.WriteLine(" GetAllPrincipals Issue:" + result.Status.Code); return; } stopwatch = Stopwatch.StartNew(); var table = new AcCacheDataSet.AcCachePrincipalDataTable(); foreach (Principal p in result.Values) { AddToTable(table, p, lmsCompany.Id); } BatchBulkCopy(table, "AcCachePrincipal", 500); stopwatch.Stop(); var dbTime = stopwatch.Elapsed; _log.WriteLine(" PrincipalCount: " + result.Values.Count() + ". AC fetch time: " + acTime.ToString() + ". DB save time: " + dbTime.ToString()); }
public OperationResultWithData <IEnumerable <ScoShortcutDto> > GetShortcuts() { try { if (!LmsCompany.GetSetting <bool>(LmsCompanySettingNames.EnableMyContent)) { return(OperationResultWithData <IEnumerable <ScoShortcutDto> > .Error("Operation is not enabled.")); } var param = Session.LtiSession.LtiParam; var ac = this.GetUserProvider(); var lmsUser = _lmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, LmsCompany.Id).Value; var contentService = new ContentService(Logger, ac); IEnumerable <ScoShortcut> shortcuts = contentService.GetShortcuts(new ScoShortcutType[] { ScoShortcutType.content, ScoShortcutType.my_content }); var result = shortcuts.Select(x => new ScoShortcutDto { ScoId = x.ScoId, Type = x.Type, Name = Resources.ScoShortcutNames.ResourceManager.GetString(x.Type.Replace('-', '_')), // TRICK: AC trick to change my-content to my_content }); return(result.ToSuccessResult()); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-GetShortcuts", ex); return(OperationResultWithData <IEnumerable <ScoShortcutDto> > .Error(errorMessage)); } }
public MeetingFolderBuilder(LmsCompany lmsCompany, IAdobeConnectProxy provider, bool useLmsUserEmailForSearch, LmsMeetingType lmsMeetingType = LmsMeetingType.Meeting) { _lmsCompany = lmsCompany ?? throw new ArgumentNullException(nameof(lmsCompany)); _provider = provider ?? throw new ArgumentNullException(nameof(provider)); _useLmsUserEmailForSearch = useLmsUserEmailForSearch; _lmsMeetingType = lmsMeetingType; }
private string LoginCurrentUser(LmsUserSession session) { LmsCompany lmsCompany = null; try { lmsCompany = session.LmsCompany; var param = session.LtiSession.LtiParam; var LmsUserModel = IoC.Resolve <LmsUserModel>(); var lmsUser = LmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, lmsCompany.Id).Value; if (lmsUser == null) { throw new Core.WarningMessageException($"No user with id {param.lms_user_id} found in the database."); } if (lmsUser.PrincipalId == null) { throw new Core.WarningMessageException("User doesn't have account in Adobe Connect."); } var ac = GetAdminProvider(lmsCompany); var registeredUser = ac.GetOneByPrincipalId(lmsUser.PrincipalId).PrincipalInfo.Principal; var MeetingSetup = IoC.Resolve <MeetingSetup>(); string breezeToken = MeetingSetup.ACLogin(lmsCompany, param, lmsUser, registeredUser, ac); return(breezeToken); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-LoginCurrentUser", ex); throw; } }
public TelephonyDTO(LmsCompany instance) { if (instance == null) { throw new ArgumentNullException(nameof(instance)); } ActiveProfile = instance.GetSetting <string>(LmsLicenseSettingNames.Telephony.ActiveProfile); CourseMeetingOption = instance.GetSetting <int>(LmsLicenseSettingNames.Telephony.CourseMeetingOption); OfficeHoursOption = instance.GetSetting <int>(LmsLicenseSettingNames.Telephony.OfficeHoursOption); StudyGroupOption = instance.GetSetting <int>(LmsLicenseSettingNames.Telephony.StudyGroupOption); MeetingOne = new TelephonyMeetingOneDTO { OwningAccountNumber = instance.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.OwningAccountNumber), UserName = instance.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.UserName), SecretHashKey = instance.GetSetting <string>(LmsLicenseSettingNames.Telephony.MeetingOne.SecretHashKey), }; Arkadin = new TelephonyArkadinDTO { UserName = instance.GetSetting <string>(LmsLicenseSettingNames.Telephony.Arkadin.UserName), }; }
public OperationResultWithData <FolderDto> CreateSubFolder(string folderScoId, [FromBody] FolderDto dto) { if (dto == null) { throw new ArgumentNullException(nameof(dto)); } try { if (!LmsCompany.GetSetting <bool>(LmsCompanySettingNames.EnableMyContent)) { return(OperationResultWithData <FolderDto> .Error("Operation is not enabled.")); } // TRICK: dto.FolderId = folderScoId; var ac = this.GetUserProvider(); var helper = new ContentEditControllerHelper(Logger, ac); return(helper.CreateFolder(dto)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-CreateSubFolder", ex); return(OperationResultWithData <FolderDto> .Error(errorMessage)); } }
private static bool LicenseExpired(LmsCompany lmsCompany) { var companyModel = IoC.Resolve <CompanyModel>(); var company = companyModel.GetOneById(lmsCompany.CompanyId).Value; return((company == null) || !company.IsActive()); }
//#region Public Methods and Operators ///// <summary> ///// The login and create a session. ///// </summary> ///// <param name="error"> ///// The error. ///// </param> ///// <param name="lmsDomain"> ///// The LMS domain. ///// </param> ///// <param name="userName"> ///// The user name. ///// </param> ///// <param name="password"> ///// The password. ///// </param> ///// <returns> ///// The <see cref="Session"/>. ///// </returns> //internal Session LoginAndCreateASession(out string error, string lmsDomain, string userName, string password) //{ // try // { // var session = new Session("EduGameCloud", (string)this.settings.AgilixBuzzApiUrl) { Verbose = true }; // string userPrefix = lmsDomain.ToLower() // .Replace(".agilixbuzz.com", string.Empty) // .Replace("www.", string.Empty); // XElement result = session.Login(userPrefix, userName, password); // if (!Session.IsSuccess(result)) // { // error = "DLAP. Unable to login: "******"string(user/@domainid)").ToString(); // return session; // } // catch (Exception ex) // { // error = ex.Message; // return null; // } //} //public bool LoginAndCheckSession(out string error, string lmsDomain, string userName, string password) //{ // Session session = LoginAndCreateASession(out error, lmsDomain, userName, password); // return session != null; //} /////// <summary> /////// The create announcement. /////// </summary> /////// <param name="credentials"> /////// The credentials. /////// </param> /////// <param name="courseId"> /////// The course id. /////// </param> /////// <param name="announcementTitle"> /////// The announcement title. /////// </param> /////// <param name="announcementMessage"> /////// The announcement message. /////// </param> /////// <param name="error"> /////// The error. /////// </param> /////// <param name="session"> /////// The session. /////// </param> ////public void CreateAnnouncement(LmsCompany credentials, int courseId, string announcementTitle, string announcementMessage, out string error, Session session = null) ////{ //// XElement courseResult = this.LoginIfNecessary( //// session, //// s => //// s.Get(Commands.Courses.GetOne, string.Format(Parameters.Courses.GetOne, courseId).ToParams()), //// credentials, //// out error); //// if (courseResult == null) //// { //// error = error ?? "DLAP. Unable to retrive course from API"; //// return; //// } //// if (!Session.IsSuccess(courseResult)) //// { //// error = "DLAP. Unable to get course: " + Session.GetMessage(courseResult); //// this.logger.Error(error); //// } //// if (session != null) //// { //// /*[<roles> //// When entityid refers to a course or section, the recipient roles within the course or section for this announcement. //// <role flags="enum" /> //// . . . //// </roles>]*/ //// var course = courseResult.XPathSelectElement("/course"); //// var courseName = course.XPathEvaluate("string(@title)").ToString(); //// var courseStartDate = course.XPathEvaluate("string(@startdate)").ToString(); //// var courseEndDate = course.XPathEvaluate("string(@enddate)").ToString(); //// var announcementName = Guid.NewGuid().ToString("N") + ".zip"; //// //// var groupsXml = this.FormatGroupsXml(session, courseId); //// // ReSharper disable once UnusedVariable //// XElement announcementResult = session.Post( //// Commands.Announcements.Put + "&" //// + string.Format(Parameters.Announcements.Put, courseId, announcementName), //// new XElement( //// "announcement", //// new XAttribute("to", courseName), //// new XAttribute("entityid", courseId), //// new XAttribute("title", announcementTitle), //// new XAttribute("startdate", courseStartDate), //// new XAttribute("enddate", courseEndDate), //// new XAttribute("recurse", "false"), //// new XElement("body", new XCData(announcementMessage)))); //// } ////} ///// <summary> ///// The get users for course. ///// </summary> ///// <param name="company"> ///// The company. ///// </param> ///// <param name="courseid"> ///// The course id. ///// </param> ///// <param name="error"> ///// The error. ///// </param> ///// <param name="session"> ///// The session. ///// </param> ///// <returns> ///// The <see cref="List{LmsUserDTO}"/>. ///// </returns> //public List<LmsUserDTO> GetUsersForCourse( // LmsCompany company, // int courseid, // out string error, // object extraData) //{ // Session session = extraData as Session; // var result = new List<LmsUserDTO>(); // XElement enrollmentsResult = this.LoginIfNecessary( // session, // s => // s.Get( // Commands.Enrollments.List, // string.Format(Parameters.Enrollments.List, s.DomainId, courseid).ToParams()), // company, // out error); // if (enrollmentsResult == null) // { // error = error ?? "DLAP. Unable to retrive result from API"; // return result; // } // if (!Session.IsSuccess(enrollmentsResult)) // { // error = "DLAP. Unable to create user: "******"/enrollments/enrollment"); // foreach (XElement enrollment in enrollments) // { // string privileges = enrollment.XPathEvaluate("string(@privileges)").ToString(); // string status = enrollment.XPathEvaluate("string(@status)").ToString(); // XElement user = enrollment.XPathSelectElement("user"); // if (!string.IsNullOrWhiteSpace(privileges) && user != null && this.IsEnrollmentActive(status)) // { // var role = ProcessRole(privileges); // string userId = user.XPathEvaluate("string(@id)").ToString(); // string firstName = user.XPathEvaluate("string(@firstname)").ToString(); // string lastName = user.XPathEvaluate("string(@lastname)").ToString(); // string userName = user.XPathEvaluate("string(@username)").ToString(); // string email = user.XPathEvaluate("string(@email)").ToString(); // result.Add( // new LmsUserDTO // { // lms_role = role, // primary_email = email, // login_id = userName, // id = userId, // name = firstName + " " + lastName, // }); // } // } // return result; //} ///// <summary> ///// The is enrollment active. ///// </summary> ///// <param name="enrollmentStatus"> ///// The enrollment status. ///// </param> ///// <returns> ///// The <see cref="bool"/>. ///// </returns> //public bool IsEnrollmentActive(string enrollmentStatus) //{ // switch (enrollmentStatus) // { // case "4": ////Withdrawn // case "5": ////WithdrawnFailed // case "6": ////Transfered // case "9": ////Suspended // case "10": ////Inactive // return false; // } // return true; //} ///// <summary> ///// The get users for course. ///// </summary> ///// <param name="company"> ///// The company. ///// </param> ///// <param name="courseId"> ///// The course Id. ///// </param> ///// <param name="error"> ///// The error. ///// </param> ///// <param name="session"> ///// The session. ///// </param> ///// <returns> ///// The <see cref="Course"/>. ///// </returns> //internal Course GetCourse( // LmsCompany company, // int courseId, // out string error, // Session session = null) //{ // XElement courseResult = this.LoginIfNecessary( // session, // s => // s.Get(Commands.Courses.GetOne, string.Format(Parameters.Courses.GetOne, courseId).ToParams()), // company, // out error); // if (courseResult == null) // { // error = error ?? "DLAP. Unable to retrive course from API"; // return null; // } // if (!Session.IsSuccess(courseResult)) // { // error = "DLAP. Unable to get course: " + Session.GetMessage(courseResult); // this.logger.Error(error); // } // if (session != null) // { // var course = courseResult.XPathSelectElement("/course"); // if (course != null) // { // var courseName = course.XPathEvaluate("string(@title)").ToString(); // var courseStartDate = course.XPathEvaluate("string(@startdate)").ToString(); // var courseEndDate = course.XPathEvaluate("string(@enddate)").ToString(); // return new Course // { // CourseId = courseId, // Title = courseName, // StartDate = courseStartDate, // EndDate = courseEndDate, // }; // } // error = "Course not found"; // } // return null; //} ///// <summary> ///// The get enrollment. ///// </summary> ///// <param name="company"> ///// The company. ///// </param> ///// <param name="enrollmentId"> ///// The enrollment Id. ///// </param> ///// <param name="error"> ///// The error. ///// </param> ///// <param name="session"> ///// The session. ///// </param> ///// <returns> ///// The <see cref="Enrollment"/>. ///// </returns> //internal Enrollment GetEnrollment( // LmsCompany company, // long enrollmentId, // out string error, // Session session = null) //{ // XElement enrollmentResult = this.LoginIfNecessary( // session, // s => // s.Get(Commands.Enrollments.GetOne, string.Format(Parameters.Enrollments.GetOne, enrollmentId).ToParams()), // company, // out error); // if (enrollmentResult == null) // { // error = error ?? "DLAP. Unable to retrive enrollment from API"; // return null; // } // if (!Session.IsSuccess(enrollmentResult)) // { // error = "DLAP. Unable to get course: " + Session.GetMessage(enrollmentResult); // this.logger.Error(error); // } // if (session != null) // { // var enrollment = enrollmentResult.XPathSelectElement("/enrollment"); // if (enrollment != null) // { // var userId = enrollment.XPathEvaluate("string(@userid)").ToString(); // var courseId = int.Parse(enrollment.XPathEvaluate("string(@courseid)").ToString()); // var role = enrollment.XPathEvaluate("string(@privileges)").ToString(); // var status = enrollment.XPathEvaluate("string(@status)").ToString(); // var user = enrollment.XPathSelectElement("user"); // var email = user.XPathEvaluate("string(@email)").ToString(); // var userName = user.XPathEvaluate("string(@username)").ToString(); // return new Enrollment // { // CourseId = courseId, // UserId = userId, // Role = ProcessRole(role), // Email = email, // UserName = userName, // Status = status, // }; // } // error = "Enrollment not found"; // } // return null; //} ///// <summary> ///// The get last signal id. ///// </summary> ///// <param name="company"> ///// The company. ///// </param> ///// <param name="error"> ///// The error. ///// </param> ///// <param name="session"> ///// The session. ///// </param> ///// <returns> ///// The <see cref="Nullable{Int64}"/>. ///// </returns> //internal long? GetLastSignalId(LmsCompany company, out string error, Session session = null) //{ // long? result = null; // XElement signalsResult = this.LoginIfNecessary(session, s => s.Get(Commands.Signals.GetLastSignalId), company, out error); // if (signalsResult == null) // { // error = error ?? "DLAP. Unable to retrive result from API"; // return null; // } // if (!Session.IsSuccess(signalsResult)) // { // error = "DLAP. Unable to create user: "******"/signal"); // result = long.Parse(signal.XPathEvaluate("string(@id)").With(x => x.ToString())); // } // catch (Exception ex) // { // error = ex.ToString(); // } // return result; //} /// <summary> /// The get last signal id. /// </summary> /// <param name="company"> /// The company. /// </param> /// <param name="error"> /// The error. /// </param> /// <param name="session"> /// The session. /// </param> /// <returns> /// The <see cref="Nullable{Int64}"/>. /// </returns> internal async Task <(long?result, string error)> GetLastSignalIdAsync(LmsCompany company, Session session = null) { long?result = null; var(signalsResult, error) = await this.LoginIfNecessaryAsync(session, s => s.GetAsync(Commands.Signals.GetLastSignalId), company); if (signalsResult == null) { error = error ?? "DLAP. Unable to retrive result from API"; return(null, error); } if (!Session.IsSuccess(signalsResult)) { error = "DLAP. Unable to create user: "******"/signal"); result = long.Parse(signal.XPathEvaluate("string(@id)").With(x => x.ToString())); } catch (Exception ex) { error = ex.ToString(); } return(result, error); }
public PrincipalReportDto[] GetMeetingHostReport(int lmsCompanyId) { LmsCompany license = this.LmsCompanyModel.GetOneById(lmsCompanyId).Value; var provider = AdobeConnectAccountService.GetProvider(license); return(AdobeConnectAccountService.GetMeetingHostReport(provider).ToArray()); }
internal async Task <(List <Signal> result, string error)> GetSignalsListAsync( LmsCompany company, Session session = null, string types = "1.2|4.3|4.8") { var result = new List <Signal>(); var(signalsResult, error) = await this.LoginIfNecessaryAsync( session, s => s.GetAsync(Commands.Signals.List, string.Format(Parameters.Signals.List, company.LastSignalId, s.DomainId, types).ToDictionary()), company); if (signalsResult == null) { error = error ?? "DLAP. Unable to retrive result from API"; return(result, error); } if (!Session.IsSuccess(signalsResult)) { error = "DLAP. Unable to create user: "******"/signals/signal"); foreach (XElement signal in signals) { var signalId = long.Parse(signal.XPathEvaluate("string(@signalid)").With(x => x.ToString())); var entityid = int.Parse(signal.XPathEvaluate("string(@entityid)").With(x => x.ToString())); var type = signal.XPathEvaluate("string(@type)").ToString(); var data = signal.XPathSelectElement("data"); if (data != null) { switch (type) { case SignalTypes.EnrollmentChanged: ProcessEnrollment(signalId, entityid, type, data, signal, result); break; case SignalTypes.CourseDeleted: ProcessCourseSignal(data, result, signalId, entityid, type); break; case SignalTypes.CourseCreated: ProcessCourseSignal(data, result, signalId, entityid, type); break; } } } return(result, error); }
public virtual async Task <OperationResult> GetMeetingCourseSections() { if (!LmsCompany.GetSetting <bool>(LmsLicenseSettingNames.UseCourseSections)) { return(OperationResult.Error("License doesn't support 'Sections' feature")); } LmsCourseSectionsServiceBase sectionsService = lmsFactory.GetCourseSectionsService(LmsCompany.LmsProviderId, LmsCompany.GetLMSSettings(Settings), Session.LtiSession.LtiParam); return((await sectionsService.GetCourseSections()).ToSuccessResult()); }
private ActionResult LoginToAC(string realUrl, string breezeSession, LmsCompany credentials) { if (!credentials.LoginUsingCookie.GetValueOrDefault()) { return(this.Redirect(realUrl)); } this.ViewBag.MeetingUrl = realUrl; this.ViewBag.BreezeSession = breezeSession; this.ViewBag.AcServer = credentials.AcServer + "/"; return(this.View("~/Views/Lti/LoginToAC.cshtml")); }
/// <summary> /// Retrieves secret for key. /// </summary> /// <param name="key"> /// The key. /// </param> /// <param name="credentials"> /// The credentials /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> private static string RetrieveSecretForKey(string key, LmsCompany credentials) { // Use this method to return back the secret associated with this key. // In this example I am using the key/secret pair { "MyKey", "Secret12345" } // You will need to create your own key/secret pair and replace the code below with the key/secret pair that you create. // The domain in AgilixBuzz that contains your blti links will then need to be customized with your key/secret pair. if (credentials.ConsumerKey == key) { return(credentials.SharedSecret); } return(null); }
/// <summary> /// The get enrollment. /// </summary> /// <param name="company"> /// The company. /// </param> /// <param name="enrollmentId"> /// The enrollment Id. /// </param> /// <param name="error"> /// The error. /// </param> /// <param name="session"> /// The session. /// </param> /// <returns> /// The <see cref="Enrollment"/>. /// </returns> internal async Task <(Enrollment result, string error)> GetEnrollmentAsync( LmsCompany company, long enrollmentId, Session session = null) { var(enrollmentResult, error) = await this.LoginIfNecessaryAsync( session, s => s.GetAsync(Commands.Enrollments.GetOne, string.Format(Parameters.Enrollments.GetOne, enrollmentId).ToDictionary()), company); if (enrollmentResult == null) { error = error ?? "DLAP. Unable to retrive enrollment from API"; return(null, error); } if (!Session.IsSuccess(enrollmentResult)) { error = "DLAP. Unable to get course: " + Session.GetMessage(enrollmentResult); _logger.Error(error); } if (session != null) { var enrollment = enrollmentResult.XPathSelectElement("/enrollment"); if (enrollment != null) { var userId = enrollment.XPathEvaluate("string(@userid)").ToString(); var courseId = int.Parse(enrollment.XPathEvaluate("string(@courseid)").ToString()); var role = enrollment.XPathEvaluate("string(@privileges)").ToString(); var status = enrollment.XPathEvaluate("string(@status)").ToString(); var user = enrollment.XPathSelectElement("user"); var email = user.XPathEvaluate("string(@email)").ToString(); var userName = user.XPathEvaluate("string(@username)").ToString(); return(new Enrollment { CourseId = courseId, UserId = userId, Role = ProcessRole(role), Email = email, UserName = userName, Status = status, }, error); } error = "Enrollment not found"; } return(null, error); }
public void Process(LmsCompany license) { try { _log.WriteLine("START " + license.AcServer); ProcessAc(license); } catch (Exception ex) { _log.WriteLine(" Error. AC: " + license.AcServer); _log.WriteLine(ex, " "); } _log.WriteLine("STOP " + license.AcServer); }
private IEnumerable <LmsCompanyRoleMapping> GetGuestAuditRoleMappings(LmsCompany lmsCompany, LtiParamDTO param) { if (!lmsCompany.GetSetting <bool>(LmsLicenseSettingNames.EnableAuditGuestEntry)) { return(Enumerable.Empty <LmsCompanyRoleMapping>()); } var customRoles = lmsCompany.RoleMappings.Where(x => !x.IsDefaultLmsRole && new[] { AcRole.Host.Id, AcRole.Presenter.Id }.Contains(x.AcRole)); var currentUserLtiRoles = new List <string>(); if (!string.IsNullOrEmpty(param.roles)) { currentUserLtiRoles.AddRange(param.roles.Split(',', ';').Select(x => x.Trim())); } return(customRoles.Where(x => currentUserLtiRoles.Any(lr => lr.Equals(x.LmsRoleName)))); }
protected string GetOutputErrorMessage(string methodName, LmsCompany credentials, Exception ex) { string lmsInfo = (credentials != null) ? string.Format(" LmsCompany ID: {0}. Lms License Title: {1}. Lms Domain: {2}. AC Server: {3}.", credentials.Id, credentials.Title, credentials.LmsDomain, credentials.AcServer) : string.Empty; Logger.Error(methodName + lmsInfo, ex); if (ex is IUserMessageException) { return(ex.Message); } return(IsDebug ? Resources.Messages.ExceptionOccured + ex.ToString() : Resources.Messages.ExceptionMessage); }
private static void ProcessRoleMapping(CompanyLmsDTO dto, LmsCompany instance) { if (dto.roleMapping == null) { dto.roleMapping = new LmsCompanyRoleMappingDTO[0]; } var oldMapsToDelete = new List <LmsCompanyRoleMapping>(); foreach (LmsCompanyRoleMapping old in instance.RoleMappings) { var newSetRole = dto.roleMapping.FirstOrDefault(x => x.lmsRoleName == old.LmsRoleName); if (newSetRole == null) { oldMapsToDelete.Add(old); } else { old.AcRole = newSetRole.acRole; old.IsTeacherRole = newSetRole.isTeacherRole; } } if (oldMapsToDelete.Count > 0) { foreach (var item in oldMapsToDelete) { instance.RoleMappings.Remove(item); } } foreach (LmsCompanyRoleMappingDTO newRole in dto.roleMapping) { if (!instance.RoleMappings.Any(map => map.LmsRoleName == newRole.lmsRoleName)) { var map = new LmsCompanyRoleMapping { LmsCompany = instance, LmsRoleName = newRole.lmsRoleName, AcRole = newRole.acRole, IsDefaultLmsRole = newRole.isDefaultLmsRole, IsTeacherRole = newRole.isTeacherRole, }; instance.RoleMappings.Add(map); } } }
private static void Test(LmsCompany entity, CompanyLmsDTO resultDto) { bool isTransient = false; string lmsPassword = resultDto.lmsAdminPassword; if (!isTransient && string.IsNullOrWhiteSpace(resultDto.lmsAdminPassword)) { if ((entity.LmsProviderId == (int)LmsProviderEnum.Moodle) || ((entity.LmsProviderId == (int)LmsProviderEnum.Blackboard) && !resultDto.enableProxyToolMode)) { lmsPassword = entity.AdminUser.Password; } else if ((entity.LmsProviderId == (int)LmsProviderEnum.Blackboard) && resultDto.enableProxyToolMode) { lmsPassword = resultDto.proxyToolPassword; } } ConnectionInfoDTO lmsConnectionTest = TestConnectionService.TestConnection(new ConnectionTestDTO { domain = resultDto.lmsDomain, enableProxyToolMode = resultDto.enableProxyToolMode, login = resultDto.lmsAdmin, password = lmsPassword, type = resultDto.lmsProvider, }); string acPassword = (isTransient || !string.IsNullOrWhiteSpace(resultDto.acPassword)) ? resultDto.acPassword : entity.AcPassword; string acConnectionInfo; bool loginSameAsEmail; bool acConnectionTest = TestConnectionService.TestACConnection(new ConnectionTestDTO { domain = resultDto.acServer, enableProxyToolMode = resultDto.enableProxyToolMode, login = resultDto.acUsername, password = acPassword, type = "ac", }, out acConnectionInfo, out loginSameAsEmail); // NOTE: always use setting from AC not UI entity.ACUsesEmailAsLogin = loginSameAsEmail; entity.IsActive = lmsConnectionTest.status == OkMessage && acConnectionTest; }
internal async Task <(Course course, string error)> GetCourseAsync( LmsCompany company, int courseId, Session session = null) { var(courseResult, error) = await this.LoginIfNecessaryAsync( session, s => s.GetAsync(Commands.Courses.GetOne, string.Format(Parameters.Courses.GetOne, courseId).ToDictionary()), company); if (courseResult == null) { error = error ?? "DLAP. Unable to retrive course from API"; return(null, error); } if (!Session.IsSuccess(courseResult)) { error = "DLAP. Unable to get course: " + Session.GetMessage(courseResult); _logger.Error(error); } if (session != null) { var course = courseResult.XPathSelectElement("/course"); if (course != null) { var courseName = course.XPathEvaluate("string(@title)").ToString(); var courseStartDate = course.XPathEvaluate("string(@startdate)").ToString(); var courseEndDate = course.XPathEvaluate("string(@enddate)").ToString(); return(new Course { CourseId = courseId, Title = courseName, StartDate = courseStartDate, EndDate = courseEndDate, }, error); } error = "Course not found"; } return(null, error); }
private string SetupUserMeetingsFolder(LmsCompany lmsCompany, IAdobeConnectProxy provider, Principal user, bool useLmsUserEmailForSearch) { var shortcutName = MeetingTypeFactory.GetMeetingFolderShortcut(_lmsMeetingType, true).GetACEnum(); var shortcut = provider.GetShortcutByType(shortcutName); var userFolderName = lmsCompany.ACUsesEmailAsLogin.GetValueOrDefault() ? user.Email : user.Login; //var userFolderName = useLmsUserEmailForSearch ? user.Email : user.Login; var meetingsFolderName = string.IsNullOrEmpty(lmsCompany.UserFolderName) ? userFolderName : lmsCompany.UserFolderName; string meetingFolderScoId; CreateUserFoldersStructure(shortcut.ScoId, provider, userFolderName, meetingsFolderName, out meetingFolderScoId); return(meetingFolderScoId); }
public OperationResult MoveFileOrFolder(string scoId, string destinationFolderScoId) { try { if (!LmsCompany.GetSetting <bool>(LmsCompanySettingNames.EnableMyContent)) { return(OperationResult.Error("Operation is not enabled.")); } var ac = this.GetUserProvider(); var contentService = new ContentService(Logger, ac); var helper = new ContentEditControllerHelper(Logger, ac); return(helper.MoveSco(scoId, destinationFolderScoId)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-MoveFileOrFolder", ex); return(OperationResultWithData <IEnumerable <ScoContentDto> > .Error(errorMessage)); } }
private string GetMeetingFolder(LmsCompany lmsCompany, IAdobeConnectProxy provider, Principal user, bool useLmsUserEmailForSearch) { string adobeConnectScoId = null; if (lmsCompany.UseUserFolder.GetValueOrDefault() && user != null) { ////TODO Think about user folders + renaming directory adobeConnectScoId = SetupUserMeetingsFolder(lmsCompany, provider, user, useLmsUserEmailForSearch); } if (adobeConnectScoId == null) { LmsProvider lmsProvider = LmsProviderModel.GetById(lmsCompany.LmsProviderId); adobeConnectScoId = SetupSharedMeetingsFolder(lmsCompany, lmsProvider, provider); this.LmsСompanyModel.RegisterSave(lmsCompany); this.LmsСompanyModel.Flush(); } return(adobeConnectScoId); }
public async Task <OperationResultWithData <IEnumerable <ScoContentDto> > > FolderContent(string folderScoId) { try { if (!LmsCompany.GetSetting <bool>(LmsCompanySettingNames.EnableMyContent)) { return(OperationResultWithData <IEnumerable <ScoContentDto> > .Error("Operation is not enabled.")); } var ac = this.GetUserProvider(); var contentService = new ContentService(Logger, ac); var helper = new ContentControllerHelper <ScoContentDto>(Logger, contentService, new ScoContentDtoMapper()); return(await helper.GetFolderContent(folderScoId, new NullDtoProcessor <ScoContentDto>())); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-FolderContent", ex); return(OperationResultWithData <IEnumerable <ScoContentDto> > .Error(errorMessage)); } }
private void UpdateOrDeleteSetting(LmsCompany lmsCompany, string settingName, object settingValue) { var stringSettingValue = settingValue as string; if (settingValue != null && (stringSettingValue == null || !string.IsNullOrEmpty(stringSettingValue))) { LmsCompanyModel.UpdateCompanySetting(lmsCompany, settingName, settingValue.ToString()); } else { // todo: handle not-nullable values correctly if necessary var setting = LmsCompanySettingModel.GetOneByLmsCompanyIdAndSettingName(lmsCompany.Id, settingName); if (setting.Value != null) { lmsCompany.Settings.Remove(lmsCompany.Settings.FirstOrDefault(x => x.Id == setting.Value.Id)); LmsCompanySettingModel.RegisterDelete(setting.Value, true); } } }
public OperationResult GetDownloadLink(string scoId) { try { if (!LmsCompany.GetSetting <bool>(LmsCompanySettingNames.EnableMyContent)) { return(OperationResult.Error("Operation is not enabled.")); } var ac = this.GetUserProvider(); var contentService = new ContentService(Logger, ac); var helper = new ContentControllerHelper <ScoContentDto>(Logger, contentService, new ScoContentDtoMapper()); var param = Session.LtiSession.LtiParam; var lmsUser = _lmsUserModel.GetOneByUserIdAndCompanyLms(param.lms_user_id, LmsCompany.Id).Value; if (lmsUser == null) { throw new Core.WarningMessageException($"No user with id {param.lms_user_id} found in the database."); } if (lmsUser.PrincipalId == null) { throw new Core.WarningMessageException("User doesn't have account in Adobe Connect."); } var registeredUser = ac.GetOneByPrincipalId(lmsUser.PrincipalId).PrincipalInfo.Principal; string breezeToken = MeetingSetup.ACLogin(LmsCompany, param, lmsUser, registeredUser, ac); return(helper.GetDownloadAsZipLink(scoId, breezeToken)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("ContentApi-GetDownloadLink", ex); return(OperationResultWithData <IEnumerable <ScoContentDto> > .Error(errorMessage)); } }