コード例 #1
0
        public override async Task <OperationResultWithData <List <LmsUserDTO> > > GetUsers(Dictionary <string, object> licenseSettings,
                                                                                            string courseId, ILtiUserListParam param = null)
        {
            if (licenseSettings == null)
            {
                throw new ArgumentNullException(nameof(licenseSettings));
            }

            if (string.IsNullOrEmpty((string)licenseSettings[LmsUserSettingNames.Token]))
            {
                Logger.WarnFormat("[GetD2LUsers]: Admin Token does not exist for LmsCompany key: {1}.", licenseSettings[LmsLicenseSettingNames.LicenseKey]);
                throw new WarningMessageException(Resources.Messages.NoLicenseAdmin);
            }

            string[] tokens = ((string)licenseSettings[LmsUserSettingNames.Token]).Split(' ');

            // get course users list
            var classlistEnrollments = d2lApiService.GetApiObjects <List <ClasslistUser> >(
                tokens[0],
                tokens[1],
                (string)licenseSettings[LmsLicenseSettingNames.LmsDomain],
                string.Format(
                    d2lApiService.EnrollmentsClasslistUrlFormat,
                    (string)this.settings.BrightspaceApiVersion,
                    courseId),
                licenseSettings);

            // mapping to LmsUserDTO
            var result = new List <LmsUserDTO>();

            if (classlistEnrollments != null)
            {
                // get enrollments - this information contains user roles
                var enrollmentsList = new List <OrgUnitUser>();
                PagedResultSet <OrgUnitUser> enrollments = null;
                do
                {
                    enrollments = d2lApiService.GetApiObjects <PagedResultSet <OrgUnitUser> >(
                        tokens[0],
                        tokens[1],
                        (string)licenseSettings[LmsLicenseSettingNames.LmsDomain],
                        string.Format(
                            d2lApiService.EnrollmentsUrlFormat,
                            (string)this.settings.BrightspaceApiVersion,
                            courseId)
                        + (enrollments != null ? "?bookmark=" + enrollments.PagingInfo.Bookmark : string.Empty),
                        licenseSettings);
                    if (enrollments == null || enrollments.Items == null)
                    {
                        var error = "Incorrect API call or returned data. Please contact site administrator";
                        Logger.Error("[D2L Enrollments]: Object returned from API has null value");
                        return(OperationResultWithData <List <LmsUserDTO> > .Error(error));
                    }

                    enrollmentsList.AddRange(enrollments.Items);
                } while (enrollments.PagingInfo.HasMoreItems && !string.IsNullOrEmpty(enrollments.PagingInfo.Bookmark));


                string currentLmsUserId = param?.lms_user_id;

                // current user is not enrolled to this course (user is admin) -> add him to user list
                if (AllowAdminAdditionToCourse && classlistEnrollments.All(x => x.Identifier != currentLmsUserId))
                {
                    var currentLmsUser = lmsUserModel.GetOneByUserIdAndCompanyLms(currentLmsUserId, (int)licenseSettings[LmsLicenseSettingNames.LicenseId]).Value;

                    if ((currentLmsUser != null) && !string.IsNullOrEmpty(currentLmsUser.Token))
                    {
                        string[] currentUserTokens = currentLmsUser.Token.Split(' ');

                        var currentUserInfo = d2lApiService.GetApiObjects <WhoAmIUser>(
                            currentUserTokens[0],
                            currentUserTokens[1],
                            (string)licenseSettings[LmsLicenseSettingNames.LmsDomain],
                            string.Format(d2lApiService.WhoAmIUrlFormat, (string)this.settings.BrightspaceApiVersion),
                            licenseSettings);

                        if (currentUserInfo != null)
                        {
                            //
                            var userInfo = d2lApiService.GetApiObjects <UserData>(tokens[0], tokens[1],
                                                                                  (string)licenseSettings[LmsLicenseSettingNames.LmsDomain],
                                                                                  string.Format(d2lApiService.GetUserUrlFormat, (string)this.settings.BrightspaceApiVersion,
                                                                                                currentUserInfo.Identifier),
                                                                                  licenseSettings);

                            classlistEnrollments.Add(
                                new ClasslistUser
                            {
                                Identifier  = currentUserInfo.Identifier,
                                Username    = currentUserInfo.UniqueName,
                                DisplayName = currentUserInfo.FirstName + " " + currentUserInfo.LastName,
                                Email       = userInfo.ExternalEmail, // TODO: is it OK??
                            });
                        }
                    }
                }

                foreach (ClasslistUser enrollment in classlistEnrollments)
                {
                    OrgUnitUser userInfo =
                        enrollmentsList.FirstOrDefault(e => e.User.Identifier == enrollment.Identifier);

                    var user = new LmsUserDTO
                    {
                        Id      = enrollment.Identifier,
                        Login   = enrollment.Username,
                        Name    = enrollment.GetValidFullName(),
                        Email   = enrollment.Email ?? userInfo?.User.EmailAddress,
                        LmsRole = userInfo != null ? userInfo.Role.Name : "Unknown",
                    };
                    result.Add(user);
                }
            }

            return(result.ToSuccessResult());
        }
コード例 #2
0
        public override async Task <OperationResultWithData <LmsUserDTO> > GetUser(Dictionary <string, object> licenseSettings, string lmsUserId, string courseId, ILtiUserListParam extraData = null)
        {
            if (licenseSettings == null)
            {
                throw new ArgumentNullException(nameof(licenseSettings));
            }

            var param = extraData;
            //todo: to license/session settings
            var isCurrentUserAndAdmin =
                param != null &&
                param.lms_user_id == lmsUserId &&
                ((param.roles != null && param.roles.Contains("Administrator")) ||
                 (param.ext_d2l_role != null && param.ext_d2l_role.ToLower().Contains("administrator")));

            //if current user is admin but not allowed to call api - process 'error' parameter in call stack
            if (isCurrentUserAndAdmin)
            {
                var error = $"[GetD2LUsers] AdminUser is not set for LmsCompany with key={licenseSettings[LmsLicenseSettingNames.LicenseKey]}";
                return(OperationResultWithData <LmsUserDTO> .Error(error));
            }

            var result = await GetUsers(licenseSettings, courseId, extraData);

            return(result.IsSuccess
                ? result.Data.FirstOrDefault(u => u.Id == lmsUserId)?.ToSuccessResult()
                : OperationResultWithData <LmsUserDTO> .Error(result.Message));
        }