using Microsoft.AspNetCore.Mvc; using Nop.Core; using Nop.Core.Domain.Cms; using Nop.Plugin.Widgets.AccessiBe.Models; using Nop.Services.Configuration; using Nop.Services.Localization; using Nop.Services.Messages; using Nop.Services.Security; using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions; using Nop.Web.Framework; using Nop.Web.Framework.Controllers; using Nop.Web.Framework.Mvc.Filters; namespace Nop.Plugin.Widgets.AccessiBe.Controllers; [Area(AreaNames.ADMIN)] [AuthorizeAdmin] [AutoValidateAntiforgeryToken] public class AccessiBeController : BasePluginController { #region Fields private readonly ILocalizationService _localizationService; private readonly INotificationService _notificationService; private readonly ISettingService _settingService; private readonly IStoreContext _storeContext; #endregion #region Ctor public AccessiBeController(ILocalizationService localizationService, INotificationService notificationService, ISettingService settingService, IStoreContext storeContext) { _localizationService = localizationService; _notificationService = notificationService; _settingService = settingService; _storeContext = storeContext; } #endregion #region Methods [CheckPermission(StandardPermission.Configuration.MANAGE_WIDGETS)] public async Task Configure() { var storeId = await _storeContext.GetActiveStoreScopeConfigurationAsync(); var settings = await _settingService.LoadSettingAsync(storeId); var settingsMobile = await _settingService.LoadSettingAsync(storeId); var widgetSettings = await _settingService.LoadSettingAsync(storeId); var model = new ConfigurationModel { Enabled = widgetSettings.ActiveWidgetSystemNames.Contains(AccessiBeDefaults.SystemName), ActiveStoreScopeConfiguration = storeId, ScriptIsCustomized = !settings.Script?.Contains(AccessiBeDefaults.ConfigToken) ?? true, TriggerModel = settings.ToSettingsModel(), TriggerMobileModel = settingsMobile.ToSettingsModel() }; if (storeId > 0) { model.Enabled_OverrideForStore = await _settingService.SettingExistsAsync(widgetSettings, setting => setting.ActiveWidgetSystemNames, storeId); #region Trigger settings model.TriggerModel.LeadColor_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.LeadColor, storeId); model.TriggerModel.StatementLink_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.StatementLink, storeId); model.TriggerModel.FooterHtml_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.FooterHtml, storeId); model.TriggerModel.ShowMobile_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.HideMobile, storeId); model.TriggerModel.HideTrigger_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.HideTrigger, storeId); model.TriggerModel.Language_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.Language, storeId); model.TriggerModel.Position_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.Position, storeId); model.TriggerModel.TriggerColor_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerColor, storeId); model.TriggerModel.TriggerPositionX_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerPositionX, storeId); model.TriggerModel.TriggerPositionY_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerPositionY, storeId); model.TriggerModel.TriggerRadius_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerRadius, storeId); model.TriggerModel.TriggerIcon_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerIcon, storeId); model.TriggerModel.TriggerSize_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerSize, storeId); model.TriggerModel.TriggerOffsetX_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerOffsetX, storeId); model.TriggerModel.TriggerOffsetY_OverrideForStore = await _settingService.SettingExistsAsync(settings, setting => setting.TriggerOffsetY, storeId); #endregion #region Mobile trigger settings model.TriggerModel.TriggerSize_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerSize, storeId); model.TriggerModel.TriggerPositionX_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerPositionX, storeId); model.TriggerModel.TriggerPositionY_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerPositionY, storeId); model.TriggerModel.TriggerOffsetX_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerOffsetX, storeId); model.TriggerModel.TriggerOffsetY_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerOffsetY, storeId); model.TriggerModel.TriggerRadius_OverrideForStore = await _settingService.SettingExistsAsync(settingsMobile, setting => setting.TriggerRadius, storeId); #endregion } if (model.ScriptIsCustomized) _notificationService.WarningNotification(await _localizationService.GetResourceAsync("Plugins.Widgets.AccessiBe.ScriptIsCustomized.Warning")); return View("~/Plugins/Widgets.AccessiBe/Views/Configure.cshtml", model); } [HttpPost] [CheckPermission(StandardPermission.Configuration.MANAGE_WIDGETS)] public async Task Configure(ConfigurationModel model) { if (!ModelState.IsValid) return await Configure(); var storeScope = await _storeContext.GetActiveStoreScopeConfigurationAsync(); var widgetSettings = await _settingService.LoadSettingAsync(storeScope); var triggerSettings = await _settingService.LoadSettingAsync(storeScope); var triggerMobileSettings = await _settingService.LoadSettingAsync(storeScope); #region Trigger settings triggerSettings = model.TriggerModel.ToSettings(triggerSettings); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.LeadColor, model.TriggerModel.LeadColor_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.StatementLink, model.TriggerModel.StatementLink_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.FooterHtml, model.TriggerModel.FooterHtml_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.Language, model.TriggerModel.Language_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.Position, model.TriggerModel.Position_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerColor, model.TriggerModel.TriggerColor_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerPositionX, model.TriggerModel.TriggerPositionX_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerPositionY, model.TriggerModel.TriggerPositionY_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerSize, model.TriggerModel.TriggerSize_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerRadius, model.TriggerModel.TriggerRadius_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.HideTrigger, model.TriggerModel.HideTrigger_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerOffsetX, model.TriggerModel.TriggerOffsetX_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerOffsetY, model.TriggerModel.TriggerOffsetY_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.TriggerIcon, model.TriggerModel.TriggerIcon_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerSettings, x => x.HideMobile, model.TriggerModel.ShowMobile_OverrideForStore, storeScope, false); #endregion #region Mobile trigger settings triggerMobileSettings = model.TriggerMobileModel.ToSettings(triggerMobileSettings); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerPositionX, model.TriggerMobileModel.TriggerPositionX_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerPositionY, model.TriggerMobileModel.TriggerPositionY_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerSize, model.TriggerMobileModel.TriggerSize_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerRadius, model.TriggerMobileModel.TriggerRadius_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerOffsetX, model.TriggerMobileModel.TriggerOffsetX_OverrideForStore, storeScope, false); await _settingService.SaveSettingOverridablePerStoreAsync(triggerMobileSettings, x => x.TriggerOffsetY, model.TriggerMobileModel.TriggerOffsetY_OverrideForStore, storeScope, false); #endregion if (model.Enabled && !widgetSettings.ActiveWidgetSystemNames.Contains(AccessiBeDefaults.SystemName)) widgetSettings.ActiveWidgetSystemNames.Add(AccessiBeDefaults.SystemName); if (!model.Enabled && widgetSettings.ActiveWidgetSystemNames.Contains(AccessiBeDefaults.SystemName)) widgetSettings.ActiveWidgetSystemNames.Remove(AccessiBeDefaults.SystemName); await _settingService.SaveSettingOverridablePerStoreAsync(widgetSettings, setting => setting.ActiveWidgetSystemNames, model.Enabled_OverrideForStore, storeScope, false); await _settingService.ClearCacheAsync(); _notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.Plugins.Saved")); return await Configure(); } #endregion }