Ejemplo n.º 1
0
        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        /// <param name="tableName">表名</param>
        /// <param name="where">查询条件</param>
        /// <param name="order">排序</param>
        /// <param name="pageIndex">页下标</param>
        /// <param name="pageSize">页显示数</param>
        /// <param name="fields">查询字段</param>
        /// <returns></returns>
        public PagerSet GetList(string tableName, string where, string order, int pageIndex, int pageSize, string[] fields = null)
        {
            PagerParameters pagerPrams = new PagerParameters(tableName, where, order, pageIndex, pageSize, fields);

            return(GetPagerSet(pagerPrams));
        }
Ejemplo n.º 2
0
        public ActionResult Index(ListContentsViewModel model, PagerParameters pagerParameters, string part, string field, string types)
        {
            var menuItems             = _navigationManager.BuildMenu("content-picker").ToList();
            var contentPickerMenuItem = menuItems.FirstOrDefault();

            if (contentPickerMenuItem == null)
            {
                return(HttpNotFound());
            }

            if (contentPickerMenuItem.Items.All(x => x.Text.TextHint != "Recent Content"))
            {
                // the default tab should not be displayed, redirect to the next one
                var root = menuItems.FirstOrDefault();
                if (root == null)
                {
                    return(HttpNotFound());
                }

                var firstChild = root.Items.First();
                if (firstChild == null)
                {
                    return(HttpNotFound());
                }

                var routeData   = new RouteValueDictionary(firstChild.RouteValues);
                var queryString = Request.QueryString;
                foreach (var key in queryString.AllKeys)
                {
                    if (!String.IsNullOrEmpty(key))
                    {
                        routeData[key] = queryString[key];
                    }
                }

                return(RedirectToRoute(routeData));
            }

            ContentPickerFieldSettings settings = null;

            // if the picker is loaded for a specific field, apply custom settings
            if (!String.IsNullOrEmpty(part) && !String.IsNullOrEmpty(field))
            {
                var definition = _contentDefinitionManager.GetPartDefinition(part).Fields.FirstOrDefault(x => x.Name == field);
                if (definition != null)
                {
                    settings = definition.Settings.GetModel <ContentPickerFieldSettings>();
                }
            }

            if (settings != null && !String.IsNullOrEmpty(settings.DisplayedContentTypes))
            {
                types = settings.DisplayedContentTypes;
            }

            IEnumerable <ContentTypeDefinition> contentTypes;

            if (!String.IsNullOrEmpty(types))
            {
                var rawTypes = types.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                contentTypes = _contentDefinitionManager
                               .ListTypeDefinitions()
                               .Where(x => x.Parts.Any(p => rawTypes.Contains(p.PartDefinition.Name)) || rawTypes.Contains(x.Name))
                               .ToArray();
            }
            else
            {
                contentTypes = GetListableTypes(false).ToList();
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
            var query = Services.ContentManager.Query(VersionOptions.Latest, contentTypes.Select(ctd => ctd.Name).ToArray());

            if (!string.IsNullOrEmpty(model.Options.SelectedFilter))
            {
                var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.Options.SelectedFilter);
                if (contentTypeDefinition == null)
                {
                    return(HttpNotFound());
                }

                model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName)
                                            ? contentTypeDefinition.DisplayName
                                            : contentTypeDefinition.Name;
                query = query.ForType(model.Options.SelectedFilter);
            }

            switch (model.Options.OrderBy)
            {
            case ContentsOrder.Modified:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc);
                break;

            case ContentsOrder.Published:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc);
                break;

            case ContentsOrder.Created:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc);
                break;
            }

            if (!String.IsNullOrWhiteSpace(model.Options.SelectedCulture))
            {
                query = _cultureFilter.FilterCulture(query, model.Options.SelectedCulture);
            }

            model.Options.FilterOptions = contentTypes
                                          .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName))
                                          .ToList().OrderBy(kvp => kvp.Value);

            model.Options.Cultures = _cultureManager.ListCultures();

            var pagerShape         = Services.New.Pager(pager).TotalItemCount(query.Count());
            var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();
            var list = Services.New.List();

            list.AddRange(pageOfContentItems.Select(ci => Services.ContentManager.BuildDisplay(ci, "SummaryAdmin")));

            foreach (IShape item in list.Items)
            {
                item.Metadata.Type = "ContentPicker";
            }

            var tab = Services.New.RecentContentTab()
                      .ContentItems(list)
                      .Pager(pagerShape)
                      .Options(model.Options)
                      .TypeDisplayName(model.TypeDisplayName ?? "");

            // retain the parameter in the pager links
            RouteData.Values["Options.SelectedFilter"] = model.Options.SelectedFilter;
            RouteData.Values["Options.OrderBy"]        = model.Options.OrderBy.ToString();
            RouteData.Values["Options.ContentsStatus"] = model.Options.ContentsStatus.ToString();

            return(new ShapeResult(this, Services.New.ContentPicker().Tab(tab)));
        }
        public async Task <IActionResult> Index(WorkflowTypeIndexOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageWorkflows))
            {
                return(Forbid());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            if (options == null)
            {
                options = new WorkflowTypeIndexOptions();
            }

            var query = _session.Query <WorkflowType, WorkflowTypeIndex>();

            switch (options.Filter)
            {
            case WorkflowTypeFilter.All:
            default:
                break;
            }

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                query = query.Where(w => w.Name.Contains(options.Search));
            }

            switch (options.Order)
            {
            case WorkflowTypeOrder.Name:
                query = query.OrderBy(u => u.Name);
                break;
            }

            var count = await query.CountAsync();

            var workflowTypes = await query
                                .Skip(pager.GetStartIndex())
                                .Take(pager.PageSize)
                                .ListAsync();

            var workflowTypeIds = workflowTypes.Select(x => x.WorkflowTypeId).ToList();
            var workflowGroups  = (await _session.QueryIndex <WorkflowIndex>(x => x.WorkflowTypeId.IsIn(workflowTypeIds))
                                   .ListAsync())
                                  .GroupBy(x => x.WorkflowTypeId)
                                  .ToDictionary(x => x.Key);

            // Maintain previous route data when generating page links.
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);
            var model      = new WorkflowTypeIndexViewModel
            {
                WorkflowTypes = workflowTypes
                                .Select(x => new WorkflowTypeEntry
                {
                    WorkflowType  = x,
                    Id            = x.Id,
                    WorkflowCount = workflowGroups.ContainsKey(x.WorkflowTypeId) ? workflowGroups[x.WorkflowTypeId].Count() : 0,
                    Name          = x.Name
                })
                                .ToList(),
                Options = options,
                Pager   = pagerShape
            };

            model.Options.WorkflowTypesBulkAction = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Delete"].Value, Value = nameof(WorkflowTypeBulkAction.Delete)
                }
            };

            return(View(model));
        }
