public ScoInfo SaveSeminar(SeminarUpdateItem seminar, IAdobeConnectProxy provider) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (seminar == null) { throw new ArgumentNullException(nameof(seminar)); } if (string.IsNullOrWhiteSpace(seminar.ScoId)) { throw new ArgumentException("sco-id can't be empty.", nameof(seminar)); } if (!string.IsNullOrWhiteSpace(seminar.UrlPath)) { throw new InvalidOperationException("UrlPath can't be updated."); } else { seminar.UrlPath = null; } ScoInfoResult result = provider.UpdateSco(seminar); return(ProcessResult(result)); }
public ScoInfo SaveSession(SeminarSessionDto sessionItem, IAdobeConnectProxy provider) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (sessionItem == null) { throw new ArgumentNullException(nameof(sessionItem)); } if (sessionItem.ExpectedLoad <= 0) { throw new ArgumentException("ExpectedLoad should have positive value", nameof(sessionItem)); } var isNewSession = string.IsNullOrWhiteSpace(sessionItem.SeminarSessionScoId); var session = new SeminarSessionUpdateItem { ScoId = sessionItem.SeminarSessionScoId, FolderId = sessionItem.SeminarScoId, Type = ScoType.seminarsession, Name = sessionItem.Name, Description = sessionItem.Summary }; ScoInfoResult sessionScoResult = isNewSession ? provider.CreateSco(session) : provider.UpdateSco(session); ScoInfo sessionSco = ProcessResult(sessionScoResult); var sessionSettingsResult = provider.SeminarSessionScoUpdate(new SeminarSessionScoUpdateItem { ScoId = sessionSco.ScoId, Name = sessionSco.Name, DateBegin = sessionItem.DateBegin.ToString(AcDateFormat), DateEnd = sessionItem.DateEnd.ToString(AcDateFormat), ParentAclId = sessionItem.SeminarScoId, SourceScoId = sessionItem.SeminarScoId, }); // if session was not updated correctly, it's sco would appear in the list anyway // with wrong parameters(dates) => deleting just created session in case of unsuccessful update if (!sessionSettingsResult.Success && isNewSession) { provider.DeleteSco(sessionSco.ScoId); } var result = ProcessResult(sessionSettingsResult); StatusInfo loadResult = provider.UpdateAclField(result.ScoId, AclFieldId.seminar_expected_load, sessionItem.ExpectedLoad.ToString()); if ((loadResult.Code != StatusCodes.ok) && isNewSession) { provider.DeleteSco(sessionSco.ScoId); } return(result); }
public OperationResult EditSco(string scoId, FileUpdateDto dto) { if (string.IsNullOrWhiteSpace(scoId)) { throw new ArgumentException("Non-empty value expected", nameof(scoId)); } if (dto == null) { throw new ArgumentNullException(nameof(dto)); } try { ScoInfoResult scoResult = _acProxy.GetScoInfo(scoId); if (!scoResult.Success) { if (scoResult.Status.Code == StatusCodes.no_access && scoResult.Status.SubCode == StatusSubCodes.denied) { return(OperationResult.Error(Resources.Messages.AccessDenied)); } throw new AdobeConnectException(scoResult.Status); } ScoInfoResult updatedSco = _acProxy.UpdateSco( new FolderUpdateItem { Name = dto.Name, Description = dto.Description, ScoId = scoId, Type = scoResult.ScoInfo.Type, }); if (!updatedSco.Success) { return(OperationResult.Error(updatedSco.Status.GetErrorInfo())); } return(OperationResult.Success()); } catch (AdobeConnectException ex) { if (ex.Status.Code == StatusCodes.no_access && ex.Status.SubCode == StatusSubCodes.denied) { return(OperationResult.Error(Resources.Messages.AccessDenied)); } string errorMessage = GetOutputErrorMessage("EditSco", ex); return(OperationResult.Error(errorMessage)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("EditSco", ex); return(OperationResult.Error(errorMessage)); } }
public virtual async Task <OperationResult> UpdateMeeting([FromBody] EditMeetingDto input) { try { var trace = new StringBuilder(); var ac = GetAdminProvider(); //bool useLmsUserEmailForSearch = true; var useLmsUserEmailForSearch = !string.IsNullOrEmpty(input.ApiLtiParam.lis_person_contact_email_primary); var fb = new MeetingFolderBuilder((LmsCompany)LmsCompany, ac, useLmsUserEmailForSearch, LmsMeetingType.Meeting); // HACK: we support Meeting only. LmsCourseMeeting existed = _meetingSetup.GetCourseMeeting(LmsCompany, input.ApiLtiParam.course_id, input.Id, LmsMeetingType.Meeting); string meetingSco = existed.GetMeetingScoId(); bool isNewMeeting = string.IsNullOrEmpty(meetingSco); if (isNewMeeting) { return(OperationResult.Error("Meeting not found")); } var acProvider = this.GetAdminProvider(); ScoInfoResult scoResult = acProvider.GetScoInfo(meetingSco); MeetingDTOInput meeting = input.Build(existed, scoResult.ScoInfo); //LmsUser lmsUser = IoC.Resolve<LmsUserModel>() // .GetOneByUserIdAndCompanyLms(input.ApiLtiParam.lms_user_id, LmsCompany.Id).Value; //MeetingDTO dto = await _meetingSetup.BuildDto( // lmsUser, // input.ApiLtiParam, // LmsCompany, // meeting, // null, // //timeZone, // trace); OperationResult ret = await _meetingSetup.SaveMeeting( LmsCompany, ac, input.ApiLtiParam, meeting, trace, fb); return(ret); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("UpdateMeeting", ex); return(OperationResult.Error(errorMessage)); } }
public OperationResultWithData <FolderDto> CreateFolder(FolderDto dto) { if (dto == null) { throw new ArgumentNullException(nameof(dto)); } try { // TODO: validation!! via FluentValidation //if (string.IsNullOrWhiteSpace(dto.FolderId)) // throw new ArgumentException("folderScoId can't be empty"); ScoInfoResult updatedSco = _acProxy.CreateSco( new FolderUpdateItem { Name = dto.Name, Description = dto.Description, FolderId = dto.FolderId, Type = ScoType.folder, }); if (!updatedSco.Success) { if (updatedSco.Status.Code == StatusCodes.no_access && updatedSco.Status.SubCode == StatusSubCodes.denied) { return(OperationResultWithData <FolderDto> .Error(Resources.Messages.AccessDenied)); } if (updatedSco.Status.Code == StatusCodes.invalid && updatedSco.Status.SubCode == StatusSubCodes.duplicate && updatedSco.Status.InvalidField == "name") { return(OperationResultWithData <FolderDto> .Error(Resources.Messages.NameNotUnique)); } _logger.Error(updatedSco.Status.GetErrorInfo()); return(OperationResultWithData <FolderDto> .Error(updatedSco.Status.GetErrorInfo())); } dto.ScoId = updatedSco.ScoInfo.ScoId; return(dto.ToSuccessResult()); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("CreateFolder", ex); return(OperationResultWithData <FolderDto> .Error(errorMessage)); } }
public OperationResultWithData <FolderDto> CreateFolder(FolderDto dto) { if (dto == null) { throw new ArgumentNullException(nameof(dto)); } try { // TODO: validation!! via FluentValidation //if (string.IsNullOrWhiteSpace(dto.FolderId)) // throw new ArgumentException("folderScoId can't be empty"); ScoInfoResult updatedSco = _acProxy.CreateSco( new FolderUpdateItem { Name = dto.Name, Description = dto.Description, FolderId = dto.FolderId, Type = ScoType.folder, }); if (!updatedSco.Success) { _logger.Error(updatedSco.Status.GetErrorInfo()); return(OperationResultWithData <FolderDto> .Error(updatedSco.Status.GetErrorInfo())); } dto.ScoId = updatedSco.ScoInfo.ScoId; return(OperationResultWithData <FolderDto> .Success(dto)); } catch (AdobeConnectException ex) { if (ex.Status.Code == StatusCodes.no_access && ex.Status.SubCode == StatusSubCodes.denied) { return(OperationResultWithData <FolderDto> .Error("You do not have permission to access this item.")); } string errorMessage = GetOutputErrorMessage("CreateFolder", ex); return(OperationResultWithData <FolderDto> .Error(errorMessage)); } catch (Exception ex) { string errorMessage = GetOutputErrorMessage("CreateFolder", ex); return(OperationResultWithData <FolderDto> .Error(errorMessage)); } }
/// <summary> /// The get model. /// </summary> /// <param name="scoInfoResult"> /// The SCO info. /// </param> /// <returns> /// The <see cref="MeetingDetailModel"/>. /// </returns> protected override MeetingDetailModel GetModel(ScoInfoResult scoInfoResult) { string permissionId = null; var permission = this.AdobeConnect.GetScoPublicAccessPermissions(scoInfoResult.ScoInfo.ScoId); if (permission.Success && permission.Values != null && permission.Values.Any()) { var publicAccessPermission = permission.Values.FirstOrDefault(); if (publicAccessPermission != null) { permissionId = publicAccessPermission.PermissionId.ToXmlString(); } } return(scoInfoResult.ScoInfo.ToMeetingUpdateModel(permissionId)); }
public OperationResultWithData <ScoContentDto> UploadFile(string folderScoId, IFormFile file) { // TRICK: var form = this.ControllerContext.HttpContext.Request.Form; string sessionKey = form["session"]; Session = GetReadOnlySession(Guid.Parse(sessionKey)); if (Session == null) { return(OperationResultWithData <ScoContentDto> .Error(Messages.SessionTimeOut)); } LmsCompany = Session.LmsCompany; // TODO: check user is teacher + feature is enabled string name = form["name"]; string description = form["description"]; string customUrl = form["customUrl"]; try { string fileName = file.FileName; var ac = this.GetUserProvider(); var helper = new ContentEditControllerHelper(Logger, ac); int fileSize; ScoInfoResult createdFile = helper.UploadFile(folderScoId, name, description, customUrl, fileName, file.ContentType, file.OpenReadStream(), out fileSize); var sco = ac.GetScoContent(createdFile.ScoInfo.ScoId); var dto = new ScoContentDtoMapper().Map(sco.ScoContent); //TRICK: dto.ByteCount = fileSize; return(dto.ToSuccessResult()); } catch (Exception ex) { IUserMessageException userError = ex as IUserMessageException; if (userError != null) { return(OperationResultWithData <ScoContentDto> .Error(ex.Message)); } throw; } }
/// <summary> /// The get model. /// </summary> /// <param name="scoInfoResult"> /// The sco info. /// </param> /// <returns> /// The <see cref="EventDetailModel"/>. /// </returns> protected override EventDetailModel GetModel(ScoInfoResult scoInfoResult) { //string permissionId = null; //var permission = AdobeConnect.GetScoPublicAccessPermissions(scoInfoResult.ScoInfo.ScoId); //if (permission.Success && permission.Values != null && permission.Values.Any()) //{ // var publicAccessPermission = permission.Values.FirstOrDefault(); // if (publicAccessPermission != null) // { // permissionId = publicAccessPermission.PermissionId.ToXmlString(); // } //} return(scoInfoResult.ScoInfo.ToEventUpdateModel()); }
public OperationResult EditRecording( ILmsLicense lmsCompany, IAdobeConnectProxy provider, string courseId, string recordingId, int id, string name, string summary) { LmsCourseMeeting meeting = lmsCourseMeetingModel.GetOneByCourseAndId(lmsCompany.Id, courseId, id); if (meeting == null) { return(OperationResult.Error(Resources.Messages.MeetingNotFound)); } ScoContentCollectionResult result = provider.GetMeetingRecordings(new[] { meeting.GetMeetingScoId() }, lmsCompany.UseMP4); var recording = result.Values.FirstOrDefault(x => x.ScoId == recordingId); if (recording == null) { return(OperationResult.Error(Resources.Messages.RecordingNotFound)); } ScoInfoResult editResult = provider.UpdateSco <RecordingUpdateItem>(new RecordingUpdateItem { ScoId = recordingId, Name = name.Trim(), Description = summary, Type = ScoType.content, }); if (!editResult.Success || editResult.ScoInfo == null) { if ((editResult.Status.SubCode == StatusSubCodes.duplicate) && (editResult.Status.InvalidField == "name")) { return(OperationResult.Error(Resources.Messages.NotUniqueName)); } return(OperationResult.Error(editResult.Status.GetErrorInfo())); } return(OperationResult.Success()); }
public ScoInfo CreateSeminar(SeminarUpdateItem seminar, IAdobeConnectProxy provider) { if (provider == null) { throw new ArgumentNullException(nameof(provider)); } if (seminar == null) { throw new ArgumentNullException(nameof(seminar)); } if (!string.IsNullOrWhiteSpace(seminar.ScoId)) { throw new ArgumentException("sco-id should be empty.", nameof(seminar)); } ScoInfoResult result = provider.CreateSco(seminar); return(ProcessResult(result)); }
private static ScoInfo ProcessResult(ScoInfoResult result) { if (!result.Success || result.ScoInfo == null) { if ((result.Status.SubCode == StatusSubCodes.duplicate) && (result.Status.InvalidField == "name")) { throw new WarningMessageException(Resources.Messages.MeetingNotUniqueName); } if ((result.Status.SubCode == StatusSubCodes.duplicate) && (result.Status.InvalidField == "url-path")) { throw new WarningMessageException(Resources.Messages.MeetingNotUniqueUrlPath); } if (result.Status.SubCode == StatusSubCodes.session_schedule_conflict) { throw new WarningMessageException(Resources.Messages.SessionScheduleConflict); } throw new WarningMessageException(result.Status.GetErrorInfo()); } return(result.ScoInfo); }
private string SetupSharedMeetingsFolder(LmsCompany lmsCompany, LmsProvider lmsProvider, IAdobeConnectProxy provider) { string ltiFolderSco = null; string name = lmsCompany.UserFolderName ?? lmsProvider.LmsProviderName; name = name.TruncateIfMoreThen(60); bool useDbFolderId = MeetingTypeFactory.UseDbMeetingFolderId(_lmsMeetingType); if (useDbFolderId && !string.IsNullOrWhiteSpace(lmsCompany.ACScoId)) { ScoInfoResult meetingsFolder = provider.GetScoInfo(lmsCompany.ACScoId); if (meetingsFolder.Success && meetingsFolder.ScoInfo != null) { if (meetingsFolder.ScoInfo.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) { ltiFolderSco = meetingsFolder.ScoInfo.ScoId; } else { ScoInfoResult updatedSco = provider.UpdateSco( new FolderUpdateItem { ScoId = meetingsFolder.ScoInfo.ScoId, Name = name, FolderId = meetingsFolder.ScoInfo.FolderId, Type = ScoType.folder }); if (updatedSco.Success && updatedSco.ScoInfo != null) { ltiFolderSco = updatedSco.ScoInfo.ScoId; } } } } if (ltiFolderSco == null) { var shortcutName = MeetingTypeFactory.GetMeetingFolderShortcut(_lmsMeetingType, false).GetACEnum(); ScoContentCollectionResult sharedMeetings = provider.GetContentsByType(shortcutName); if (sharedMeetings.ScoId != null && sharedMeetings.Values != null) { ScoContent existingFolder = sharedMeetings.Values.FirstOrDefault(v => v.Name.Equals(name, StringComparison.OrdinalIgnoreCase) && v.IsFolder); if (existingFolder != null) { ltiFolderSco = existingFolder.ScoId; } else { ScoInfoResult newFolder = provider.CreateSco(new FolderUpdateItem { Name = name, FolderId = sharedMeetings.ScoId, Type = ScoType.folder }); if (newFolder.Success && newFolder.ScoInfo != null) { provider.UpdatePublicAccessPermissions(newFolder.ScoInfo.ScoId, SpecialPermissionId.denied); ltiFolderSco = newFolder.ScoInfo.ScoId; } } } if (ltiFolderSco != null && useDbFolderId) { lmsCompany.ACScoId = ltiFolderSco; } } return(ltiFolderSco); }
public async Task <HttpResponseMessage> UploadFile(string folderScoId) { if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } var provider = new MultipartFormDataMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); string name = provider.FormData["name"]; string description = provider.FormData["description"]; string customUrl = provider.FormData["customUrl"]; if (!provider.FileStreams.Any()) { throw new HttpResponseException(HttpStatusCode.BadRequest); //return Content(HttpStatusCode.BadRequest, "No file uploaded"); } if (provider.FileStreams.Count != 1) { throw new HttpResponseException(HttpStatusCode.BadRequest); //return Content(HttpStatusCode.BadRequest, "Single file expected"); } try { string fileName = provider.FileStreams.First().Key; MultipartFormDataMemoryStreamProvider.FileContent stream = provider.FileStreams.First().Value; var ac = this.GetUserProvider(); var contentService = new ContentService(Logger, ac); var helper = new ContentEditControllerHelper(Logger, ac); int fileSize; ScoInfoResult createdFile = helper.UploadFile(folderScoId, name, description, customUrl, fileName, stream.ContentType, stream.Stream, out fileSize); var sco = ac.GetScoContent(createdFile.ScoInfo.ScoId); var dto = new ScoContentDtoMapper().Map(sco.ScoContent); //TRICK: dto.ByteCount = fileSize; string output = JsonSerializer.JsonSerialize(dto.ToSuccessResult()); var response = new HttpResponseMessage(); response.Content = new StringContent(output); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return(response); } catch (Exception ex) { IUserMessageException userError = ex as IUserMessageException; if (userError != null) { string output = JsonSerializer.JsonSerialize(OperationResultWithData <ScoContentDto> .Error(ex.Message)); //JsonConvert.SerializeObject(OperationResultWithData<ScoContentDto>.Error(ex.Message)); var response = new HttpResponseMessage(); response.Content = new StringContent(output); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return(response); } throw; } }
public ScoInfoResult UploadFile(string folderScoId, string name, string description, string customUrl, string fileName, string fileContentType, Stream fileStream, out int fileSize) { try { var createFile = new ContentUpdateItem { FolderId = folderScoId, Name = name, Description = description, UrlPath = customUrl, Type = ScoType.content, }; ScoInfoResult createdFile = _acProxy.CreateSco(createFile); if (!createdFile.Success || createdFile.ScoInfo == null) { if ((createdFile.Status.SubCode == StatusSubCodes.duplicate) && (createdFile.Status.InvalidField == "name")) { throw new WarningMessageException(Resources.Messages.NameNotUnique); } if ((createdFile.Status.SubCode == StatusSubCodes.duplicate) && (createdFile.Status.InvalidField == "url-path")) { throw new WarningMessageException(Resources.Messages.UrlPathNotUnique); } if ((createdFile.Status.SubCode == StatusSubCodes.illegal_operation) && (createdFile.Status.InvalidField == "url-path")) { throw new WarningMessageException(Resources.Messages.UrlPathReserved); } if ((createdFile.Status.SubCode == StatusSubCodes.format) && (createdFile.Status.InvalidField == "url-path")) { throw new WarningMessageException(Resources.Messages.UrlPathInvalidFormat); } _logger.Error("UploadFile.CreateSco error. " + createdFile.Status.GetErrorInfo()); throw new WarningMessageException(createdFile.Status.Code.ToString() + " " + createdFile.Status.SubCode.ToString()); } var uploadScoInfo = new UploadScoInfo { scoId = createdFile.ScoInfo.ScoId, fileContentType = fileContentType, fileName = fileName, fileBytes = fileStream.ReadToEnd(), title = fileName, }; // TRICK: fileSize = uploadScoInfo.fileBytes.Length; try { StatusInfo uploadResult = _acProxy.UploadContent(uploadScoInfo); } catch (AdobeConnectException ex) { try { _acProxy.DeleteSco(createdFile.ScoInfo.ScoId); } catch { } // Status.Code: invalid. Status.SubCode: format. Invalid Field: file if (ex.Status.Code == StatusCodes.invalid && ex.Status.SubCode == StatusSubCodes.format && ex.Status.InvalidField == "file") { throw new WarningMessageException(Resources.Messages.FileInvalidFormat); } throw new WarningMessageException("Error occured during file uploading.", ex); } return(createdFile); } catch (Exception ex) { _logger.Error("UploadFile", ex); throw; } }
/// <summary> /// The get model. /// </summary> /// <param name="scoInfoResult"> /// The sco info. /// </param> /// <returns> /// The <see cref="T"/>. /// </returns> protected abstract T GetModel(ScoInfoResult scoInfoResult);