public string UpdateName(LmsCourseMeeting meeting, string lmsMeetingTitle) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (string.IsNullOrWhiteSpace(lmsMeetingTitle)) { throw new ArgumentException("Meeting Title is required", nameof(lmsMeetingTitle)); } MeetingNameInfo nameInfo = _nameInfoDeserializer.JsonDeserialize <MeetingNameInfo>(meeting.MeetingNameJson); nameInfo.meetingName = lmsMeetingTitle; meeting.MeetingNameJson = _nameInfoSerializer.JsonSerialize(nameInfo); if (meeting.LmsMeetingType == (int)LmsMeetingType.OfficeHours) { return(lmsMeetingTitle.TruncateIfMoreThen(60)); } int extraDataLength = ((string)nameInfo.courseNum).Length + ": ".Length + " - ".Length + ((string)nameInfo.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}", (string)nameInfo.courseNum, lmsMeetingTitle.TruncateIfMoreThen(60 - extraDataLength), (string)nameInfo.courseId)); }
public async Task <MeetingSessionDTO> CreateSessionAsync(int meetingId, LtiParamDTO param) { LmsCourseMeeting meeting = _lmsCourseMeetingModel.GetOneById(meetingId).Value; MeetingNameInfo nameInfo = string.IsNullOrWhiteSpace(meeting.MeetingNameJson) ? new MeetingNameInfo() : JsonConvert.DeserializeObject <MeetingNameInfo>(meeting.MeetingNameJson); var lastEvent = meeting.MeetingSessions.OrderByDescending(x => x.StartDate).FirstOrDefault(); DateTime startDate = DateTime.UtcNow.AddHours(1); DateTime endDate = startDate.AddHours(1); if (lastEvent != null) { startDate = lastEvent.StartDate.AddDays(1); endDate = lastEvent.EndDate.AddDays(1); } var ev = new MeetingSessionDTO { Name = nameInfo.meetingName + " #", Summary = string.Empty, StartDate = startDate, EndDate = endDate, }; if (_calendarExportService != null) { var sakaiEventResult = await _calendarExportService.SaveEventsAsync(meetingId, new MeetingSessionDTO[] { ev }, param, _license); ev = sakaiEventResult.Single(); } var dbEvent = new LmsMeetingSession { LmsCalendarEventId = ev.EventId, Name = ev.Name, StartDate = ev.StartDate, EndDate = ev.EndDate, LmsCourseMeeting = meeting, }; if (_calendarEventService != null) { var lmsSettings = _license.GetLMSSettings(Settings); LmsCalendarEventDTO calendarEventDto = new LmsCalendarEventDTO() { Title = dbEvent.Name, StartAt = dbEvent.StartDate, EndAt = dbEvent.EndDate }; LmsCalendarEventDTO newClaendarEventDto = await _calendarEventService.CreateEvent(param.course_id.ToString(), lmsSettings, calendarEventDto); dbEvent.LmsCalendarEventId = newClaendarEventDto?.Id; } meeting.MeetingSessions.Add(dbEvent); _lmsCourseMeetingModel.RegisterSave(meeting, true); return(ConvertFromEntity(dbEvent)); }
public string UpdateName(LmsCourseMeeting meeting, string lmsMeetingTitle) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (string.IsNullOrWhiteSpace(lmsMeetingTitle)) { throw new ArgumentException("Meeting Title is required", nameof(lmsMeetingTitle)); } MeetingNameInfo nameInfo = _nameInfoDeserializer.JsonDeserialize <MeetingNameInfo>(meeting.MeetingNameJson); nameInfo.meetingName = lmsMeetingTitle; meeting.MeetingNameJson = _nameInfoSerializer.JsonSerialize(nameInfo); return(lmsMeetingTitle.TruncateIfMoreThen(60)); }
public string UpdateName(LmsCourseMeeting meeting, string lmsMeetingTitle) { if (meeting == null) { throw new ArgumentNullException(nameof(meeting)); } if (string.IsNullOrWhiteSpace(lmsMeetingTitle)) { throw new ArgumentException("Meeting Title is required", nameof(lmsMeetingTitle)); } MeetingNameInfo nameInfo = _nameInfoDeserializer.JsonDeserialize <MeetingNameInfo>(meeting.MeetingNameJson); nameInfo.meetingName = lmsMeetingTitle; meeting.MeetingNameJson = _nameInfoSerializer.JsonSerialize(nameInfo); if (meeting.LmsMeetingType == (int)LmsMeetingType.OfficeHours) { return(lmsMeetingTitle.TruncateIfMoreThen(60)); } return(string.Format("{0}: {1}", (string)nameInfo.courseNum, lmsMeetingTitle).TruncateIfMoreThen(60)); }
public async Task <IEnumerable <MeetingSessionDTO> > CreateBatchAsync(CreateMeetingSessionsBatchDto dto, LtiParamDTO param) { LmsCourseMeeting meeting = _lmsCourseMeetingModel.GetOneById(dto.MeetingId).Value; DateTime startDate = dto.StartTimestamp; if (dto.StartTimestamp < DateTime.UtcNow) //todo: remove these crazy conditions and parsing { throw new ArgumentException("Start time should be more then current time"); } var endDate = TimeSpan.TryParse(dto.Duration, out var duration) ? startDate.AddMinutes((int)duration.TotalMinutes) : startDate.AddHours(1); MeetingNameInfo nameInfo = string.IsNullOrWhiteSpace(meeting.MeetingNameJson) ? new MeetingNameInfo() : JsonConvert.DeserializeObject <MeetingNameInfo>(meeting.MeetingNameJson); var meetingName = nameInfo.meetingName ?? nameInfo.reusedMeetingName; int i = 1; var latestDateToCheck = startDate.AddDays(dto.Weeks * 7); var listOfEvents = new List <MeetingSessionDTO>(); while (startDate < latestDateToCheck) { if (dto.DaysOfWeek.Contains((int)startDate.DayOfWeek)) { var ev = new MeetingSessionDTO { Name = meetingName + " #" + i.ToString(), Summary = string.Empty, StartDate = startDate, //.ToString("yyyy-MM-dd HH:mm"), EndDate = endDate, //.ToString("yyyy-MM-dd HH:mm"), }; listOfEvents.Add(ev); i++; } startDate = startDate.AddDays(1); endDate = endDate.AddDays(1); } if (_calendarExportService != null) { listOfEvents = (await _calendarExportService.SaveEventsAsync(meeting.Id, listOfEvents, param, _license)) .ToList(); } meeting.MeetingSessions.AddRange(listOfEvents.Select(x => new LmsMeetingSession { LmsCalendarEventId = x.EventId, Name = x.Name, StartDate = x.StartDate, EndDate = x.EndDate, LmsCourseMeeting = meeting })); await CreateCalendarEvents(param, meeting); _lmsCourseMeetingModel.RegisterSave(meeting, true); return(meeting.MeetingSessions.Select(ConvertFromEntity).ToArray()); }
public MeetingDTOInput Build(LmsCourseMeeting existed, ScoInfo sco) { if (existed == null) { throw new ArgumentNullException(nameof(existed)); } if (sco == null) { throw new ArgumentNullException(nameof(sco)); } if (string.IsNullOrWhiteSpace(Duration)) { Duration = null; } if (string.IsNullOrWhiteSpace(Name)) { Name = null; } if (string.IsNullOrWhiteSpace(StartDate)) { StartDate = null; } if (string.IsNullOrWhiteSpace(StartTime)) { StartTime = null; } if (string.IsNullOrWhiteSpace(Summary)) { Summary = null; } MeetingNameInfo nameInfo = IoC.Resolve <IJsonDeserializer>().JsonDeserialize <MeetingNameInfo>(existed.MeetingNameJson); // NOTE: it is reused meeting or source of reusing string meetingName = string.IsNullOrWhiteSpace(nameInfo.reusedMeetingName) ? nameInfo.meetingName : nameInfo.reusedMeetingName; var start = sco.BeginDateOffset.Value; //string format = sco.Language == "es" ? "dd/MM/yy" : "MM/dd/yy"; string format = "MM-dd-yyyy"; return(new MeetingDTOInput { AccessLevel = "view_hidden", // TODO??? AcRoomUrl = sco.UrlPath.Trim('/'), //AudioProfileId = existed.AudioProfileId, //AudioProfileName //CanJoin //ClassRoomId Duration = Duration ?? (sco.EndDate - sco.BeginDate).ToString(@"h\:mm"), Id = Id, //IsDisabledForThisCourse //IsEditable Name = Name ?? meetingName, //OfficeHours //Reused //ReusedByAnotherMeeting //SectionIds //Sessions StartDate = StartDate ?? start.ToString(format), StartTime = StartTime ?? start.ToString("hh:mm tt"), //StartTimeStamp Summary = Summary ?? sco.Description, //TelephonyProfileFields //Template = Template, Type = (int)LmsMeetingType.Meeting, }); }