示例#1
0
        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);
        }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
        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);
                }
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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
            }));
        }