Esempio n. 1
0
        public static List <(int ChannelId, int ContentId)> GetChannelContentIdList(SiteInfo siteInfo, ChannelInfo channelInfo, int adminId, bool isAllContents, int offset, int limit)
        {
            var tableName = ChannelManager.GetTableName(siteInfo, channelInfo);

            var channelContentIdList = new List <(int ChannelId, int ContentId)>();

            foreach (var contentId in ListCache.GetContentIdList(channelInfo.Id, adminId))
            {
                channelContentIdList.Add((channelInfo.Id, contentId));
            }
            if (isAllContents)
            {
                var channelIdList = ChannelManager.GetChannelIdList(channelInfo, EScopeType.Descendant);
                foreach (var contentChannelId in channelIdList)
                {
                    var contentChannelInfo = ChannelManager.GetChannelInfo(siteInfo.Id, contentChannelId);
                    var channelTableName   = ChannelManager.GetTableName(siteInfo, contentChannelInfo);
                    if (!StringUtils.EqualsIgnoreCase(tableName, channelTableName))
                    {
                        continue;
                    }

                    foreach (var contentId in ListCache.GetContentIdList(contentChannelId, adminId))
                    {
                        channelContentIdList.Add((contentChannelId, contentId));
                    }
                }
            }

            if (channelContentIdList.Count >= offset + limit)
            {
                return(channelContentIdList.Skip(offset).Take(limit).ToList());
            }

            if (channelContentIdList.Count == offset)
            {
                var dict = ContentCache.GetContentDict(channelInfo.Id);

                var pageContentInfoList = DataProvider.ContentDao.GetContentInfoList(tableName, DataProvider.ContentDao.GetCacheWhereString(siteInfo, channelInfo, adminId, isAllContents),
                                                                                     DataProvider.ContentDao.GetOrderString(channelInfo, string.Empty, isAllContents), offset, limit);

                foreach (var contentInfo in pageContentInfoList)
                {
                    ListCache.Set(contentInfo);
                    dict[contentInfo.Id] = contentInfo;
                }

                var pageContentIdList = pageContentInfoList.Select(x => (x.ChannelId, x.Id)).ToList();
                channelContentIdList.AddRange(pageContentIdList);
                return(pageContentIdList);
            }

            return(DataProvider.ContentDao.GetCacheChannelContentIdList(tableName, DataProvider.ContentDao.GetCacheWhereString(siteInfo, channelInfo, adminId, isAllContents),
                                                                        DataProvider.ContentDao.GetOrderString(channelInfo, string.Empty, isAllContents), offset, limit));
        }