Exemple #1
0
        private bool TestSchoologyConnection(ConnectionTestDTO test, out string info)
        {
            if (!TestDomainFormat(test, out info))
            {
                return(false);
            }

            try
            {
                Task <dynamic> task    = Task.Run <dynamic>(async() => await _schoologyClient.GetRestCall <dynamic>(test.login, test.password, "courses"));
                var            courses = task.Result;
                return(courses != null);
            }
            catch (AggregateException ex)
            {
                _logger.Error("[TestSchoologyConnection]", ex);
                if (ex.InnerExceptions.First() is HttpRequestException reqEx)
                {
                    info = reqEx.Message;
                }
                return(false);
            }
        }
Exemple #2
0
        public override async Task <(List <LmsUserDTO> users, string error)> GetUsersOldStyle(ILmsLicense lmsCompany,
                                                                                              int courseId, LtiParamDTO param = null)
        {
            if (lmsCompany == null)
            {
                throw new ArgumentNullException(nameof(lmsCompany));
            }

            //var course = _restApiClient.GetRestCall<RootObject>(lmsCompany.AdminUser.Username,
            //    lmsCompany.AdminUser.Password,
            //    $"courses/{courseId}/sections").Result;

            string clientId     = lmsCompany.GetSetting <string>(LmsCompanySettingNames.SchoologyConsumerKey);
            string clientSecret = lmsCompany.GetSetting <string>(LmsCompanySettingNames.SchoologyConsumerSecret);

            var section = await _restApiClient.GetRestCall <Section>(clientId,
                                                                     clientSecret,
                                                                     $"sections/{courseId}");

            List <Enrollment> enrollments = new List <Enrollment>();
            RootObject2       enrollmentCallResult;
            int startPage = 0;
            int pageSize  = 20;

            do
            {
                enrollmentCallResult = await _restApiClient.GetRestCall <RootObject2>(clientId,
                                                                                      clientSecret,
                                                                                      $"sections/{section.id}/enrollments?start={startPage}&limit={pageSize}");

                enrollments.AddRange(enrollmentCallResult.enrollment);

                startPage += pageSize;
            } while (enrollments.Count < Int32.Parse(enrollmentCallResult.total));

            //https://developers.schoology.com/api-documentation/rest-api-v1/enrollment
            //status 5: Archived (Course specific status members can be placed in before being fully unenrolled)
            enrollments = enrollments.Distinct().Where(e => e.status != "5").ToList();

            var enrolledUserTasks = enrollments.GroupBy(u => u.uid).Select(g => g.First()).Select(enrollment =>
            {
                var usr = new SchoologyRestApiClient().GetRestCall <User>(clientId,
                                                                          clientSecret,
                                                                          $"users/{enrollment.uid}");
                return(usr.ContinueWith(x =>
                {
                    var u = x.Result;
                    u.admin = enrollment.admin;
                    return u;
                }));
            });

            var enrolledUsers = await Task.WhenAll(enrolledUserTasks);

            var users = enrolledUsers
                        .GroupBy(u => u.uid)
                        .Select(g => g.First())
                        .Select(x => new LmsUserDTO
            {
                Id    = x.uid,
                Login = string.IsNullOrWhiteSpace(x.username) ? x.primary_email : x.username,
                // TODO: middle name
                Name         = x.name_first + " " + x.name_last,
                Email        = x.primary_email,
                LmsRole      = x.admin == 1 ? "Teacher" : "Student",
                PrimaryEmail = x.primary_email,
            })
                        .ToList();

            return(users, null);
        }