예제 #1
0
        public async Task <ActionResult <ChannelsResult> > List([FromQuery] SiteRequest request)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            MenuUtils.SitePermissions.Channels))
            {
                return(Unauthorized());
            }

            var site = await _siteRepository.GetAsync(request.SiteId);

            if (site == null)
            {
                return(NotFound());
            }

            var channel = await _channelRepository.GetAsync(request.SiteId);

            var max     = 0;
            var cascade = await _channelRepository.GetCascadeAsync(site, channel, async summary =>
            {
                var count      = await _contentRepository.GetCountAsync(site, summary);
                var groupNames = await _channelRepository.GetGroupNamesAsync(summary.Id);

                var channelPlugins = _pluginManager.GetPlugins(request.SiteId, summary.Id);
                var menus          = new List <Menu>();
                foreach (var plugin in channelPlugins)
                {
                    var pluginMenus = plugin.GetMenus()
                                      .Where(x => ListUtils.ContainsIgnoreCase(x.Type, Types.Resources.Channel)).ToList();
                    if (pluginMenus.Count == 0)
                    {
                        continue;
                    }

                    menus.AddRange(pluginMenus);
                }

                max = Math.Max(max, menus.Count);

                var node = await _channelRepository.GetAsync(summary.Id);

                return(new
                {
                    Channel = node,
                    Count = count,
                    GroupNames = groupNames,
                    Menus = menus
                });
            });

            var indexNames = await _channelRepository.GetChannelIndexNamesAsync(request.SiteId);

            var groupNameList = await _channelGroupRepository.GetGroupNamesAsync(request.SiteId);

            var channelTemplates = await _templateRepository.GetTemplatesByTypeAsync(request.SiteId, TemplateType.ChannelTemplate);

            var contentTemplates = await _templateRepository.GetTemplatesByTypeAsync(request.SiteId, TemplateType.ContentTemplate);

            var columnsManager = new ColumnsManager(_databaseManager, _pathManager);
            var columns        = await columnsManager.GetChannelListColumnsAsync(site);

            var commandsWidth      = 160 + 40 * max;
            var isTemplateEditable =
                await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.Templates);

            var linkTypes  = _pathManager.GetLinkTypeSelects();
            var taxisTypes = new List <Select <string> >
            {
                new Select <string>(TaxisType.OrderByTaxisDesc),
                new Select <string>(TaxisType.OrderByTaxis),
                new Select <string>(TaxisType.OrderByAddDateDesc),
                new Select <string>(TaxisType.OrderByAddDate)
            };
            var siteUrl = await _pathManager.GetSiteUrlAsync(site, true);

            return(new ChannelsResult
            {
                Channel = cascade,
                IndexNames = indexNames,
                GroupNames = groupNameList,
                ChannelTemplates = channelTemplates,
                ContentTemplates = contentTemplates,
                Columns = columns,
                CommandsWidth = commandsWidth,
                IsTemplateEditable = isTemplateEditable,
                LinkTypes = linkTypes,
                TaxisTypes = taxisTypes,
                SiteUrl = siteUrl
            });
        }