Ejemplo n.º 4
0
        public ActionResult Index(ListContentsViewModel model, PagerParameters pagerParameters)
        {
            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            var query = Services.ContentManager.Query(VersionOptions.Latest, GetCreatableTypes(false).Select(ctd => ctd.Name).ToArray());

            if (!string.IsNullOrEmpty(model.Options.SelectedFilter))
            {
                var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.Options.SelectedFilter);
                if (contentTypeDefinition == null)
                {
                    return(HttpNotFound());
                }

                model.TypeDisplayName = !string.IsNullOrWhiteSpace(contentTypeDefinition.DisplayName)
                                            ? contentTypeDefinition.DisplayName
                                            : contentTypeDefinition.Name;
                query = query.ForType(model.Options.SelectedFilter);
            }

            switch (model.Options.OrderBy)
            {
            case ContentsOrder.Modified:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc);
                break;

            case ContentsOrder.Published:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc);
                break;

            case ContentsOrder.Created:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc);
                break;
            }

            model.Options.FilterOptions = GetCreatableTypes(false)
                                          .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName))
                                          .ToList().OrderBy(kvp => kvp.Value);

            var pagerShape         = Services.New.Pager(pager).TotalItemCount(query.Count());
            var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();

            var list = Services.New.List();

            list.AddRange(pageOfContentItems.Select(ci => Services.ContentManager.BuildDisplay(ci, "SummaryAdmin")));

            foreach (IShape item in list.Items)
            {
                item.Metadata.Type = "ContentPicker";
            }

            dynamic tab = Services.New.RecentContentTab()
                          .ContentItems(list)
                          .Pager(pagerShape)
                          .Options(model.Options)
                          .TypeDisplayName(model.TypeDisplayName ?? "");

            // retain the parameter in the pager links
            RouteData.Values["Options.SelectedFilter"] = model.Options.SelectedFilter;
            RouteData.Values["Options.OrderBy"]        = model.Options.OrderBy.ToString();

            return(new ShapeResult(this, Services.New.ContentPicker().Tab(tab)));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Index(SearchIndexOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Intelli.Comments.Permissions.ManageComments))
            {
                return(Unauthorized());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            if (options == null)
            {
                options = new SearchIndexOptions();
            }

            //var query = _session.Query<WorkflowType, WorkflowTypeIndex>();

//            switch (options.Filter)
//            {
//                case WorkflowTypeFilter.All:
//                default:
//                    break;
//            }

//            if (!string.IsNullOrWhiteSpace(options.Search))
//            {
//                query = query.Where(w => w.Name.Contains(options.Search));
//            }

//            switch (options.Order)
//            {
//                case WorkflowTypeOrder.Name:
//                    query = query.OrderBy(u => u.Name);
//                    break;
//            }

            // var count = await query.CountAsync();

//            var workflowTypes = await query
//                .Skip(pager.GetStartIndex())
//                .Take(pager.PageSize)
//                .ListAsync();
            var comments = await _commentsRepository.FindAllAsync();// GetAllAsync();


            var currentCommentList = comments
                                     //  .Where(c => (currentUserGroupIds.Contains(c.GroupId) || c.GroupId == currentUserId) && c.Parent == null && c.CommentGroupTypeId != CommentGroupType.GroupChat)
                                     .OrderByDescending(c => c.CreatedUtc).ToList();

//            var workflowTypeIds = workflowTypes.Select(x => x.WorkflowTypeId).ToList();
//            var workflowGroups = (await _session.QueryIndex<WorkflowIndex>(x => x.WorkflowTypeId.IsIn(workflowTypeIds))
//                .ListAsync())
//                .GroupBy(x => x.WorkflowTypeId)
//                .ToDictionary(x => x.Key);

            // Maintain previous route data when generating page links.
            var routeData = new RouteData();

//            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
//            routeData.Values.Add("Options.Order", options.Order);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(currentCommentList.Count).RouteData(routeData);
            var model      = new CommentsIndexViewModel
            {
                Comments = currentCommentList,
                Options  = options,
                Pager    = pagerShape
            };

            return(View(model));
        }
        public PagerSet GetNewsList(int pageIndex, int pageSize, string condition, string orderby)
        {
            PagerParameters prams = new PagerParameters("News", orderby, condition, pageIndex, pageSize);

            return(this.GetPagerSet2(prams));
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> List(AdminMenuListOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageAdminMenu))
            {
                return(Unauthorized());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // default options
            if (options == null)
            {
                options = new AdminMenuListOptions();
            }

            var adminMenuList = (await _adminMenuService.GetMainMenuListAsync()).AdminMenu;

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                adminMenuList = adminMenuList.Where(dp => dp.Name.Contains(options.Search)).ToList();
            }

            var count = adminMenuList.Count();

            var startIndex = pager.GetStartIndex();
            var pageSize   = pager.PageSize;
            IEnumerable <Models.AdminMenu> results = new List <Models.AdminMenu>();

            //todo: handle the case where there is a deserialization exception on some of the presets.
            // load at least the ones without error. Provide a way to delete the ones on error.
            try
            {
                results = adminMenuList
                          .Skip(startIndex)
                          .Take(pageSize)
                          .ToList();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error when retrieving the list of admin menus");
                _notifier.Error(H["Error when retrieving the list of admin menus"]);
            }


            // Maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Search", options.Search);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);

            var model = new AdminMenuListViewModel
            {
                AdminMenu = results.Select(x => new AdminMenuEntry {
                    AdminMenu = x
                }).ToList(),
                Options = options,
                Pager   = pagerShape
            };

            return(View(model));
        }
Ejemplo n.º 8
0
        public async Task <ActionResult> Index(UserIndexOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageUsers))
            {
                return(Forbid());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // default options
            if (options == null)
            {
                options = new UserIndexOptions();
            }

            var users = _session.Query <User, UserIndex>();

            switch (options.Filter)
            {
            case UsersFilter.Approved:
                //users = users.Where(u => u.RegistrationStatus == UserStatus.Approved);
                break;

            case UsersFilter.Pending:
                //users = users.Where(u => u.RegistrationStatus == UserStatus.Pending);
                break;

            case UsersFilter.EmailPending:
                //users = users.Where(u => u.EmailStatus == UserStatus.Pending);
                break;
            }

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                var normalizedSearchUserName = _userManager.NormalizeName(options.Search);
                var normalizedSearchEMail    = _userManager.NormalizeEmail(options.Search);

                users = users.Where(u => u.NormalizedUserName.Contains(normalizedSearchUserName) || u.NormalizedEmail.Contains(normalizedSearchEMail));
            }

            switch (options.Order)
            {
            case UsersOrder.Name:
                users = users.OrderBy(u => u.NormalizedUserName);
                break;

            case UsersOrder.Email:
                users = users.OrderBy(u => u.NormalizedEmail);
                break;

            case UsersOrder.CreatedUtc:
                //users = users.OrderBy(u => u.CreatedUtc);
                break;

            case UsersOrder.LastLoginUtc:
                //users = users.OrderBy(u => u.LastLoginUtc);
                break;
            }

            var count = await users.CountAsync();

            var results = await users
                          .Skip(pager.GetStartIndex())
                          .Take(pager.PageSize)
                          .ListAsync();

            // Maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);

            var userEntries = new List <UserEntry>();

            foreach (var user in results)
            {
                userEntries.Add(new UserEntry
                {
                    UserId = user.UserId,
                    Shape  = await _userDisplayManager.BuildDisplayAsync(user, updater: _updateModelAccessor.ModelUpdater, displayType: "SummaryAdmin")
                }
                                );
            }

            var model = new UsersIndexViewModel
            {
                Users   = userEntries,
                Options = options,
                Pager   = pagerShape
            };

            model.Options.UserFilters = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["All"], Value = nameof(UsersFilter.All)
                },
                //new SelectListItem() { Text = S["Approved"], Value = nameof(UsersFilter.Approved) },
                //new SelectListItem() { Text = S["Email pending"], Value = nameof(UsersFilter.EmailPending) },
                //new SelectListItem() { Text = S["Pending"], Value = nameof(UsersFilter.Pending) }
            };

            model.Options.UserSorts = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Name"], Value = nameof(UsersOrder.Name)
                },
                new SelectListItem()
                {
                    Text = S["Email"], Value = nameof(UsersOrder.Email)
                },
                //new SelectListItem() { Text = S["Created date"], Value = nameof(UsersOrder.CreatedUtc) },
                //new SelectListItem() { Text = S["Last Login date"], Value = nameof(UsersOrder.LastLoginUtc) }
            };

            model.Options.UsersBulkAction = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Approve"], Value = nameof(UsersBulkAction.Approve)
                },
                new SelectListItem()
                {
                    Text = S["Enable"], Value = nameof(UsersBulkAction.Enable)
                },
                new SelectListItem()
                {
                    Text = S["Disable"], Value = nameof(UsersBulkAction.Disable)
                },
                new SelectListItem()
                {
                    Text = S["Delete"], Value = nameof(UsersBulkAction.Delete)
                }
            };

            return(View(model));
        }
