FeaturesScriptManager.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Abp.Application.Features;
  6. using Abp.Dependency;
  7. using Abp.Runtime.Session;
  8. namespace Abp.Web.Features
  9. {
  10. public class FeaturesScriptManager : IFeaturesScriptManager, ITransientDependency
  11. {
  12. public IAbpSession AbpSession { get; set; }
  13. private readonly IFeatureManager _featureManager;
  14. private readonly IFeatureChecker _featureChecker;
  15. public FeaturesScriptManager(IFeatureManager featureManager, IFeatureChecker featureChecker)
  16. {
  17. _featureManager = featureManager;
  18. _featureChecker = featureChecker;
  19. AbpSession = NullAbpSession.Instance;
  20. }
  21. public async Task<string> GetScriptAsync()
  22. {
  23. var allFeatures = _featureManager.GetAll().ToList();
  24. var currentValues = new Dictionary<string, string>();
  25. if (AbpSession.TenantId.HasValue)
  26. {
  27. var currentTenantId = AbpSession.GetTenantId();
  28. foreach (var feature in allFeatures)
  29. {
  30. currentValues[feature.Name] = await _featureChecker.GetValueAsync(currentTenantId, feature.Name);
  31. }
  32. }
  33. else
  34. {
  35. foreach (var feature in allFeatures)
  36. {
  37. currentValues[feature.Name] = feature.DefaultValue;
  38. }
  39. }
  40. var script = new StringBuilder();
  41. script.AppendLine("(function() {");
  42. script.AppendLine();
  43. script.AppendLine(" abp.features = abp.features || {};");
  44. script.AppendLine();
  45. script.AppendLine(" abp.features.allFeatures = {");
  46. for (var i = 0; i < allFeatures.Count; i++)
  47. {
  48. var feature = allFeatures[i];
  49. script.AppendLine(" '" + feature.Name.Replace("'", @"\'") + "': {");
  50. script.AppendLine(" value: '" + currentValues[feature.Name].Replace(@"\", @"\\").Replace("'", @"\'") + "'");
  51. script.Append(" }");
  52. if (i < allFeatures.Count - 1)
  53. {
  54. script.AppendLine(",");
  55. }
  56. else
  57. {
  58. script.AppendLine();
  59. }
  60. }
  61. script.AppendLine(" };");
  62. script.AppendLine();
  63. script.Append("})();");
  64. return script.ToString();
  65. }
  66. }
  67. }