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 || x.Published); 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.Id); 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 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.QueryAsync<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.Count(); var results = await users .Skip(pager.GetStartIndex()) .Take(pager.PageSize) .List(); // 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 = New.Pager(pager).TotalItemCount(count).RouteData(routeData); var model = new UsersIndexViewModel { Users = results .Select(x => new UserEntry { User = x }) .ToList(), Options = options, Pager = pagerShape }; return View(model); }