Ejemplo n.º 9
0
        public async Task <UsersListResponse> ListInOrganizationAsync(long organizationId, PagerParameters pager = null)
        {
            using (_loggerScope(_logger, $"ListInOrganizationAsync({organizationId})"))
                using (var client = _apiClient.CreateClient())
                {
                    var response = await client.GetAsync(string.Format(OrganizationsUsersResourceUriFormat, organizationId), pager).ConfigureAwait(false);

                    if (response.StatusCode == HttpStatusCode.NotFound)
                    {
                        _logger.LogInformation("Users in organization {0} not found", organizationId);
                        return(null);
                    }

                    if (!response.IsSuccessStatusCode)
                    {
                        throw await new ZendeskRequestExceptionBuilder()
                              .WithResponse(response)
                              .WithHelpDocsLink("core/users#list-users")
                              .Build();
                    }

                    return(await response.Content.ReadAsAsync <UsersListResponse>());
                }
        }
        public ActionResult Index(AdminIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(Permissions.ManageQueries, T("Not authorized to list queries")))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            // default options
            if (options == null)
            {
                options = new AdminIndexOptions();
            }

            var queries = Services.ContentManager.Query("Query");

            switch (options.Filter)
            {
            case QueriesFilter.All:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (!String.IsNullOrWhiteSpace(options.Search))
            {
                queries = queries.Join <TitlePartRecord>().Where(r => r.Title.Contains(options.Search));
            }

            var pagerShape = Shape.Pager(pager).TotalItemCount(queries.Count());

            switch (options.Order)
            {
            case QueriesOrder.Name:
                queries = queries.Join <TitlePartRecord>().OrderBy(u => u.Title);
                break;
            }

            var results = queries
                          .Slice(pager.GetStartIndex(), pager.PageSize)
                          .ToList();

            var model = new AdminIndexViewModel {
                Queries = results.Select(x => new QueryEntry {
                    Query   = x.As <QueryPart>().Record,
                    QueryId = x.Id,
                    Name    = x.As <QueryPart>().Name
                }).ToList(),
                Options = options,
                Pager   = pagerShape
            };

            // maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            pagerShape.RouteData(routeData);

            return(View(model));
        }
Ejemplo n.º 11
0
        public async Task <UsersListResponse> ListByExternalIdsAsync(string[] externalIds, PagerParameters pager = null)
        {
            using (_loggerScope(_logger, $"ListByExternalIdsAsync({ZendeskFormatter.ToCsv(externalIds)})"))
                using (var client = _apiClient.CreateClient(ResourceUri))
                {
                    var response = await client.GetAsync($"show_many?external_ids={ZendeskFormatter.ToCsv(externalIds)}", pager).ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        throw await new ZendeskRequestExceptionBuilder()
                              .WithResponse(response)
                              .WithHelpDocsLink("core/users#show-many-users")
                              .Build();
                    }

                    return(await response.Content.ReadAsAsync <UsersListResponse>());
                }
        }
