public IHttpActionResult GetUsers(Int32 page           = 1, String name           = null, String login = null,
                                          String email         = null, USER_STATUS?status = null,
                                          ColumnIndex colIndex = ColumnIndex.NAME, Boolean asc = true)
        {
            UserInfo user;
            IEnumerable <UserInfo>    userData;
            Dictionary <Int32, Int32> cmntNumber = null;
            Dictionary <Int32, Int32> artNumber  = null;
            Int32 dataCount = 0;

            using (var db = new Model.ArticleLibraryContext())
            {
                UserStore store = new UserStore(db);

                if ((user = GetInfoInternally(store)) == null)
                {
                    return(Unauthorized());
                }

                var curUserId = user.id;
                var users     = store.GetProperUsers().Where(u => u.ID != curUserId);

                if (status != null)
                {
                    users = users.Where(u => u.STATUS == status);
                }

                if (login != null)
                {
                    var filterLogin = login.ToUpper();
                    users = users.Where(u => u.LOGIN.ToUpper().Contains(filterLogin));
                }

                if (email != null || name != null)
                {
                    users = users.Where(u => u.SHOW_PRIVATE_INFO);

                    if (email != null)
                    {
                        var filterEmail = email.ToUpper();
                        users = users.Where(u => u.EMAIL.ToUpper().Contains(filterEmail));
                    }

                    if (name != null)
                    {
                        var filterName = name.ToUpper();
                        users = users.Where(u => (u.FIRST_NAME + u.LAST_NAME + u.PATRONYMIC_NAME).ToUpper().Contains(filterName));
                    }
                }

                users     = OrderUsers(users, colIndex, asc);
                dataCount = users.Count();
                users     = users.Skip((page - 1) * pageLength).Take(pageLength);

                cmntNumber = (from uc in db.USER_COMMENT.Where(c => c.STATUS != COMMENT_STATUS.DELETED)
                              join uId in users.Select(us => us.ID) on uc.AUTHOR_ID equals uId
                              group uc by uc.AUTHOR_ID into g
                              select g).ToDictionary(k => k.Key, v => v.Count());
                artNumber = (from art in db.ARTICLE.Where(a => a.STATUS != ARTICLE_STATUS.DRAFT)
                             join uId in users.Select(us => us.ID) on art.AUTHOR_ID equals uId
                             group art by art.AUTHOR_ID into g
                             select g).ToDictionary(k => k.Key, v => v.Count());

                userData = users.ToArray().Select(u => new UserInfo(u, true));
            }

            return(Ok(new
            {
                data = userData,
                dataCount = dataCount,
                cmntNumber = cmntNumber,
                artNumber = artNumber,
                pageLength = pageLength
            }));
        }
Exemple #2
0
        public ActionResult GetUsers(Int32 page           = 1, String name          = null, String login = null,
                                     String email         = null, UserStatus?Status = null,
                                     ColumnIndex colIndex = ColumnIndex.NAME, Boolean asc = true)
        {
            UserInfo user;
            IEnumerable <UserInfo>    userData;
            Dictionary <Int32, Int32> cmntNumber = null;
            Dictionary <Int32, Int32> artNumber  = null;
            Int32 dataCount = 0;

            using (var db = new Model.ArticleLibraryContext())
            {
                UserStore store = new UserStore(db);

                if ((user = GetInfoInternally(store)) == null)
                {
                    return(Unauthorized());
                }

                var curUserId = user.id;
                var users     = store.GetProperUsers().Where(u => u.Id != curUserId);

                if (Status != null)
                {
                    users = users.Where(u => u.Status == Status);
                }

                if (login != null)
                {
                    users = users.Where(u => u.Login.IndexOf(login, NO_CASE_COMPARISON) != -1);
                }

                if (email != null || name != null)
                {
                    users = users.Where(u => u.ShowPrivateInfo);

                    if (email != null)
                    {
                        users = users.Where(u => u.Email.IndexOf(email, NO_CASE_COMPARISON) != -1);
                    }

                    if (name != null)
                    {
                        users = users.Where(u => (u.FirstName + u.LastName + u.PatronymicName)
                                            .IndexOf(name, NO_CASE_COMPARISON) != -1);
                    }
                }

                users     = OrderUsers(users, colIndex, asc);
                dataCount = users.Count();
                users     = users.Skip((page - 1) * PAGE_LENGTH).Take(PAGE_LENGTH);

                cmntNumber = (from uc in db.UserComment.Where(c => c.Status != CommentStatus.DELETED)
                              join uId in users.Select(us => us.Id) on uc.AuthorId equals uId
                              group uc by uc.AuthorId into g
                              select g).ToDictionary(k => k.Key, v => v.Count());
                artNumber = (from art in db.Article.Where(a => a.Status != ArticleStatus.DRAFT)
                             join uId in users.Select(us => us.Id) on art.AuthorId equals uId
                             group art by art.AuthorId into g
                             select g).ToDictionary(k => k.Key, v => v.Count());

                userData = users.ToArray().Select(u => new UserInfo(u, true));
            }

            return(Ok(new
            {
                data = userData,
                dataCount = dataCount,
                cmntNumber = cmntNumber,
                artNumber = artNumber,
                pageLength = PAGE_LENGTH
            }));
        }