/src/SSCMS.Web/Controllers/Admin/Cms/Contents/ContentsController.List.cs

https://github.com/siteserver/cms · C# · 115 lines · 101 code · 14 blank · 0 comment · 12 complexity · baa76e52f3bc13de5e20bfd36f6d2f5d MD5 · raw file

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Microsoft.AspNetCore.Mvc;
  5. using SSCMS.Configuration;
  6. using SSCMS.Core.Utils;
  7. using SSCMS.Models;
  8. using SSCMS.Utils;
  9. namespace SSCMS.Web.Controllers.Admin.Cms.Contents
  10. {
  11. public partial class ContentsController
  12. {
  13. [HttpPost, Route(RouteList)]
  14. public async Task<ActionResult<ListResult>> List([FromBody] ListRequest request)
  15. {
  16. if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
  17. Types.SitePermissions.Contents) ||
  18. !await _authManager.HasContentPermissionsAsync(request.SiteId, request.ChannelId,
  19. Types.ContentPermissions.View,
  20. Types.ContentPermissions.Add,
  21. Types.ContentPermissions.Edit,
  22. Types.ContentPermissions.Delete,
  23. Types.ContentPermissions.Translate,
  24. Types.ContentPermissions.Arrange,
  25. Types.ContentPermissions.CheckLevel1,
  26. Types.ContentPermissions.CheckLevel2,
  27. Types.ContentPermissions.CheckLevel3,
  28. Types.ContentPermissions.CheckLevel4,
  29. Types.ContentPermissions.CheckLevel5))
  30. {
  31. return Unauthorized();
  32. }
  33. var site = await _siteRepository.GetAsync(request.SiteId);
  34. if (site == null) return NotFound();
  35. var channel = await _channelRepository.GetAsync(request.ChannelId);
  36. if (channel == null) return this.Error("无法确定内容对应的栏目");
  37. var columnsManager = new ColumnsManager(_databaseManager, _pathManager);
  38. var columns = await columnsManager.GetContentListColumnsAsync(site, channel, ColumnsManager.PageType.Contents);
  39. var pageContents = new List<Content>();
  40. List<ContentSummary> summaries;
  41. if (!string.IsNullOrEmpty(request.SearchType) &&
  42. !string.IsNullOrEmpty(request.SearchText) ||
  43. request.IsAdvanced)
  44. {
  45. 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);
  46. }
  47. else
  48. {
  49. summaries = await _contentRepository.GetSummariesAsync(site, channel, channel.IsAllContents);
  50. }
  51. var total = summaries.Count;
  52. var channelPlugins = _pluginManager.GetPlugins(request.SiteId, request.ChannelId);
  53. var contentMenus = new List<Menu>();
  54. foreach (var plugin in channelPlugins)
  55. {
  56. var pluginMenus = plugin.GetMenus()
  57. .Where(x => ListUtils.ContainsIgnoreCase(x.Type, Types.Resources.Content)).ToList();
  58. if (pluginMenus.Count == 0) continue;
  59. contentMenus.AddRange(pluginMenus);
  60. }
  61. if (total > 0)
  62. {
  63. var offset = site.PageSize * (request.Page - 1);
  64. var pageSummaries = summaries.Skip(offset).Take(site.PageSize).ToList();
  65. var sequence = offset + 1;
  66. foreach (var summary in pageSummaries)
  67. {
  68. var content = await _contentRepository.GetAsync(site, summary.ChannelId, summary.Id);
  69. if (content == null) continue;
  70. var pageContent =
  71. await columnsManager.CalculateContentListAsync(sequence++, site, request.ChannelId, content, columns);
  72. pageContents.Add(pageContent);
  73. }
  74. }
  75. var (isChecked, checkedLevel) = await CheckManager.GetUserCheckLevelAsync(_authManager, site, request.ChannelId);
  76. var checkedLevels = ElementUtils.GetCheckBoxes(CheckManager.GetCheckedLevels(site, isChecked, checkedLevel, true));
  77. var permissions = new Permissions
  78. {
  79. IsAdd = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Add),
  80. IsDelete = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Delete),
  81. IsEdit = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Edit),
  82. IsArrange = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Arrange),
  83. IsTranslate = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Translate),
  84. IsCheck = await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.CheckLevel1),
  85. IsCreate = await _authManager.HasSitePermissionsAsync(site.Id, Types.SitePermissions.CreateContents) || await _authManager.HasContentPermissionsAsync(site.Id, channel.Id, Types.ContentPermissions.Create),
  86. IsChannelEdit = await _authManager.HasChannelPermissionsAsync(site.Id, channel.Id, Types.ChannelPermissions.Edit)
  87. };
  88. return new ListResult
  89. {
  90. PageContents = pageContents,
  91. Total = total,
  92. PageSize = site.PageSize,
  93. Columns = columns,
  94. IsAllContents = channel.IsAllContents,
  95. CheckedLevels = checkedLevels,
  96. Permissions = permissions,
  97. Menus = contentMenus
  98. };
  99. }
  100. }
  101. }