private List <CanvasUserModel> GetUsersInSection(string canvasSectionId) { using (var client = new WebClient()) { string getCourseURL = CanvasUrl + "sections/" + canvasSectionId + "/enrollments/?per_page=999999999999&access_token=" + OAuthKey; var json = client.DownloadString(getCourseURL); var serializer = new JavaScriptSerializer(); List <CanvasEnrollmentModel> enrollments = serializer.Deserialize <List <CanvasEnrollmentModel> >(json); List <CanvasUserModel> users = new List <CanvasUserModel>(); foreach (CanvasEnrollmentModel enrollment in enrollments) { CanvasUserModel user = GetUserById(enrollment.user_id); if (user != null) { users.Add(user); } } return(users); } return(null); }
private void AssignTeacherToCourse(int funiq, string courseId, int schuniq) { User facUser = SISdb.Users.FirstOrDefault(u => u.funiq == funiq); CanvasUserModel teacher = GetUserBySISId(facUser.Username); if (teacher == null) { teacher = CreateCanvasTeacher(funiq, schuniq); } string enrollmentJson = "{\"enrollment\": {" + "\"user_id\": \"" + teacher.id + "\"," + "\"type\": \"TeacherEnrollment\"," + "\"enrollment_state\": \"active\"," + //when we go live this should be true. "\"notify\": \"false\"}}"; //send the data string createEnrollmentURL = CanvasUrl + "courses/" + courseId + "/enrollments?access_token=" + OAuthKey; var httpWebRequest = (HttpWebRequest)WebRequest.Create(createEnrollmentURL); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; CanvasEnrollmentModel newEnrollment = new CanvasEnrollmentModel(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(enrollmentJson); streamWriter.Flush(); streamWriter.Close(); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var serializer = new JsonSerializer(); using (var jsonTextReader = new JsonTextReader(streamReader)) { newEnrollment = serializer.Deserialize <CanvasEnrollmentModel>(jsonTextReader); } } } }
private CanvasUserModel GetUserBySISId(string sisId) { CanvasUserModel user = new CanvasUserModel(); using (var client = new WebClient()) { try { string getUserURL = CanvasUrl + "users/sis_user_id:" + sisId + "/profile?access_token=" + OAuthKey; var json = client.DownloadString(getUserURL); var serializer = new JavaScriptSerializer(); user = serializer.Deserialize <CanvasUserModel>(json); return(user); } catch (Exception e) { return(null); } } }
private CanvasUserModel CreateCanvasUser(int suniq, int schuniq) { school sisSchool = SISdb.schools.Find(schuniq); //get the account id int accountId; AccountIDs.TryGetValue(sisSchool.schoolc, out accountId); //make sure the user doesn't exist CanvasUserModel user = GetUserBySISId(suniq.ToString()); if (user != null) { //the user exists return(user); } //the user does not exist studemo student = SISdb.studemoes.Find(suniq); string password = student.FirstName.Substring(0, 1).ToUpper() + student.LastName.Substring(0, 1).ToLower() + student.suniq.ToString().Substring(student.suniq.ToString().Length - 4); string userJson = "{\"user\": {" + "\"name\": \"" + student.FirstName.Trim() + " " + student.LastName.Trim() + "\"," + "\"short_name\": \"" + student.PreferredFirstName.Trim() + "\"," + "\"sortable_name\": \"" + student.LastName.Trim() + ", " + student.FirstName.Trim() + "\"}," + "\"pseudonym\": {" + "\"unique_id\": \"" + student.emailaddr + "\"," + "\"password\": \"" + password + "\"," + "\"sis_user_id\": \"" + suniq + "\"," + //this should be set to true on live "\"send_confirmation\": \"false\"}," + "\"communication_channel\": {" + "\"type\":\"email\"," + "\"address\": \"" + student.emailaddr + "\"," + "\"skip_confirmation\": \"true\"}}"; //send the data string createUserURL = CanvasUrl + "accounts/" + accountId + "/users?access_token=" + OAuthKey; var httpWebRequest = (HttpWebRequest)WebRequest.Create(createUserURL); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; CanvasUserModel newUser = new CanvasUserModel(); try { using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(userJson); streamWriter.Flush(); streamWriter.Close(); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var serializer = new JsonSerializer(); using (var jsonTextReader = new JsonTextReader(streamReader)) { newUser = serializer.Deserialize <CanvasUserModel>(jsonTextReader); } } } } catch (Exception e) { newUser = null; } return(newUser); }
public JsonResult UpdateStudentsInSection(string mstuniq) { int usersAdded = 0; int usersRemoved = 0; int usersLeftAlone = 0; int usersWithErrors = 0; List <studemo> errorUsers = new List <studemo>(); //calculate the school year int schoolYear = Convert.ToInt32(SISdb.schools.Max(s => s.schyear)); mstsched period = SISdb.mstscheds.Find(Convert.ToInt32(mstuniq)); if (period == null) { return(Json(new { success = "false", message = "Period does not exist in SIS!" })); } CanvasSectionModel section = GetSectionBySISId(schoolYear + ":" + mstuniq + ":" + period.facdemo.funiq); if (section == null) { return(Json(new { success = "false", message = "Section does not exist in Canvas!" })); } //get the students in the section in canvas List <CanvasUserModel> users = GetUsersInSection(section.id); List <CanvasUserModel> usersNotInSIS = GetUsersInSection(section.id); //get the students in the period in sis DateTime tomorrow = DateTime.Now.AddDays(-365); var vStuSched = SISdb.stuscheds.Where(s => s.mstmeet.mstuniq == period.mstuniq && (s.xdate >= tomorrow || s.xdate == null)); foreach (stusched student in vStuSched) { //check to see if they are in the section CanvasUserModel canvasStudent = users.Find(u => u.sis_user_id == student.suniq.ToString()); if (canvasStudent == null) { //add the student //see if student exists in canvas canvasStudent = GetUserBySISId(student.suniq.ToString()); if (canvasStudent == null) { //create the user school sisSchool = SISdb.schools.First(s => s.schoolc == period.trkcr.track.schoolc); canvasStudent = CreateCanvasUser(student.suniq, sisSchool.schuniq); } if (canvasStudent != null) { //enroll the current user EnrollStudentInSection(canvasStudent.id, section.id); usersAdded++; } else { errorUsers.Add(student.studemo); usersWithErrors++; } } else { //student is in sis and the course in canvas do nothing with them. usersLeftAlone++; } if (canvasStudent != null) { usersNotInSIS.RemoveAll(c => c.id == canvasStudent.id); } } foreach (CanvasUserModel canvasStudent in usersNotInSIS) { UnEnrollStudentFromSection(canvasStudent.id, section.course_id); usersRemoved++; } if (errorUsers.Any()) { string message = "These users failed to enroll, likely because they are deleted in canvas: <br /><ul>"; foreach (studemo errorUser in errorUsers) { message += "<li>" + errorUser.FirstName + " " + errorUser.LastName + " Email Address:" + errorUser.emailaddr + "</li>"; } message += "</ul>"; EmailSender.EmailSender.sendTemplatedMessage("*****@*****.**", Globals.EMAIL_ADDRESSES, "Failed to enroll students in class", message, "High"); } return(Json(new { success = "true", studentsAdded = usersAdded, studentsRemoved = usersRemoved, studentsLeftAlone = usersLeftAlone, studentsCurrentlyEnrolled = vStuSched.Count(), studentsWithErrors = usersWithErrors })); }