예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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());
        }
예제 #6
0
            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,
                });
            }