Ejemplo n.º 12
0
        public ActionResult Index(UserIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(Permissions.ManageUsers, T("Not authorized to list users")))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            // default options
            if (options == null)
            {
                options = new UserIndexOptions();
            }

            var users = Services.ContentManager
                        .Query <UserPart, UserPartRecord>();

            switch (options.Filter)
            {
            case UsersFilter.Approved:
                users = users.Where(u => u.RegistrationStatus == UserStatus.Approved);
                break;

            case UsersFilter.Pending:
                users = users.Where(u => u.RegistrationStatus == UserStatus.Pending);
                break;

            case UsersFilter.EmailPending:
                users = users.Where(u => u.EmailStatus == UserStatus.Pending);
                break;
            }

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                users = users.Where(u => u.UserName.Contains(options.Search) || u.Email.Contains(options.Search));
            }

            var pagerShape = Shape.Pager(pager).TotalItemCount(users.Count());

            switch (options.Order)
            {
            case UsersOrder.Name:
                users = users.OrderBy(u => u.UserName);
                break;

            case UsersOrder.Email:
                users = users.OrderBy(u => u.Email);
                break;

            case UsersOrder.CreatedUtc:
                users = users.OrderBy(u => u.CreatedUtc);
                break;

            case UsersOrder.LastLoginUtc:
                users = users.OrderBy(u => u.LastLoginUtc);
                break;
            }

            var results = users
                          .Slice(pager.GetStartIndex(), pager.PageSize)
                          .ToList();

            var model = new UsersIndexViewModel {
                Users = results
                        .Select(x => new UserEntry {
                    User = x.Record
                })
                        .ToList(),
                Options = options,
                Pager   = pagerShape
            };

            // maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            pagerShape.RouteData(routeData);

            return(View(model));
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> Index(string id, string q, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "Search";

            if (!string.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

            if (!await _elasticIndexProvider.ExistsAsync(indexName))
            {
                return(NotFound());
            }

            if (string.IsNullOrWhiteSpace(q))
            {
                return(View(new SearchIndexViewModel
                {
                    Pager = pager, IndexName = id, ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var luceneSettings = await _elasticIndexingService.GetElasticSettingsAsync();

            if (luceneSettings == null)  // || luceneSettings? .DefaultSearchFields == null)
            {
                Logger.LogInformation("Couldn't execute search. No Elastic settings was defined.");

                return(View(new SearchIndexViewModel
                {
                    HasMoreResults = false,
                    Query = q,
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            //todo
//            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, new StandardAnalyzer(LuceneSettings.DefaultVersion));
//            var query = queryParser.Parse(QueryParser.Escape(q));
            object query       = null;
            int    start       = pager.GetStartIndex(),
                   size        = pager.PageSize,
                   end         = size + 1; // Fetch one more result than PageSize to generate "More" links
            var contentItemIds = await _searchQueryService.ExecuteQueryAsync(query, indexName, start, end);

            var contentItems = new List <ContentItem>();

            foreach (var contentItemId in contentItemIds.Take(size))
            {
                var contentItem = await _contentManager.GetAsync(contentItemId);

                if (contentItem != null)
                {
                    contentItems.Add(contentItem);
                }
            }

            var model = new SearchIndexViewModel
            {
                HasMoreResults = contentItemIds.Count > size,
                Query          = q,
                Pager          = pager,
                IndexName      = id,
                ContentItems   = contentItems
            };

            return(View(model));
        }
Ejemplo n.º 14
0
        public async Task <ActionResult> Index(UserIndexOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageUsers))
            {
                return(Unauthorized());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // default options
            if (options == null)
            {
                options = new UserIndexOptions();
            }

            var users = _session.Query <User, UserIndex>();

            switch (options.Filter)
            {
            case UsersFilter.Approved:
                //users = users.Where(u => u.RegistrationStatus == UserStatus.Approved);
                break;

            case UsersFilter.Pending:
                //users = users.Where(u => u.RegistrationStatus == UserStatus.Pending);
                break;

            case UsersFilter.EmailPending:
                //users = users.Where(u => u.EmailStatus == UserStatus.Pending);
                break;
            }

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                users = users.Where(u => u.NormalizedUserName.Contains(options.Search) || u.NormalizedEmail.Contains(options.Search));
            }

            switch (options.Order)
            {
            case UsersOrder.Name:
                users = users.OrderBy(u => u.NormalizedUserName);
                break;

            case UsersOrder.Email:
                users = users.OrderBy(u => u.NormalizedEmail);
                break;

            case UsersOrder.CreatedUtc:
                //users = users.OrderBy(u => u.CreatedUtc);
                break;

            case UsersOrder.LastLoginUtc:
                //users = users.OrderBy(u => u.LastLoginUtc);
                break;
            }

            var count = await users.CountAsync();

            var results = await users
                          .Skip(pager.GetStartIndex())
                          .Take(pager.PageSize)
                          .ListAsync();

            // Maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);

            var model = new UsersIndexViewModel
            {
                Users = await Task.WhenAll(
                    results.Select(async x =>
                                   new UserEntry {
                    Shape = await _userDisplayManager.BuildDisplayAsync(x, this, "SummaryAdmin")
                })),
                Options = options,
                Pager   = pagerShape
            };

            return(View(model));
        }
Ejemplo n.º 15
0
        public async Task <IPagination <JobStatusResponse> > GetAsync(string[] statusIds, PagerParameters pagerParameters = null)
        {
            using (_loggerScope(_logger, $"GetAsync({ZendeskFormatter.ToCsv(statusIds)})"))
                using (var client = _apiClient.CreateClient(ResourceUri))
                {
                    var response = await client.GetAsync($"show_many?ids={ZendeskFormatter.ToCsv(statusIds)}", pagerParameters)
                                   .ConfigureAwait(false);

                    if (!response.IsSuccessStatusCode)
                    {
                        throw await new ZendeskRequestExceptionBuilder()
                              .WithResponse(response)
                              .WithHelpDocsLink("support/job_statuses#show-many-job-statuses")
                              .Build();
                    }

                    return(await response.Content.ReadAsAsync <JobStatusListResponse>());
                }
        }
Ejemplo n.º 16
0
        public async Task <IActionResult> List(
            [ModelBinder(BinderType = typeof(ContentItemFilterEngineModelBinder), Name = "q")] QueryFilterResult <ContentItem> queryFilterResult,
            ContentOptionsViewModel options,
            PagerParameters pagerParameters,
            string contentTypeId = "")
        {
            var context = _httpContextAccessor.HttpContext;
            var contentTypeDefinitions = _contentDefinitionManager.ListTypeDefinitions()
                                         .Where(ctd => ctd.GetSettings <ContentTypeSettings>().Creatable)
                                         .OrderBy(ctd => ctd.DisplayName);

            if (!await _authorizationService.AuthorizeContentTypeDefinitionsAsync(User, CommonPermissions.EditContent, contentTypeDefinitions, _contentManager))
            {
                return(Forbid());
            }

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // This is used by the AdminMenus so needs to be passed into the options.
            if (!String.IsNullOrEmpty(contentTypeId))
            {
                options.SelectedContentType = contentTypeId;
            }

            // The filter is bound seperately and mapped to the options.
            // The options must still be bound so that options that are not filters are still bound
            options.FilterResult = queryFilterResult;

            // Populate the creatable types.
            if (!String.IsNullOrEmpty(options.SelectedContentType))
            {
                // When the selected content type is provided via the route or options a placeholder node is used to apply a filter.
                options.FilterResult.TryAddOrReplace(new ContentTypeFilterNode(options.SelectedContentType));

                var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(options.SelectedContentType);
                if (contentTypeDefinition == null)
                {
                    return(NotFound());
                }

                var creatableList = new List <SelectListItem>();

                // Allows non creatable types to be created by another admin page.
                if (contentTypeDefinition.GetSettings <ContentTypeSettings>().Creatable || options.CanCreateSelectedContentType)
                {
                    var contentItem = await _contentManager.NewAsync(contentTypeDefinition.Name);

                    contentItem.Owner = context.User.FindFirstValue(ClaimTypes.NameIdentifier);

                    if (await _authorizationService.AuthorizeAsync(context.User, CommonPermissions.EditContent, contentItem))
                    {
                        creatableList.Add(new SelectListItem(contentTypeDefinition.DisplayName, contentTypeDefinition.Name));
                    }
                }

                options.CreatableTypes = creatableList;
            }

            if (options.CreatableTypes == null)
            {
                var creatableList = new List <SelectListItem>();
                if (contentTypeDefinitions.Any())
                {
                    foreach (var contentTypeDefinition in contentTypeDefinitions)
                    {
                        var contentItem = await _contentManager.NewAsync(contentTypeDefinition.Name);

                        contentItem.Owner = context.User.FindFirstValue(ClaimTypes.NameIdentifier);

                        if (await _authorizationService.AuthorizeAsync(context.User, CommonPermissions.EditContent, contentItem))
                        {
                            creatableList.Add(new SelectListItem(contentTypeDefinition.DisplayName, contentTypeDefinition.Name));
                        }
                    }
                }

                options.CreatableTypes = creatableList;
            }

            // We populate the remaining SelectLists.
            options.ContentStatuses = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Latest"], Value = nameof(ContentsStatus.Latest), Selected = (options.ContentsStatus == ContentsStatus.Latest)
                },
                new SelectListItem()
                {
                    Text = S["Published"], Value = nameof(ContentsStatus.Published), Selected = (options.ContentsStatus == ContentsStatus.Published)
                },
                new SelectListItem()
                {
                    Text = S["Unpublished"], Value = nameof(ContentsStatus.Draft), Selected = (options.ContentsStatus == ContentsStatus.Draft)
                },
                new SelectListItem()
                {
                    Text = S["All versions"], Value = nameof(ContentsStatus.AllVersions), Selected = (options.ContentsStatus == ContentsStatus.AllVersions)
                }
            };

            if (await _authorizationService.AuthorizeAsync(context.User, Permissions.ListContent))
            {
                options.ContentStatuses.Insert(1, new SelectListItem()
                {
                    Text = S["Owned by me"], Value = nameof(ContentsStatus.Owner)
                });
            }

            options.ContentSorts = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Recently created"], Value = nameof(ContentsOrder.Created), Selected = (options.OrderBy == ContentsOrder.Created)
                },
                new SelectListItem()
                {
                    Text = S["Recently modified"], Value = nameof(ContentsOrder.Modified), Selected = (options.OrderBy == ContentsOrder.Modified)
                },
                new SelectListItem()
                {
                    Text = S["Recently published"], Value = nameof(ContentsOrder.Published), Selected = (options.OrderBy == ContentsOrder.Published)
                },
                new SelectListItem()
                {
                    Text = S["Title"], Value = nameof(ContentsOrder.Title), Selected = (options.OrderBy == ContentsOrder.Title)
                },
            };

            options.ContentsBulkAction = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Publish Now"], Value = nameof(ContentsBulkAction.PublishNow)
                },
                new SelectListItem()
                {
                    Text = S["Unpublish"], Value = nameof(ContentsBulkAction.Unpublish)
                },
                new SelectListItem()
                {
                    Text = S["Delete"], Value = nameof(ContentsBulkAction.Remove)
                }
            };

            if ((String.IsNullOrEmpty(options.SelectedContentType) || String.IsNullOrEmpty(contentTypeId)) && options.ContentTypeOptions == null)
            {
                var listableTypes      = new List <ContentTypeDefinition>();
                var userNameIdentifier = context.User.FindFirstValue(ClaimTypes.NameIdentifier);

                foreach (var ctd in _contentDefinitionManager.ListTypeDefinitions())
                {
                    if (ctd.GetSettings <ContentTypeSettings>().Listable)
                    {
                        var contentItem = await _contentManager.NewAsync(ctd.Name);

                        contentItem.Owner = userNameIdentifier;
                        var authorized = await _authorizationService.AuthorizeAsync(User, CommonPermissions.EditContent, contentItem);

                        if (authorized)
                        {
                            listableTypes.Add(ctd);
                        }
                    }
                }

                var contentTypeOptions = listableTypes
                                         .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName))
                                         .ToList().OrderBy(kvp => kvp.Value);

                options.ContentTypeOptions = new List <SelectListItem>
                {
                    new SelectListItem()
                    {
                        Text = S["All content types"], Value = ""
                    }
                };

                foreach (var option in contentTypeOptions)
                {
                    options.ContentTypeOptions.Add(new SelectListItem()
                    {
                        Text = option.Value, Value = option.Key, Selected = (option.Value == options.SelectedContentType)
                    });
                }
            }

            // If ContentTypeOptions is not initialized by query string or by the code above, initialize it
            if (options.ContentTypeOptions == null)
            {
                options.ContentTypeOptions = new List <SelectListItem>();
            }

            // With the options populated we filter the query, allowing the filters to alter the options.
            var query = await _contentsAdminListQueryService.QueryAsync(options, _updateModelAccessor.ModelUpdater);

            // The search text is provided back to the UI.
            options.SearchText         = options.FilterResult.ToString();
            options.OriginalSearchText = options.SearchText;

            // Populate route values to maintain previous route data when generating page links.
            options.RouteValues.TryAdd("q", options.FilterResult.ToString());

            var routeData     = new RouteData(options.RouteValues);
            var maxPagedCount = siteSettings.MaxPagedCount;

            if (maxPagedCount > 0 && pager.PageSize > maxPagedCount)
            {
                pager.PageSize = maxPagedCount;
            }

            var pagerShape = (await New.Pager(pager)).TotalItemCount(maxPagedCount > 0 ? maxPagedCount : await query.CountAsync()).RouteData(routeData);

            // Load items so that loading handlers are invoked.
            var pageOfContentItems = await query.Skip(pager.GetStartIndex()).Take(pager.PageSize).ListAsync(_contentManager);

            // We prepare the content items SummaryAdmin shape
            var contentItemSummaries = new List <dynamic>();

            foreach (var contentItem in pageOfContentItems)
            {
                contentItemSummaries.Add(await _contentItemDisplayManager.BuildDisplayAsync(contentItem, _updateModelAccessor.ModelUpdater, "SummaryAdmin"));
            }

            // Populate options pager summary values.
            var startIndex = (pagerShape.Page - 1) * (pagerShape.PageSize) + 1;

            options.StartIndex        = startIndex;
            options.EndIndex          = startIndex + contentItemSummaries.Count - 1;
            options.ContentItemsCount = contentItemSummaries.Count;
            options.TotalItemCount    = pagerShape.TotalItemCount;

            var header = await _contentOptionsDisplayManager.BuildEditorAsync(options, _updateModelAccessor.ModelUpdater, false);

            var shapeViewModel = await _shapeFactory.CreateAsync <ListContentsViewModel>("ContentsAdminList", viewModel =>
            {
                viewModel.ContentItems = contentItemSummaries;
                viewModel.Pager        = pagerShape;
                viewModel.Options      = options;
                viewModel.Header       = header;
            });

            return(View(shapeViewModel));
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> Index(TenantIndexOptions options, PagerParameters pagerParameters)
        {
            if (!await _authorizationService.AuthorizeAsync(User, Permissions.ManageTenants))
            {
                return(Forbid());
            }

            if (!IsDefaultShell())
            {
                return(Forbid());
            }

            var allSettings   = _shellHost.GetAllSettings().OrderBy(s => s.Name);
            var dataProtector = _dataProtectorProvider.CreateProtector("Tokens").ToTimeLimitedDataProtector();

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // default options
            if (options == null)
            {
                options = new TenantIndexOptions();
            }

            var entries = allSettings.Select(x =>
            {
                var entry = new ShellSettingsEntry
                {
                    Description     = x["Description"],
                    Name            = x.Name,
                    ShellSettings   = x,
                    IsDefaultTenant = string.Equals(x.Name, ShellHelper.DefaultShellName, StringComparison.OrdinalIgnoreCase)
                };

                if (x.State == TenantState.Uninitialized && !string.IsNullOrEmpty(x["Secret"]))
                {
                    entry.Token = dataProtector.Protect(x["Secret"], _clock.UtcNow.Add(new TimeSpan(24, 0, 0)));
                }

                return(entry);
            }).ToList();

            if (!string.IsNullOrWhiteSpace(options.Search))
            {
                entries = entries.Where(t => t.Name.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1 ||
                                        (t.ShellSettings != null &&
                                         ((t.ShellSettings.RequestUrlHost != null && t.ShellSettings.RequestUrlHost.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1) ||
                                          (t.ShellSettings.RequestUrlPrefix != null && t.ShellSettings.RequestUrlPrefix.IndexOf(options.Search, StringComparison.OrdinalIgnoreCase) > -1)))).ToList();
            }

            switch (options.Filter)
            {
            case TenantsFilter.Disabled:
                entries = entries.Where(t => t.ShellSettings.State == TenantState.Disabled).ToList();
                break;

            case TenantsFilter.Running:
                entries = entries.Where(t => t.ShellSettings.State == TenantState.Running).ToList();
                break;

            case TenantsFilter.Uninitialized:
                entries = entries.Where(t => t.ShellSettings.State == TenantState.Uninitialized).ToList();
                break;
            }

            switch (options.OrderBy)
            {
            case TenantsOrder.Name:
                entries = entries.OrderBy(t => t.Name).ToList();
                break;

            case TenantsOrder.State:
                entries = entries.OrderBy(t => t.ShellSettings?.State).ToList();
                break;

            default:
                entries = entries.OrderByDescending(t => t.Name).ToList();
                break;
            }
            var count = entries.Count();

            var results = entries
                          .Skip(pager.GetStartIndex())
                          .Take(pager.PageSize).ToList();

            // Maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.OrderBy", options.OrderBy);

            var pagerShape = (await New.Pager(pager)).TotalItemCount(count).RouteData(routeData);

            var model = new AdminIndexViewModel
            {
                ShellSettingsEntries = results,
                Options = options,
                Pager   = pagerShape
            };

            // We populate the SelectLists
            model.Options.TenantsStates = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["All states"], Value = nameof(TenantsFilter.All)
                },
                new SelectListItem()
                {
                    Text = S["Running"], Value = nameof(TenantsFilter.Running)
                },
                new SelectListItem()
                {
                    Text = S["Disabled"], Value = nameof(TenantsFilter.Disabled)
                },
                new SelectListItem()
                {
                    Text = S["Uninitialized"], Value = nameof(TenantsFilter.Uninitialized)
                }
            };

            model.Options.TenantsSorts = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Name"], Value = nameof(TenantsOrder.Name)
                },
                new SelectListItem()
                {
                    Text = S["State"], Value = nameof(TenantsOrder.State)
                }
            };

            model.Options.TenantsBulkAction = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = S["Disable"], Value = nameof(TenantsBulkAction.Disable)
                },
                new SelectListItem()
                {
                    Text = S["Enable"], Value = nameof(TenantsBulkAction.Enable)
                }
            };

            return(View(model));
        }
