private IEnumerable<UserBasicDto> GetUsersFromDb(GetUsersContract usersContract, bool isSuperUser, out int totalRecords)
        {
            totalRecords = 0;
            IEnumerable<UserBasicDto> users = null;

            var portalId = usersContract.PortalId;
            var pageIndex = usersContract.PageIndex;
            var pageSize = usersContract.PageSize;

            switch (usersContract.Filter)
            {
                case UserFilters.All:
                    users = this.GetUsers(usersContract, null, null, isSuperUser ? null : (bool?)false, null, null, out totalRecords);
                    break;
                case UserFilters.Authorized:
                    users = this.GetUsers(usersContract, true, false, isSuperUser ? null : (bool?)false, null, null, out totalRecords);
                    break;
                case UserFilters.SuperUsers:
                    if (isSuperUser)
                    {
                        users = this.GetUsers(usersContract, null, null, true, null, null, out totalRecords);
                    }
                    break;
                case UserFilters.UnAuthorized:
                    users = this.GetUsers(usersContract, false, false, isSuperUser ? null : (bool?)false, null, null, out totalRecords);
                    break;
                case UserFilters.Deleted:
                    users = this.GetUsers(usersContract, null, true, isSuperUser ? null : (bool?)false, null, null, out totalRecords);
                    break;
                case UserFilters.HasAgreedToTerms:
                    users = this.GetUsers(usersContract, null, null, false, true, null, out totalRecords);
                    break;
                case UserFilters.HasNotAgreedToTerms:
                    users = this.GetUsers(usersContract, null, null, false, false, null, out totalRecords);
                    break;
                case UserFilters.RequestedRemoval:
                    users = this.GetUsers(usersContract, null, null, false, null, true, out totalRecords);
                    break;
                case UserFilters.RegisteredUsers:
                    {
                        IList<UserInfo> userInfos = RoleController.Instance.GetUsersByRole(portalId,
                            PortalController.Instance.GetCurrentPortalSettings().RegisteredRoleName);
                        if (!isSuperUser)
                        {
                            userInfos = (IList<UserInfo>)userInfos?.Where(x => !x.IsSuperUser);
                        }
                        if (userInfos != null)
                        {
                            totalRecords = userInfos.Count;
                            users = GetSortedUsers(
                                GetPagedUsers(userInfos, pageSize, pageIndex)?.Select(UserBasicDto.FromUserInfo),
                                usersContract.SortColumn, usersContract.SortAscending);
                        }
                        break;
                    }
                default:
                    throw new ArgumentOutOfRangeException();
            }
            return users;
        }
        public HttpResponseMessage GetUsers(string searchText, UserFilters filter, int pageIndex, int pageSize,
                                            string sortColumn,
                                            bool sortAscending)
        {
            try
            {
                int totalRecords;
                var getUsersContract = new GetUsersContract
                {
                    SearchText    = searchText,
                    PageIndex     = pageIndex,
                    PageSize      = pageSize,
                    SortColumn    = sortColumn,
                    SortAscending = sortAscending,
                    PortalId      = PortalController.GetEffectivePortalId(PortalId),
                    Filter        = filter
                };

                var results = Components.UsersController.Instance.GetUsers(getUsersContract, UserInfo.IsSuperUser,
                                                                           out totalRecords);
                var response = new
                {
                    Results      = results,
                    TotalResults = totalRecords
                };

                return(Request.CreateResponse(HttpStatusCode.OK, response));
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
예제 #3
0
        private static IList <UserBasicDto> GetUsersFromLucene(GetUsersContract usersContract, out int totalRecords)
        {
            var query = new SearchQuery
            {
                KeyWords = usersContract.SearchText, PortalIds = new List <int> {
                    usersContract.PortalId
                }, PageIndex = 1, SearchTypeIds = new List <int> {
                    SearchHelper.Instance.GetSearchTypeByName("user").SearchTypeId
                }, PageSize = SearchPageSize, WildCardSearch = true, CultureCode = null, NumericKeys = new Dictionary <string, int> {
                    { "superuser", 0 }
                }
            };

            var searchResults = SearchController.Instance.SiteSearch(query);
            var userIds       = searchResults.Results.Distinct(new UserSearchResultComparer()).Take(SearchPageSize).Select(r =>
            {
                int userId;
                TryConvertToInt32(r.UniqueKey.Split('_')[0], out userId);
                return(userId);
            }).Where(u => u > 0).ToList();

            var currentIds = string.Join(",", userIds.Skip(usersContract.PageIndex * usersContract.PageSize).Take(usersContract.PageSize));
            var users      = UsersDataService.Instance.GetUsersByUserIds(usersContract.PortalId, currentIds).Where(u => UserController.GetUserById(usersContract.PortalId, u.UserId).Membership.Approved).ToList();

            totalRecords = users.Count;
            return(users);
        }
예제 #4
0
 public IEnumerable <UserBasicDto> GetUsers(GetUsersContract usersContract, bool isSuperUser, out int totalRecords)
 {
     return(!string.IsNullOrEmpty(usersContract.SearchText) &&
            usersContract.Filter == UserFilters.Authorized &&
            !HostController.Instance.GetBoolean("DisableUserCrawling", false)
         ? GetUsersFromLucene(usersContract, out totalRecords)
         : GetUsersFromDb(usersContract, isSuperUser, out totalRecords));
 }
 protected override IDataReader CallGetUsersBySearchTerm(
     GetUsersContract usersContract,
     bool?includeAuthorized,
     bool?includeDeleted,
     bool?includeSuperUsers)
 {
     LastSearch = SearchTextFilter.CleanWildcards(usersContract.SearchText);
     dataReader = new Mock <IDataReader>();
     return(dataReader.Object);
 }
 protected override IDataReader CallGetUsersBySearchTerm(
     GetUsersContract usersContract,
     bool?includeAuthorized,
     bool?includeDeleted,
     bool?includeSuperUsers,
     bool?hasAgreedToTerms,
     bool?requestsRemoval)
 {
     this.LastSearch = SearchTextFilter.CleanWildcards(usersContract.SearchText);
     this.dataReader = new Mock <IDataReader>();
     return(this.dataReader.Object);
 }
        public void Init()
        {
            usersContract = new GetUsersContract
            {
                SearchText    = null,
                PageIndex     = 0,
                PageSize      = 10,
                SortColumn    = "displayname",
                SortAscending = true,
                PortalId      = 0,
                Filter        = UserFilters.All
            };

            usersCtrl = new UsersControllerTestable();
        }
        private IEnumerable <UserBasicDto> GetUsers(GetUsersContract usersContract,
                                                    bool?includeAuthorized, bool?includeDeleted, bool?includeSuperUsers, out int totalRecords)
        {
            var parsedSearchText = string.IsNullOrEmpty(usersContract.SearchText) ? "" : SearchTextFilter.CleanWildcards(usersContract.SearchText.Trim());

            List <UserBasicDto2> records = CBO.FillCollection <UserBasicDto2>(
                CallGetUsersBySearchTerm(
                    usersContract,
                    includeAuthorized,
                    includeDeleted,
                    includeSuperUsers));

            totalRecords = records.Count == 0 ? 0 : records[0].TotalCount;
            return(records);
        }
예제 #9
0
        protected virtual IDataReader CallGetUsersBySearchTerm(GetUsersContract usersContract,
                                                               bool?includeAuthorized, bool?includeDeleted, bool?includeSuperUsers)
        {
            var parsedSearchText = string.IsNullOrEmpty(usersContract.SearchText) ? "" : SearchTextFilter.CleanWildcards(usersContract.SearchText.Trim());

            return(DataProvider.Instance().ExecuteReader(
                       "Personabar_GetUsersBySearchTerm",
                       usersContract.PortalId,
                       string.IsNullOrEmpty(usersContract.SortColumn) ? "Joined" : usersContract.SortColumn,
                       usersContract.SortAscending,
                       usersContract.PageIndex,
                       usersContract.PageSize,
                       parsedSearchText,
                       includeAuthorized,
                       includeDeleted,
                       includeSuperUsers));
        }
        private IEnumerable<UserBasicDto> GetUsers(GetUsersContract usersContract,
            bool? includeAuthorized, bool? includeDeleted, bool? includeSuperUsers,
            bool? hasAgreedToTerms, bool? requestsRemoval, out int totalRecords)
        {

            var parsedSearchText = string.IsNullOrEmpty(usersContract.SearchText) ? "" : SearchTextFilter.CleanWildcards(usersContract.SearchText.Trim());

            usersContract.SearchText = string.Format("{0}*", parsedSearchText);

            List<UserBasicDto2> records = CBO.FillCollection<UserBasicDto2>(
                this.CallGetUsersBySearchTerm(
                    usersContract,
                    includeAuthorized,
                    includeDeleted,
                    includeSuperUsers,
                    hasAgreedToTerms,
                    requestsRemoval));

            totalRecords = records.Count == 0 ? 0 : records[0].TotalCount;
            return records;
        }
예제 #11
0
        public override ConsoleResultModel Run()
        {
            var usersList = new List <UserModelBase>();
            var recCount  = 0;
            var max       = this.Max <= 0 ? 10 : (this.Max > 500 ? 500 : this.Max);

            // We need to cover the site group scenario for child portal
            var portalId         = PortalController.GetEffectivePortalId(this.PortalId);
            var getUsersContract = new GetUsersContract
            {
                SearchText    = null,
                PageIndex     = this.Page > 0 ? this.Page - 1 : 0,
                PageSize      = max,
                SortColumn    = "displayname",
                SortAscending = true,
                PortalId      = portalId,
                Filter        = UserFilters.All,
            };

            if (!string.IsNullOrEmpty(this.Username))
            {
                // do username lookup
                getUsersContract.SearchText = this.Username;
            }
            else if (!string.IsNullOrEmpty(this.Email))
            {
                // must be email
                getUsersContract.SearchText = this.Email;
            }
            else if (!string.IsNullOrEmpty(this.Role))
            {
                // exact match only allowed at this time. Listing users in multiple roles would require
                // 1) getting all ID's of roles matching search phrase;
                // 2) getting all users in each of those roles;
                // 3) de-duplicating the users list;
                // for large user bases this could take a really long time.
                getUsersContract = null;
                KeyValuePair <HttpStatusCode, string> response;
                var users = UsersController.Instance.GetUsersInRole(this.PortalSettings, this.Role, out recCount, out response, this.Page, max);
                if (users != null)
                {
                    usersList = ConvertList(users);
                }
                else
                {
                    return(new ConsoleErrorResultModel(response.Value));
                }
            }

            if (getUsersContract != null)
            {
                usersList = ConvertList(UsersController.Instance.GetUsers(getUsersContract, this.User.IsSuperUser, out recCount), this.PortalId);
            }
            if ((usersList == null || usersList.Count == 0) && recCount == 0)
            {
                return(new ConsoleResultModel(this.LocalizeString("noUsers")));
            }
            var totalPages = recCount / max + (recCount % max == 0 ? 0 : 1);
            var pageNo     = this.Page > 0 ? this.Page : 1;

            return(new ConsoleResultModel
            {
                Data = usersList,
                PagingInfo = new PagingInfo
                {
                    PageNo = pageNo,
                    TotalPages = totalPages,
                    PageSize = max,
                },
                Records = usersList?.Count ?? 0,
                Output = usersList?.Count == 0 ? this.LocalizeString("noUsers") : "",
            });
        }
예제 #12
0
 public IEnumerable <UserBasicDto> GetUsers(GetUsersContract usersContract, bool isSuperUser, out int totalRecords)
 {
     return(this.GetUsersFromDb(usersContract, isSuperUser, out totalRecords) ?? new List <UserBasicDto>());
 }
예제 #13
0
        private static IEnumerable <UserBasicDto> GetUsersFromDb(GetUsersContract usersContract, bool isSuperUser, out int totalRecords)
        {
            totalRecords = 0;
            List <UserBasicDto>    users     = null;
            ArrayList              dbUsers   = null;
            IEnumerable <UserInfo> userInfos = null;

            var portalId   = usersContract.PortalId;
            var pageIndex  = usersContract.PageIndex;
            var pageSize   = usersContract.PageSize;
            var searchText = usersContract.SearchText;
            var paged      = false;

            switch (usersContract.Filter)
            {
            case UserFilters.All:

                if (string.IsNullOrEmpty(searchText))
                {
                    dbUsers = UserController.GetUsers(portalId, pageIndex, pageSize, ref totalRecords, true, false);
                }
                else
                {
                    dbUsers = UserController.GetUsersByDisplayName(portalId, searchText + "%", pageIndex, pageSize,
                                                                   ref totalRecords, true, false);
                }
                paged     = true;
                userInfos = dbUsers?.OfType <UserInfo>().ToList();
                break;

            case UserFilters.SuperUsers:
                if (isSuperUser)
                {
                    dbUsers   = UserController.GetUsers(Null.NullInteger, pageIndex, pageSize, ref totalRecords, true, true);
                    userInfos = dbUsers?.OfType <UserInfo>().ToList();
                }
                paged = true;
                break;

            case UserFilters.UnAuthorized:
                dbUsers   = UserController.GetUnAuthorizedUsers(portalId, false, false);
                userInfos = dbUsers?.OfType <UserInfo>().ToList();
                if (!isSuperUser)
                {
                    userInfos = userInfos?.Where(x => !x.IsSuperUser);
                }
                break;

            case UserFilters.Deleted:
                dbUsers   = UserController.GetDeletedUsers(portalId);
                userInfos = dbUsers?.OfType <UserInfo>().ToList();
                if (!isSuperUser)
                {
                    userInfos = userInfos?.Where(x => !x.IsSuperUser);
                }
                break;

//                    case UserFilters.Online:
//                        dbUsers = UserController.GetOnlineUsers(usersContract.PortalId);
//                        break;
            case UserFilters.RegisteredUsers:
                userInfos = RoleController.Instance.GetUsersByRole(portalId,
                                                                   PortalController.Instance.GetCurrentPortalSettings().RegisteredRoleName);
                if (!isSuperUser)
                {
                    userInfos = userInfos?.Where(x => !x.IsSuperUser);
                }
                break;

            case UserFilters.Authorized:
                if (string.IsNullOrEmpty(searchText))
                {
                    var reader = DataProvider.Instance()
                                 .ExecuteReader("Personabar_GetUsers", usersContract.PortalId,
                                                string.IsNullOrEmpty(usersContract.SortColumn) ? "Joined" : usersContract.SortColumn,
                                                usersContract.SortAscending,
                                                usersContract.PageIndex,
                                                usersContract.PageSize);
                    if (reader.Read())
                    {
                        totalRecords = reader.GetInt32(0);
                        reader.NextResult();
                    }
                    users = CBO.FillCollection <UserBasicDto>(reader);
                }
                else
                {
                    dbUsers = UserController.GetUsersByDisplayName(portalId, searchText + "%", pageIndex, pageSize,
                                                                   ref totalRecords, false, false);
                    users = dbUsers?.OfType <UserInfo>().Select(UserBasicDto.FromUserInfo).ToList();
                }
                paged = true;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (users == null && userInfos != null)
            {
                var enumerable = userInfos as UserInfo[] ?? userInfos.ToArray();
                totalRecords = paged ? totalRecords : enumerable.Length;
                var sorted = GetSortedUsers(enumerable, usersContract.SortColumn, usersContract.SortAscending);
                users = paged ? sorted.Select(UserBasicDto.FromUserInfo).ToList() : GetPagedUsers(sorted, pageSize, pageIndex)?.Select(UserBasicDto.FromUserInfo).ToList();
            }
            return(users);
        }