public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { var pager = new Pager(_siteService.GetSiteSettings(), pagerParameters); var container = model.ContainerId.HasValue ? _contentManager.GetLatest((int)model.ContainerId) : null; if (container == null || !container.Has<ContainerPart>()) { return HttpNotFound(); } var restrictedContentType = container.As<ContainerPart>().Record.ItemContentType; var hasRestriction = !string.IsNullOrEmpty(restrictedContentType); if (hasRestriction) { model.FilterByContentType = restrictedContentType; } model.Options.SelectedFilter = model.FilterByContentType; model.ContainerDisplayName = container.ContentManager.GetItemMetadata(container).DisplayText; if (string.IsNullOrEmpty(model.ContainerDisplayName)) { model.ContainerDisplayName = container.ContentType; } var query = GetListContentItemQuery(model.ContainerId.Value, model.FilterByContentType, model.Options.OrderBy); if (query == null) { return HttpNotFound(); } model.Options.FilterOptions = GetContainableTypes() .Select(ctd => new KeyValuePair<string, string>(ctd.Name, ctd.DisplayName)) .ToList().OrderBy(kvp => kvp.Key); var pagerShape = Shape.Pager(pager).TotalItemCount(query.Count()); var pageOfContentItems = query.Slice(pager.GetStartIndex(), pager.PageSize).ToList(); var list = Shape.List(); list.AddRange(pageOfContentItems.Select(ci => _contentManager.BuildDisplay(ci, "SummaryAdmin"))); var containerItemContentDisplayName = String.Empty; if (hasRestriction) containerItemContentDisplayName = _contentDefinitionManager.GetTypeDefinition(restrictedContentType).DisplayName; else if (!string.IsNullOrEmpty(model.FilterByContentType)) containerItemContentDisplayName = _contentDefinitionManager.GetTypeDefinition(model.FilterByContentType).DisplayName; dynamic viewModel = Shape.ViewModel() .ContentItems(list) .Pager(pagerShape) .ContainerId(model.ContainerId) .Options(model.Options) .ContainerDisplayName(model.ContainerDisplayName) .HasRestriction(hasRestriction) .ContainerContentType(container.ContentType) .ContainerItemContentDisplayName(containerItemContentDisplayName) .ContainerItemContentType(hasRestriction ? restrictedContentType : (model.FilterByContentType ?? "")) .OtherLists(_contentManager.Query<ContainerPart>(VersionOptions.Latest).List() .Select(part => part.ContentItem) .Where(item => item != container) .OrderBy(item => item.As<CommonPart>().VersionPublishedUtc)); // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation. return View((object)viewModel); }
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { var pager = new Pager(_services.WorkContext.CurrentSite, pagerParameters); var container = _contentManager.GetLatest(model.ContainerId); if (container == null || !container.Has <ContainerPart>()) { return(HttpNotFound()); } model.ContainerDisplayName = container.ContentManager.GetItemMetadata(container).DisplayText; if (string.IsNullOrEmpty(model.ContainerDisplayName)) { model.ContainerDisplayName = container.ContentType; } var query = GetListContentItemQuery(model.ContainerId); if (query == null) { return(HttpNotFound()); } var containerPart = container.As <ContainerPart>(); if (containerPart.EnablePositioning) { query = OrderByPosition(query); } else { switch (model.Options.OrderBy) { case SortBy.Modified: query = query.OrderByDescending <CommonPartRecord>(cr => cr.ModifiedUtc); break; case SortBy.Published: query = query.OrderByDescending <CommonPartRecord>(cr => cr.PublishedUtc); break; case SortBy.Created: query = query.OrderByDescending <CommonPartRecord>(cr => cr.CreatedUtc); break; case SortBy.DisplayText: // Note: This will obviously not work for items without a TitlePart, but we're OK with that. query = query.OrderBy <TitlePartRecord>(cr => cr.Title); break; } } var listView = containerPart.AdminListView.BuildDisplay(new BuildListViewDisplayContext { New = _services.New, Container = containerPart, ContentQuery = query, Pager = pager, ContainerDisplayName = model.ContainerDisplayName }); var viewModel = Shape.ViewModel() .Pager(pager) .ListView(listView) .ListViewProvider(containerPart.AdminListView) .ListViewProviders(_listViewService.Providers.ToList()) .Options(model.Options) .Container(container) .ContainerId(model.ContainerId) .ContainerDisplayName(model.ContainerDisplayName) .ContainerContentType(container.ContentType) .ItemContentTypes(container.As <ContainerPart>().ItemContentTypes.ToList()) ; if (containerPart.Is <ContainablePart>()) { viewModel.ListNavigation(_services.New.ListNavigation(ContainablePart: containerPart.As <ContainablePart>())); } return(View(viewModel)); }
public ActionResult List(ListContentsViewModel model, PagerParameters pagerParameters) { var pager = new Pager(_services.WorkContext.CurrentSite, pagerParameters); var container = _contentManager.GetLatest(model.ContainerId); if (container == null || !container.Has<ContainerPart>()) { return HttpNotFound(); } model.ContainerDisplayName = container.ContentManager.GetItemMetadata(container).DisplayText; if (string.IsNullOrEmpty(model.ContainerDisplayName)) { model.ContainerDisplayName = container.ContentType; } var query = GetListContentItemQuery(model.ContainerId); if (query == null) { return HttpNotFound(); } var containerPart = container.As<ContainerPart>(); if (containerPart.EnablePositioning) { query = OrderByPosition(query); } else { switch (model.Options.OrderBy) { case SortBy.Modified: query = query.OrderByDescending<CommonPartRecord>(cr => cr.ModifiedUtc); break; case SortBy.Published: query = query.OrderByDescending<CommonPartRecord>(cr => cr.PublishedUtc); break; case SortBy.Created: query = query.OrderByDescending<CommonPartRecord>(cr => cr.CreatedUtc); break; case SortBy.DisplayText: // Note: This will obviously not work for items without a TitlePart, but we're OK with that. query = query.OrderBy<TitlePartRecord>(cr => cr.Title); break; } } var listView = containerPart.AdminListView.BuildDisplay(new BuildListViewDisplayContext { New = _services.New, Container = containerPart, ContentQuery = query, Pager = pager, ContainerDisplayName = model.ContainerDisplayName }); var viewModel = Shape.ViewModel() .Pager(pager) .ListView(listView) .ListViewProvider(containerPart.AdminListView) .ListViewProviders(_listViewService.Providers.ToList()) .Options(model.Options) .Container(container) .ContainerId(model.ContainerId) .ContainerDisplayName(model.ContainerDisplayName) .ContainerContentType(container.ContentType) .ItemContentTypes(container.As<ContainerPart>().ItemContentTypes.ToList()) .OtherLists(_contentManager.Query<ContainerPart>(VersionOptions.Latest).List() .Select(part => part.ContentItem) .Where(item => item != container) .OrderBy(item => item.As<CommonPart>().VersionPublishedUtc)); if (containerPart.Is<ContainablePart>()) { viewModel.ListNavigation(_services.New.ListNavigation(ContainablePart: containerPart.As<ContainablePart>())); } return View(viewModel); }