Ejemplo n.º 18
0
        public ActionResult Index(SpamIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(Permissions.ManageAntiSpam, T("Not authorized to manage spam")))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            // default options
            if (options == null)
            {
                options = new SpamIndexOptions();
            }

            var query = Services.ContentManager.Query().ForPart <SpamFilterPart>();

            switch (options.Filter)
            {
            case SpamFilter.Spam:
                query = query.Where <SpamFilterPartRecord>(x => x.Status == SpamStatus.Spam);
                break;

            case SpamFilter.Ham:
                query = query.Where <SpamFilterPartRecord>(x => x.Status == SpamStatus.Ham);
                break;

            case SpamFilter.All:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count());

            switch (options.Order)
            {
            case SpamOrder.Creation:
                query = query.Join <CommonPartRecord>().OrderByDescending(u => u.CreatedUtc);
                break;
            }

            var results = query
                          .Slice(pager.GetStartIndex(), pager.PageSize);

            var model = new SpamIndexViewModel {
                Spams = results.Select(x => new SpamEntry {
                    Spam  = x.As <SpamFilterPart>(),
                    Shape = Services.ContentManager.BuildDisplay(x, "SummaryAdmin")
                }).ToList(),

                Options = options,
                Pager   = pagerShape
            };

            // maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            pagerShape.RouteData(routeData);

            return(View(model));
        }
