using System.Text; using System.Threading.Tasks; using Abp.Configuration; using Abp.Dependency; using Abp.Runtime.Session; using Abp.Web.Http; namespace Abp.Web.Settings { /// /// This class is used to build setting script. /// public class SettingScriptManager : ISettingScriptManager, ISingletonDependency { private readonly ISettingDefinitionManager _settingDefinitionManager; private readonly ISettingManager _settingManager; private readonly IAbpSession _abpSession; private readonly IIocResolver _iocResolver; public SettingScriptManager( ISettingDefinitionManager settingDefinitionManager, ISettingManager settingManager, IAbpSession abpSession, IIocResolver iocResolver) { _settingDefinitionManager = settingDefinitionManager; _settingManager = settingManager; _abpSession = abpSession; _iocResolver = iocResolver; } public async Task GetScriptAsync() { var script = new StringBuilder(); script.AppendLine("(function(){"); script.AppendLine(" abp.setting = abp.setting || {};"); script.AppendLine(" abp.setting.values = {"); var settingDefinitions = _settingDefinitionManager .GetAllSettingDefinitions(); var added = 0; using (var scope = _iocResolver.CreateScope()) { foreach (var settingDefinition in settingDefinitions) { if (!await settingDefinition.ClientVisibilityProvider.CheckVisible(scope)) { continue; } if (added > 0) { script.AppendLine(","); } else { script.AppendLine(); } var settingValue = await _settingManager.GetSettingValueAsync(settingDefinition.Name); script.Append(" '" + settingDefinition.Name.Replace("'", @"\'") + "': " + (settingValue == null ? "null" : "'" + HttpEncode.JavaScriptStringEncode(settingValue) + "'")); ++added; } } script.AppendLine(); script.AppendLine(" };"); script.AppendLine(); script.Append("})();"); return script.ToString(); } } }