コード例 #1
0
ファイル: AdminController.cs プロジェクト: wezmag/Coevery
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: AdminController.cs プロジェクト: Zlatinsz/podnebeto
        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);
        }