Ejemplo n.º 19
0
        public ActionResult Rewriter(RewriterViewModel rewriterViewModel, PagerParameters pagerParameters)
        {
            if (!IsAuthorized())
            {
                return(new HttpUnauthorizedResult());
            }

            if (rewriterViewModel.TypeName == "Dynamic")
            {
                return(DynamicPageRewriter(new DynamicPageRewriterViewModel {
                    RewriterType = rewriterViewModel.RewriterType
                }));
            }

            var siteSettings = _workContext.CurrentSite;
            var pager        = new Pager(siteSettings, pagerParameters);

            var seoContentTypes = _seoService.ListSeoContentTypes();

            if (string.IsNullOrEmpty(rewriterViewModel.TypeName))
            {
                return(HttpNotFound());
            }
            var typeDefinition = seoContentTypes.SingleOrDefault(t => t.Name == rewriterViewModel.TypeName);

            if (typeDefinition == null)
            {
                return(HttpNotFound());
            }
            rewriterViewModel.TypeDisplayName         = typeDefinition.DisplayName;
            _orchardServices.WorkContext.Layout.Title = TitleForRewriter(rewriterViewModel.RewriterType, typeDefinition.DisplayName);

            var query = _contentManager.Query(VersionOptions.Latest, rewriterViewModel.TypeName);

            if (!String.IsNullOrEmpty(rewriterViewModel.Q))
            {
                IPageOfItems <ISearchHit> searchHits = new PageOfItems <ISearchHit>(new ISearchHit[] { });
                try
                {
                    ///TODO 1.9: make sure this to array function actually works
                    var searchSettings = siteSettings.As <SearchSettingsPart>();
                    searchHits = _searchService.Query(rewriterViewModel.Q, pager.Page, pager.PageSize, false,
                                                      searchSettings.SearchIndex, searchSettings.SearchFields.Keys.ToArray <string>(),
                                                      //searchSettings.SearchIndex, SearchSettingsHelper.GetSearchFields(searchSettings),
                                                      searchHit => searchHit);
                    // Could use this: http://orchard.codeplex.com/workitem/18664
                    // Converting to List, because the expression should contain an ICollection
                    var hitIds = searchHits.Select(hit => hit.ContentItemId).ToList();
                    query.Where <CommonPartRecord>(record => hitIds.Contains(record.Id));
                }
                catch (Exception ex) {
                    if (ex.IsFatal())
                    {
                        throw;
                    }
                    _orchardServices.Notifier.Error(T("Invalid search query: {0}", ex.Message));
                }
            }

            switch (rewriterViewModel.Options.OrderBy)
            {
            case ContentsOrder.Modified:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc);
                break;

            case ContentsOrder.Published:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc);
                break;

            case ContentsOrder.Created:
                query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc);
                break;
            }

            rewriterViewModel.Options.SelectedFilter = rewriterViewModel.TypeName;

            var pagerShape         = _shapeFactory.Pager(pager).TotalItemCount(query.Count());
            var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList();

            var list = _shapeFactory.List();

            list.AddRange(
                pageOfContentItems.Select(
                    item => _prefixedEditorManager.BuildShape(item, (content => _contentManager.BuildDisplay(content, "SeoSummaryAdmin-" + rewriterViewModel.RewriterType)))
                    )
                );

            dynamic viewModel = _shapeFactory.ViewModel()
                                .ContentItems(list)
                                .Options(rewriterViewModel.Options)
                                .Pager(pagerShape);

            // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation, despite
            // being it highly unlikely with Onestop, just in case...
            return(View((object)viewModel));
        }
        public PagerSet GetGameMatchUserInfoList(int pageIndex, int pageSize, string condition, string orderby)
        {
            PagerParameters prams = new PagerParameters("GameMatchUserInfo", orderby, condition, pageIndex, pageSize);

            return(this.GetPagerSet2(prams));
        }
        public async Task <IActionResult> List(ListContentsViewModel model, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            Pager pager = new Pager(pagerParameters, siteSettings.PageSize);

            var query = _session.QueryAsync <ContentItem, ContentItemIndex>();

            switch (model.Options.ContentsStatus)
            {
            case ContentsStatus.Published:
                query = query.With <ContentItemIndex>(x => x.Published);
                break;

            case ContentsStatus.Draft:
                query = query.With <ContentItemIndex>(x => x.Latest && !x.Published);
                break;

            case ContentsStatus.AllVersions:
                query = query.With <ContentItemIndex>(x => x.Latest);
                break;

            default:
                query = query.With <ContentItemIndex>(x => x.Latest);
                break;
            }

            if (!string.IsNullOrEmpty(model.TypeName))
            {
                var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(model.TypeName);
                if (contentTypeDefinition == null)
                {
                    return(NotFound());
                }

                model.TypeDisplayName = contentTypeDefinition.ToString();

                // We display a specific type even if it's not listable so that admin pages
                // can reuse the Content list page for specific types.
                query = query.With <ContentItemIndex>(x => x.ContentType == model.TypeName);
            }
            else
            {
                var listableTypes = (await GetListableTypesAsync()).Select(t => t.Name).ToArray();
                if (listableTypes.Any())
                {
                    query = query.With <ContentItemIndex>(x => x.ContentType.IsIn(listableTypes));
                }
            }

            switch (model.Options.OrderBy)
            {
            case ContentsOrder.Modified:
                query = query.OrderByDescending(x => x.ModifiedUtc);
                break;

            case ContentsOrder.Published:
                query = query.OrderByDescending(cr => cr.PublishedUtc);
                break;

            case ContentsOrder.Created:
                query = query.OrderByDescending(cr => cr.CreatedUtc);
                break;

            default:
                query = query.OrderByDescending(cr => cr.ModifiedUtc);
                break;
            }

            //if (!String.IsNullOrWhiteSpace(model.Options.SelectedCulture))
            //{
            //    query = _cultureFilter.FilterCulture(query, model.Options.SelectedCulture);
            //}

            //if (model.Options.ContentsStatus == ContentsStatus.Owner)
            //{
            //    query = query.Where<CommonPartRecord>(cr => cr.OwnerId == Services.WorkContext.CurrentUser.Id);
            //}

            model.Options.SelectedFilter = model.TypeName;
            model.Options.FilterOptions  = (await GetListableTypesAsync())
                                           .Select(ctd => new KeyValuePair <string, string>(ctd.Name, ctd.DisplayName))
                                           .ToList().OrderBy(kvp => kvp.Value);

            //model.Options.Cultures = _cultureManager.ListCultures();

            // Invoke any service that could alter the query
            await _contentAdminFilters.InvokeAsync(x => x.FilterAsync(query, model, pagerParameters, this), Logger);

            var maxPagedCount = siteSettings.MaxPagedCount;

            if (maxPagedCount > 0 && pager.PageSize > maxPagedCount)
            {
                pager.PageSize = maxPagedCount;
            }

            var pagerShape         = New.Pager(pager).TotalItemCount(maxPagedCount > 0 ? maxPagedCount : await query.Count());
            var pageOfContentItems = await query.Skip(pager.GetStartIndex()).Take(pager.PageSize).List();

            var contentItemSummaries = new List <dynamic>();

            foreach (var contentItem in pageOfContentItems)
            {
                contentItemSummaries.Add(await _contentItemDisplayManager.BuildDisplayAsync(contentItem, this, "SummaryAdmin"));
            }

            var viewModel = New.ViewModel()
                            .ContentItems(contentItemSummaries)
                            .Pager(pagerShape)
                            .Options(model.Options)
                            .TypeDisplayName(model.TypeDisplayName ?? "");

            return(View(viewModel));
        }
        public PagerSet GetList(string tableName, int pageIndex, int pageSize, string condition, string orderby)
        {
            PagerParameters prams = new PagerParameters(tableName, orderby, condition, pageIndex, pageSize);

            return(this.GetPagerSet2(prams));
        }
