SettingScriptManager.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using Abp.Configuration;
  4. using Abp.Dependency;
  5. using Abp.Runtime.Session;
  6. using Abp.Web.Http;
  7. namespace Abp.Web.Settings
  8. {
  9. /// <summary>
  10. /// This class is used to build setting script.
  11. /// </summary>
  12. public class SettingScriptManager : ISettingScriptManager, ISingletonDependency
  13. {
  14. private readonly ISettingDefinitionManager _settingDefinitionManager;
  15. private readonly ISettingManager _settingManager;
  16. private readonly IAbpSession _abpSession;
  17. private readonly IIocResolver _iocResolver;
  18. public SettingScriptManager(
  19. ISettingDefinitionManager settingDefinitionManager,
  20. ISettingManager settingManager,
  21. IAbpSession abpSession,
  22. IIocResolver iocResolver)
  23. {
  24. _settingDefinitionManager = settingDefinitionManager;
  25. _settingManager = settingManager;
  26. _abpSession = abpSession;
  27. _iocResolver = iocResolver;
  28. }
  29. public async Task<string> GetScriptAsync()
  30. {
  31. var script = new StringBuilder();
  32. script.AppendLine("(function(){");
  33. script.AppendLine(" abp.setting = abp.setting || {};");
  34. script.AppendLine(" abp.setting.values = {");
  35. var settingDefinitions = _settingDefinitionManager
  36. .GetAllSettingDefinitions();
  37. var added = 0;
  38. using (var scope = _iocResolver.CreateScope())
  39. {
  40. foreach (var settingDefinition in settingDefinitions)
  41. {
  42. if (!await settingDefinition.ClientVisibilityProvider.CheckVisible(scope))
  43. {
  44. continue;
  45. }
  46. if (added > 0)
  47. {
  48. script.AppendLine(",");
  49. }
  50. else
  51. {
  52. script.AppendLine();
  53. }
  54. var settingValue = await _settingManager.GetSettingValueAsync(settingDefinition.Name);
  55. script.Append(" '" +
  56. settingDefinition.Name.Replace("'", @"\'") + "': " +
  57. (settingValue == null ? "null" : "'" + HttpEncode.JavaScriptStringEncode(settingValue) + "'"));
  58. ++added;
  59. }
  60. }
  61. script.AppendLine();
  62. script.AppendLine(" };");
  63. script.AppendLine();
  64. script.Append("})();");
  65. return script.ToString();
  66. }
  67. }
  68. }