public async Task <ActionResult <QueryResult> > GetContents([FromBody] QueryRequest request) { if (!await _accessTokenRepository.IsScopeAsync(_authManager.ApiToken, Constants.ScopeContents)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var tableName = site.TableName; var query = await GetQueryAsync(request.SiteId, request.ChannelId, request); var totalCount = await _contentRepository.GetCountAsync(tableName, query); var page = request.Page > 0 ? request.Page : 1; var perPage = request.PerPage > 0 ? request.PerPage : site.PageSize; query.ForPage(page, perPage); var summaries = await _contentRepository.GetSummariesAsync(tableName, query); var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var channel = request.ChannelId.HasValue && request.ChannelId.Value > 0 ? await _channelRepository.GetAsync(request.ChannelId.Value) : await _channelRepository.GetAsync(request.SiteId); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.Contents); var sequence = page * perPage + 1; var pageContents = new List <Content>(); foreach (var summary in summaries) { var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id); var pageContent = await columnsManager.CalculateContentListAsync(sequence ++, site, content.ChannelId, content, columns); var navigationUrl = await _parseManager.PathManager.GetContentUrlAsync(site, content, false); pageContent.Set("NavigationUrl", navigationUrl); pageContents.Add(pageContent); } return(new QueryResult { Contents = pageContents, TotalCount = totalCount }); }
public async Task <ActionResult <ListResult> > List([FromBody] ListRequest request) { var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.ChannelId > 0?request.ChannelId : request.SiteId); var isAdd = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Add); var pageContents = new List <Content>(); var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.SearchContents); var offset = site.PageSize * (request.Page - 1); int?channelId = null; if (channel.Id != request.SiteId) { channelId = channel.Id; } var(total, pageSummaries) = await _contentRepository.UserWriteSearch(_authManager.UserId, site, request.Page, channelId, request.IsCheckedLevels, request.CheckedLevels, request.GroupNames, request.TagNames); if (total > 0) { var sequence = offset + 1; foreach (var summary in pageSummaries) { var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id); if (content == null) { continue; } var pageContent = await columnsManager.CalculateContentListAsync(sequence ++, site, request.SiteId, content, columns); pageContents.Add(pageContent); } } return(new ListResult { IsAdd = isAdd, PageContents = pageContents, Total = total, PageSize = site.PageSize }); }
public async Task <ActionResult <ListResult> > List([FromBody] ListRequest request) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.ContentsCheck)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.SiteId); var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.CheckContents); var pageContents = new List <Content>(); var(total, pageSummaries) = await _contentRepository.CheckSearchAsync(site, request.Page, request.ChannelId, request.StartDate, request.EndDate, request.Items, request.IsCheckedLevels, request.CheckedLevels, request.IsTop, request.IsRecommend, request.IsHot, request.IsColor, request.GroupNames, request.TagNames); if (total > 0) { var offset = site.PageSize * (request.Page - 1); var sequence = offset + 1; foreach (var summary in pageSummaries) { var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id); if (content == null) { continue; } var pageContent = await columnsManager.CalculateContentListAsync(sequence ++, site, request.SiteId, content, columns); pageContents.Add(pageContent); } } return(new ListResult { PageContents = pageContents, Total = total, PageSize = site.PageSize }); }
public async Task <ActionResult <ListResult> > List([FromBody] ListRequest request) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.Contents) || !await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId, MenuUtils.ContentPermissions.View, MenuUtils.ContentPermissions.Add, MenuUtils.ContentPermissions.Edit, MenuUtils.ContentPermissions.Delete, MenuUtils.ContentPermissions.Translate, MenuUtils.ContentPermissions.Arrange, MenuUtils.ContentPermissions.CheckLevel1, MenuUtils.ContentPermissions.CheckLevel2, MenuUtils.ContentPermissions.CheckLevel3, MenuUtils.ContentPermissions.CheckLevel4, MenuUtils.ContentPermissions.CheckLevel5)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.ChannelId); if (channel == null) { return(this.Error("无法确定内容对应的栏目")); } var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.Contents); var pageContents = new List <Content>(); List <ContentSummary> summaries; if (!string.IsNullOrEmpty(request.SearchType) && !string.IsNullOrEmpty(request.SearchText) || request.IsAdvanced) { summaries = await _contentRepository.Search(site, channel, channel.IsAllContents, request.SearchType, request.SearchText, request.IsAdvanced, request.CheckedLevels, request.IsTop, request.IsRecommend, request.IsHot, request.IsColor, request.GroupNames, request.TagNames); } else { summaries = await _contentRepository.GetSummariesAsync(site, channel, channel.IsAllContents); } var total = summaries.Count; var channelPlugins = _pluginManager.GetPlugins(request.SiteId, request.ChannelId); var contentMenus = new List <Menu>(); foreach (var plugin in channelPlugins) { var pluginMenus = plugin.GetMenus() .Where(x => ListUtils.ContainsIgnoreCase(x.Type, Types.Resources.Content)).ToList(); if (pluginMenus.Count == 0) { continue; } contentMenus.AddRange(pluginMenus); } if (total > 0) { var offset = site.PageSize * (request.Page - 1); var pageSummaries = summaries.Skip(offset).Take(site.PageSize).ToList(); var sequence = offset + 1; foreach (var summary in pageSummaries) { var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id); if (content == null) { continue; } var pageContent = await columnsManager.CalculateContentListAsync(sequence ++, site, request.ChannelId, content, columns); pageContents.Add(pageContent); } } var(isChecked, checkedLevel) = await CheckManager.GetUserCheckLevelAsync(_authManager, site, request.ChannelId); var checkedLevels = ElementUtils.GetCheckBoxes(CheckManager.GetCheckedLevels(site, isChecked, checkedLevel, true)); var permissions = new Permissions { IsAdd = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Add), IsDelete = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Delete), IsEdit = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Edit), IsArrange = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Arrange), IsTranslate = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Translate), IsCheck = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.CheckLevel1), IsCreate = await _authManager.HasSitePermissionsAsync(site.Id, MenuUtils.SitePermissions.CreateContents) || await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, MenuUtils.ContentPermissions.Create), IsChannelEdit = await _authManager.HasChannelPermissionsAsync(site.Id, channel.Id, MenuUtils.ChannelPermissions.Edit) }; return(new ListResult { PageContents = pageContents, Total = total, PageSize = site.PageSize, Columns = columns, IsAllContents = channel.IsAllContents, CheckedLevels = checkedLevels, Permissions = permissions, Menus = contentMenus }); }
public async Task <ActionResult <SubmitResult> > Submit([FromBody] SubmitRequest request) { if (!await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId, Types.ContentPermissions.View)) { return(Unauthorized()); } var summaries = ContentUtility.ParseSummaries(request.ChannelContentIds); var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.ChannelId); if (channel == null) { return(this.Error("无法确定内容对应的栏目")); } var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.Contents); var contentInfoList = new List <Content>(); var calculatedContentInfoList = new List <Content>(); if (summaries.Count == 0) { var ccIds = await _contentRepository.GetSummariesAsync(site, channel, channel.IsAllContents); var count = ccIds.Count; var pages = Convert.ToInt32(Math.Ceiling((double)count / site.PageSize)); if (pages == 0) { pages = 1; } if (count > 0) { for (var page = 1; page <= pages; page++) { var offset = site.PageSize * (page - 1); var limit = site.PageSize; var pageCcIds = ccIds.Skip(offset).Take(limit).ToList(); var sequence = offset + 1; foreach (var channelContentId in pageCcIds) { var contentInfo = await _contentRepository.GetAsync(site, channelContentId.ChannelId, channelContentId.Id); if (contentInfo == null) { continue; } if (!request.IsAllCheckedLevel) { var checkedLevel = contentInfo.CheckedLevel; if (contentInfo.Checked) { checkedLevel = site.CheckContentLevel; } if (!request.CheckedLevelKeys.Contains(checkedLevel)) { continue; } } if (!request.IsAllDate) { if (contentInfo.AddDate < request.StartDate || contentInfo.AddDate > request.EndDate) { continue; } } contentInfoList.Add(contentInfo); calculatedContentInfoList.Add(await columnsManager.CalculateContentListAsync(sequence++, site, request.ChannelId, contentInfo, columns)); } } } } else { var sequence = 1; foreach (var channelContentId in summaries) { var contentInfo = await _contentRepository.GetAsync(site, channelContentId.ChannelId, channelContentId.Id); if (contentInfo == null) { continue; } if (!request.IsAllCheckedLevel) { var checkedLevel = contentInfo.CheckedLevel; if (contentInfo.Checked) { checkedLevel = site.CheckContentLevel; } if (!request.CheckedLevelKeys.Contains(checkedLevel)) { continue; } } if (!request.IsAllDate) { if (contentInfo.AddDate < request.StartDate || contentInfo.AddDate > request.EndDate) { continue; } } contentInfoList.Add(contentInfo); calculatedContentInfoList.Add(await columnsManager.CalculateContentListAsync(sequence++, site, request.ChannelId, contentInfo, columns)); } } var downloadUrl = string.Empty; if (contentInfoList.Count > 0) { if (request.ExportType == "zip") { var fileName = $"{channel.ChannelName}.zip"; var filePath = _pathManager.GetTemporaryFilesPath(fileName); var caching = new CacheUtils(_cacheManager); var exportObject = new ExportObject(_pathManager, _databaseManager, caching, site); contentInfoList.Reverse(); if (await exportObject.ExportContentsAsync(filePath, contentInfoList)) { downloadUrl = _pathManager.GetTemporaryFilesUrl(fileName); } } else if (request.ExportType == "excel") { var exportColumnNames = request.IsAllColumns ? columns.Select(x => x.AttributeName).ToList() : request.ColumnNames; var fileName = $"{channel.ChannelName}.csv"; var filePath = _pathManager.GetTemporaryFilesPath(fileName); var excelObject = new ExcelObject(_databaseManager, _pathManager); await excelObject.CreateExcelFileForContentsAsync(filePath, site, channel, calculatedContentInfoList, exportColumnNames); downloadUrl = _pathManager.GetTemporaryFilesUrl(fileName); } } return(new SubmitResult { Value = downloadUrl, IsSuccess = !string.IsNullOrEmpty(downloadUrl) }); }
public async Task <ActionResult <ListResult> > List([FromBody] ListRequest request) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.ContentsSearch)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.SiteId); var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.SearchContents); var offset = site.PageSize * (request.Page - 1); int total; List <ContentSummary> pageSummaries; if (request.IsAdvanced) { var isAdmin = false; var adminId = _authManager.AdminId; var isUser = false; if (request.SearchType == SearchType.Admin) { isAdmin = true; } else if (request.SearchType == SearchType.User) { isUser = true; } (total, pageSummaries) = await _contentRepository.AdvancedSearch(site, request.Page, request.ChannelIds, request.IsAllContents, request.StartDate, request.EndDate, request.Items, request.IsCheckedLevels, request.CheckedLevels, request.IsTop, request.IsRecommend, request.IsHot, request.IsColor, request.GroupNames, request.TagNames, isAdmin, adminId, isUser); } else { var channelId = request.ChannelIds.FirstOrDefault(); var first = await _channelRepository.GetAsync(channelId); var summaries = await _contentRepository.GetSummariesAsync(site, first, request.IsAllContents); total = summaries.Count; pageSummaries = summaries.Skip(offset).Take(site.PageSize).ToList(); } var pageContents = new List <Content>(); if (total > 0) { var sequence = offset + 1; foreach (var summary in pageSummaries) { var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id); if (content == null) { continue; } var pageContent = await columnsManager.CalculateContentListAsync(sequence ++, site, request.SiteId, content, columns); pageContents.Add(pageContent); } } return(new ListResult { PageContents = pageContents, Total = total, PageSize = site.PageSize }); }
public async Task <ActionResult <GetResult> > Get([FromQuery] GetRequest request) { if (!await _authManager.HasSitePermissionsAsync(request.SiteId, MenuUtils.SitePermissions.Contents) || !await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId, MenuUtils.ContentPermissions.View)) { return(Unauthorized()); } var site = await _siteRepository.GetAsync(request.SiteId); if (site == null) { return(NotFound()); } var channel = await _channelRepository.GetAsync(request.ChannelId); var content = await _contentRepository.GetAsync(site, channel, request.ContentId); if (content == null) { return(NotFound()); } var channelName = await _channelRepository.GetChannelNameNavigationAsync(request.SiteId, request.ChannelId); var columnsManager = new ColumnsManager(_databaseManager, _pathManager); var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.Contents); var calculatedContent = await columnsManager.CalculateContentListAsync(1, site, request.ChannelId, content, columns); calculatedContent.Body = content.Body; var siteUrl = await _pathManager.GetSiteUrlAsync(site, true); var groupNames = await _contentGroupRepository.GetGroupNamesAsync(request.SiteId); var tagNames = await _contentTagRepository.GetTagNamesAsync(request.SiteId); var editorColumns = new List <ContentColumn>(); var styles = await _tableStyleRepository.GetContentStylesAsync(site, channel); foreach (var tableStyle in styles) { if (tableStyle.InputType != InputType.TextEditor) { continue; } editorColumns.Add(new ContentColumn { AttributeName = tableStyle.AttributeName, DisplayName = tableStyle.DisplayName }); } return(new GetResult { Content = calculatedContent, ChannelName = channelName, State = CheckManager.GetCheckState(site, content), Columns = columns, SiteUrl = siteUrl, GroupNames = groupNames, TagNames = tagNames, EditorColumns = editorColumns }); }