Ejemplo n.º 23
0
        public async Task <IPagination <TicketResponse> > ListRequestedByAsync(long userId, PagerParameters pager = null)
        {
            using (_loggerScope(_logger, $"ListRequestedByAsync({userId})"))
                using (var client = _apiClient.CreateClient(string.Format(UserResourceUriFormat, userId)))
                {
                    var response = await client.GetAsync("requested", pager).ConfigureAwait(false);

                    if (response.StatusCode == HttpStatusCode.NotFound)
                    {
                        _logger.LogInformation("Requested ticketsResponse for user {0} not found", userId);
                        return(null);
                    }

                    if (!response.IsSuccessStatusCode)
                    {
                        throw await new ZendeskRequestExceptionBuilder()
                              .WithResponse(response)
                              .WithHelpDocsLink("core/tickets#list-tickets")
                              .Build();
                    }

                    return(await response.Content.ReadAsAsync <TicketsListResponse>());
                }
        }
        public ActionResult Index(PagerParameters pagerParameters, string part, string field, string searchText = "")
        {
            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);
            var searchSettingsPart = Services.WorkContext.CurrentSite.As <SearchSettingsPart>();
            var totalCount         = 0;
            var foundIds           = new int[0];

            if (!String.IsNullOrWhiteSpace(searchText))
            {
                ContentPickerSearchFieldSettings settings = null;
                // if the picker is loaded for a specific field, apply custom settings
                if (!String.IsNullOrEmpty(part) && !String.IsNullOrEmpty(field))
                {
                    var definition = _contentDefinitionManager.GetPartDefinition(part).Fields.FirstOrDefault(x => x.Name == field);
                    if (definition != null)
                    {
                        settings = definition.Settings.GetModel <ContentPickerSearchFieldSettings>();
                    }
                }

                if (!_indexManager.HasIndexProvider())
                {
                    return(View("NoIndex"));
                }

                var searchIndex = searchSettingsPart.SearchIndex;
                if (settings != null && !String.IsNullOrEmpty(settings.SearchIndex))
                {
                    searchIndex = settings.SearchIndex;
                }
                var searchFields = searchSettingsPart.GetSearchFields(searchIndex);

                var builder = _indexManager.GetSearchIndexProvider().CreateSearchBuilder(searchIndex);

                try {
                    builder.Parse(searchFields, searchText);

                    if (settings != null && !String.IsNullOrEmpty(settings.DisplayedContentTypes))
                    {
                        var rawTypes     = settings.DisplayedContentTypes.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
                        var contentTypes = _contentDefinitionManager
                                           .ListTypeDefinitions()
                                           .Where(x => x.Parts.Any(p => rawTypes.Contains(p.PartDefinition.Name)) || rawTypes.Contains(x.Name))
                                           .ToArray();


                        foreach (string type in contentTypes.Select(x => x.Name))
                        {
                            builder.WithField("type", type).NotAnalyzed().AsFilter();
                        }
                    }

                    totalCount = builder.Count();
                    builder    = builder.Slice((pager.Page > 0 ? pager.Page - 1 : 0) * pager.PageSize, pager.PageSize);
                    var searchResults = builder.Search();

                    foundIds = searchResults.Select(searchHit => searchHit.ContentItemId).ToArray();
                }
                catch (Exception exception) {
                    Logger.Error(T("Invalid search query: {0}", exception.Message).Text);
                    Services.Notifier.Error(T("Invalid search query: {0}", exception.Message));
                }
            }

            var list = Services.New.List();

            foreach (var contentItem in Services.ContentManager.GetMany <IContent>(foundIds, VersionOptions.Published, QueryHints.Empty))
            {
                // ignore search results which content item has been removed or unpublished
                if (contentItem == null)
                {
                    totalCount--;
                    continue;
                }

                list.Add(Services.ContentManager.BuildDisplay(contentItem, "SummaryAdmin"));
            }

            var pagerShape = Services.New.Pager(pager).TotalItemCount(totalCount);

            foreach (IShape item in list.Items)
            {
                item.Metadata.Type = "ContentPicker";
            }

            // retain the parameter in the pager links
            RouteData.Values["searchText"] = searchText;

            dynamic tab = Services.New.SearchContentTab()
                          .ContentItems(list)
                          .Pager(pagerShape)
                          .SearchText(searchText);

            return(new ShapeResult(this, Services.New.ContentPicker().Tab(tab)));
        }
