private MeetingDTO SaveMeeting(CanvasConnectCredentials credentials, int courseId, AdobeConnectProvider provider, MeetingDTO meetingDTO) { var meeting = this.CanvasCourseMeetingModel.GetOneByCourseId(credentials.Id, courseId).Value ?? new CanvasCourseMeeting() { CanvasConnectCredentialsId = credentials.Id, CourseId = courseId }; var meetingItem = new MeetingUpdateItem() { ScoId = meeting.ScoId }; //meetingItem.DateBegin = DateTime.Now.ToString(); //meetingItem.DateEnd = DateTime.Now.AddDays(1).ToString(); meetingItem.Name = String.Format("{0} [{1}] {2}", DateTime.Now.ToString("MM.dd.yy "), Model.context_label, meetingDTO.name); meetingItem.Description = meetingDTO.summary; meetingItem.UrlPath = meetingDTO.ac_room_url; DateTime startDate, startTime, dateBegin; /* * if (DateTime.TryParse(meetingDTO.start_date, out startDate) * && DateTime.TryParse(meetingDTO.start_time, out startTime)) */ if (meetingDTO.start_time.IndexOf(":") == 1) { meetingDTO.start_time = "0" + meetingDTO.start_time; } var oldStartDate = meetingDTO.start_date; if (meetingDTO.start_date != null) { meetingDTO.start_date = meetingDTO.start_date.Substring(6, 4) + "-" + meetingDTO.start_date.Substring(0, 5); } if (DateTime.TryParse(meetingDTO.start_date + " " + meetingDTO.start_time, out dateBegin)) { /* * var dateBegin = new DateTime( * startDate.Year, * startDate.Month, * startDate.Day, * startTime.Hour, * startTime.Minute, * startTime.Second); */ meetingItem.DateBegin = dateBegin.ToString("yyyy-MM-ddTHH:mm:ssZ"); TimeSpan duration; if (TimeSpan.TryParse(meetingDTO.duration, out duration)) { meetingItem.DateEnd = dateBegin.AddMinutes((int)duration.TotalMinutes).ToString("yyyy-MM-ddTHH:mm:ssZ"); } } meetingItem.FolderId = credentials.ACScoId; meetingItem.Language = "en"; meetingItem.Type = ScoType.meeting; meetingItem.SourceScoId = meetingDTO.template; var result = meeting.ScoId != null? provider.UpdateSco(meetingItem) : provider.CreateSco(meetingItem); if (result.ScoInfo != null) { meetingDTO.id = result.ScoInfo.ScoId; } if (meetingItem.ScoId == null && result.ScoInfo != null) { meeting.ScoId = result.ScoInfo.ScoId; this.CanvasCourseMeetingModel.RegisterSave(meeting); var users = CourseAPI.GetUsersForCourse(Credentials.CanvasDomain, credentials.CanvasToken, courseId); this.SetDefaultUsers(users, provider, result.ScoInfo.ScoId); if (Credentials.CanvasDomain.IndexOf("canvas") > -1 && !String.IsNullOrEmpty(Model.context_title)) { var rets = CourseAPI.CreateAnnouncement( Credentials.CanvasDomain, Credentials.CanvasToken, Model.custom_canvas_course_id, String.Format("A new Adobe Connect room was created for course {0}", Model.context_title), String.Format("Meeting \"{0}\" will start {1} at {2}. It's duration will be {3}. You can join it in your Adobe Connect Conference section.", meetingDTO.name, oldStartDate, meetingDTO.start_time, meetingDTO.duration)); } } if (result.ScoInfo != null) { var specialPermissionId = meetingDTO.access_level == "denied" ? SpecialPermissionId.denied : (meetingDTO.access_level == "view_hidden" ? SpecialPermissionId.view_hidden : SpecialPermissionId.remove); provider.UpdatePublicAccessPermissions(result.ScoInfo.ScoId, specialPermissionId); var permission = provider.GetScoPublicAccessPermissions(result.ScoInfo.ScoId).Values; return(this.GetMeetingDTOByScoInfo(result.ScoInfo, permission)); } else { return(new MeetingDTO() { id = "0", connect_server = Credentials.ACDomain }); } }
public CourseRepository(CourseAPI api, DataProvider dataProvider) { this.api = api; this.dataProvider = dataProvider; }
public JsonResult GetUsers() { var users = CourseAPI.GetUsersForCourse(Credentials.CanvasDomain, Credentials.CanvasToken, Model.custom_canvas_course_id); users = users.GroupBy(u => u.id).Select( ug => { var teacher = ug.FirstOrDefault(u => u.canvas_role.ToLower() == "teacher"); if (teacher != null) { return(teacher); } teacher = ug.FirstOrDefault(u => u.canvas_role.ToLower() == "ta"); if (teacher != null) { return(teacher); } teacher = ug.FirstOrDefault(u => u.canvas_role.ToLower() == "designer"); if (teacher != null) { return(teacher); } teacher = ug.FirstOrDefault(u => u.canvas_role.ToLower() == "student"); if (teacher != null) { return(teacher); } return(ug.First()); }).ToList(); var meeting = this.CanvasCourseMeetingModel.GetOneByCourseId(Credentials.Id, Model.custom_canvas_course_id).Value; if (meeting == null) { return(this.Json(users)); } var provider = this.GetProvider(); PermissionCollectionResult hosts = provider.GetMeetingHosts(meeting.ScoId), participants = provider.GetMeetingParticipants(meeting.ScoId), presenters = provider.GetMeetingPresenters(meeting.ScoId); foreach (var user in users) { if (user.login_id == null && user.email == null) { //user.ac_role = "not_allowed"; continue; } ; var acUser = provider.GetAllByEmail(HttpUtility.UrlEncode(user.login_id ?? user.email)); if (acUser.Values == null || !acUser.Values.Any()) { //user.ac_role = "not_allowed"; continue; } user.ac_id = acUser.Values.First().PrincipalId; if (hosts.Values != null && hosts.Values.Any(v => v.PrincipalId == user.ac_id)) { user.ac_role = "Host"; hosts.Values = hosts.Values.Where(v => v.PrincipalId != user.ac_id).ToList(); } else if (presenters.Values != null && presenters.Values.Any(v => v.PrincipalId == user.ac_id)) { user.ac_role = "Presenter"; presenters.Values = presenters.Values.Where(v => v.PrincipalId != user.ac_id).ToList(); } else if (participants.Values != null && participants.Values.Any(v => v.PrincipalId == user.ac_id)) { user.ac_role = "Participant"; participants.Values = participants.Values.Where(v => v.PrincipalId != user.ac_id).ToList(); } } foreach (var u in hosts.Values) { users.Add(new UserDTO() { ac_id = u.PrincipalId, name = u.Name, ac_role = "Host" }); } foreach (var u in presenters.Values) { users.Add(new UserDTO() { ac_id = u.PrincipalId, name = u.Name, ac_role = "Presenter" }); } foreach (var u in participants.Values) { users.Add(new UserDTO() { ac_id = u.PrincipalId, name = u.Name, ac_role = "Participant" }); } return(Json(users)); }