Ejemplo n.º 25
0
        public async Task <IActionResult> Index(string id, string q, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            Pager pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "Search";

            if (!String.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

            if (!_luceneIndexProvider.Exists(indexName))
            {
                return(NotFound());
            }

            if (String.IsNullOrWhiteSpace(q))
            {
                return(View(new SearchIndexViewModel
                {
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var luceneSettings = await _luceneIndexingService.GetLuceneSettingsAsync();

            if (luceneSettings == null)
            {
                Logger.LogInformation("Couldn't execute search. No Lucene settings was defined.");

                return(View(new SearchIndexViewModel
                {
                    HasMoreResults = false,
                    Query = q,
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, new StandardAnalyzer(LuceneSettings.DefaultVersion));
            var query       = queryParser.Parse(QueryParser.Escape(q));

            var contentItemIds = new List <string>();

            await _luceneIndexProvider.SearchAsync(indexName, searcher =>
            {
                // Fetch one more result than PageSize to generate "More" links
                TopScoreDocCollector collector = TopScoreDocCollector.Create(pager.PageSize + 1, true);

                searcher.Search(query, collector);
                TopDocs hits = collector.TopDocs(pager.GetStartIndex(), pager.PageSize + 1);

                foreach (var hit in hits.ScoreDocs)
                {
                    var d = searcher.Doc(hit.Doc, IdSet);
                    contentItemIds.Add(d.GetField("ContentItemId").StringValue);
                }

                return(Task.CompletedTask);
            });

            var contentItems = new List <ContentItem>();

            foreach (var contentItemId in contentItemIds.Take(pager.PageSize))
            {
                var contentItem = await _contentManager.GetAsync(contentItemId);

                if (contentItem != null)
                {
                    contentItems.Add(contentItem);
                }
            }

            var model = new SearchIndexViewModel
            {
                HasMoreResults = contentItemIds.Count > pager.PageSize,
                Query          = q,
                Pager          = pager,
                IndexName      = id,
                ContentItems   = contentItems
            };

            return(View(model));
        }
Ejemplo n.º 26
0
        public ActionResult Index(AdminIndexOptions options, PagerParameters pagerParameters)
        {
            if (!Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to list workflows")))
            {
                return(new HttpUnauthorizedResult());
            }

            var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters);

            // default options
            if (options == null)
            {
                options = new AdminIndexOptions();
            }

            var queries = _workflowDefinitionRecords.Table;

            switch (options.Filter)
            {
            case WorkflowDefinitionFilter.All:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (!String.IsNullOrWhiteSpace(options.Search))
            {
                queries = queries.Where(w => w.Name.Contains(options.Search));
            }

            var pagerShape = New.Pager(pager).TotalItemCount(queries.Count());

            switch (options.Order)
            {
            case WorkflowDefinitionOrder.Name:
                queries = queries.OrderBy(u => u.Name);
                break;
            }

            if (pager.GetStartIndex() > 0)
            {
                queries = queries.Skip(pager.GetStartIndex());
            }

            if (pager.PageSize > 0)
            {
                queries = queries.Take(pager.PageSize);
            }

            var results = queries.ToList();

            var model = new AdminIndexViewModel {
                WorkflowDefinitions = results.Select(x => new WorkflowDefinitionEntry {
                    WorkflowDefinitionRecord = x,
                    WokflowDefinitionId      = x.Id,
                    Name = x.Name
                }).ToList(),
                Options = options,
                Pager   = pagerShape
            };

            // maintain previous route data when generating page links
            var routeData = new RouteData();

            routeData.Values.Add("Options.Filter", options.Filter);
            routeData.Values.Add("Options.Search", options.Search);
            routeData.Values.Add("Options.Order", options.Order);

            pagerShape.RouteData(routeData);

            return(View(model));
        }
 public ActionResult ModulesUpdates(int?reportId, PagerParameters pagerParameters)
 {
     return(PackageUpdate("ModulesUpdates", DefaultExtensionTypes.Module, reportId, pagerParameters));
 }
Ejemplo n.º 28
0
        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        /// <param name="where">查询条件</param>
        /// <param name="order">排序</param>
        /// <param name="pageIndex">页下标</param>
        /// <param name="pageSize">页显示数</param>
        /// <returns></returns>
        public PagerSet GetPageGroupList(string where, string order, int pageIndex, int pageSize)
        {
            PagerParameters pagerPrams = new PagerParameters("IMGroupProperty", where, order, pageIndex, pageSize, null, "WEB_PageView_Group");

            return(GetPagerSet(pagerPrams));
        }
        private ActionResult PackageUpdate(string view, string extensionType, int?reportId, PagerParameters pagerParameters)
        {
            if (_shellSettings.Name != ShellSettings.DefaultName || !Services.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not authorized to add sources")))
            {
                return(new HttpUnauthorizedResult());
            }

            Pager pager = new Pager(Services.WorkContext.CurrentSite, pagerParameters);

            if (!_packagingSourceManager.GetSources().Any())
            {
                Services.Notifier.Error(T("No Gallery feed configured"));
                return(View(view, new PackagingListViewModel {
                    Entries = new List <UpdatePackageEntry>()
                }));
            }

            // Get status from background task state or directly
            _backgroundPackageUpdateStatus.Value =
                _backgroundPackageUpdateStatus.Value ??
                _packageUpdateService.GetPackagesStatus(_packagingSourceManager.GetSources());

            foreach (var error in _backgroundPackageUpdateStatus.Value.Errors)
            {
                for (var scan = error; scan != null; scan = scan.InnerException)
                {
                    Services.Notifier.Warning(T("Package retrieve error: {0}", scan.Message));
                }
            }

            IEnumerable <UpdatePackageEntry> updatedPackages = _backgroundPackageUpdateStatus.Value.Entries
                                                               .Where(updatePackageEntry =>
                                                                      updatePackageEntry.ExtensionsDescriptor.ExtensionType.Equals(extensionType) &&
                                                                      updatePackageEntry.NewVersionToInstall != null);

            int totalItemCount = updatedPackages.Count();

            if (pager.PageSize != 0)
            {
                updatedPackages = updatedPackages.Skip((pager.Page - 1) * pager.PageSize).Take(pager.PageSize);
            }

            return(View(view, new PackagingListViewModel {
                Entries = updatedPackages,
                Pager = Shape.Pager(pager).TotalItemCount(totalItemCount)
            }));
        }
Ejemplo n.º 30
0
 /// <summary>
 /// Constructs a new pager.
 /// </summary>
 /// <param name="site">The site settings.</param>
 /// <param name="pagerParameters">The pager parameters.</param>
 public Pager(PagerParameters pagerParameters, int defaultPageSize)
     : this(pagerParameters.Page, pagerParameters.PageSize, defaultPageSize)
 {
 }
Ejemplo n.º 31
0
        public static Task <HttpResponseMessage> GetAsync(this HttpClient client, string requestUri, PagerParameters parameters = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            var pager = new Pager(parameters?.Page, parameters?.PageSize, 100);

            var pagination = $"per_page={pager.PageSize}&page={pager.Page}";

            if (requestUri.Contains("?"))
            {
                requestUri += "&" + pagination;
            }
            else
            {
                requestUri += "?" + pagination;
            }

            return(client.GetAsync(requestUri, cancellationToken));
        }