public async Task <IActionResult> Configure(ConfigurationModel model) { if (!ModelState.IsValid) { return(await Configure()); } //load settings for a chosen store scope var storeId = _storeContext.ActiveStoreScopeConfiguration; var mailChimpSettings = _settingService.LoadSetting <MailChimpSettings>(storeId); //update stores if the list was changed if (!string.IsNullOrEmpty(model.ListId) && !model.ListId.Equals(Guid.Empty.ToString()) && !model.ListId.Equals(mailChimpSettings.ListId)) { (storeId > 0 ? new[] { storeId } : _storeService.GetAllStores().Select(store => store.Id)).ToList() .ForEach(id => _synchronizationRecordService.CreateOrUpdateRecord(EntityType.Store, id, OperationType.Update)); } //prepare webhook if (!string.IsNullOrEmpty(mailChimpSettings.ApiKey)) { var listId = !string.IsNullOrEmpty(model.ListId) && !model.ListId.Equals(Guid.Empty.ToString()) ? model.ListId : string.Empty; var webhookPrepared = await _mailChimpManager.PrepareWebhook(listId); //display warning if webhook is not prepared if (!webhookPrepared && !string.IsNullOrEmpty(listId)) { _notificationService.WarningNotification(_localizationService.GetResource("Plugins.Misc.MailChimp.Webhook.Warning")); } } //save settings mailChimpSettings.ApiKey = model.ApiKey; mailChimpSettings.PassEcommerceData = model.PassEcommerceData; mailChimpSettings.ListId = model.ListId; _settingService.SaveSetting(mailChimpSettings, x => x.ApiKey, clearCache: false); _settingService.SaveSetting(mailChimpSettings, x => x.PassEcommerceData, clearCache: false); _settingService.SaveSettingOverridablePerStore(mailChimpSettings, x => x.ListId, model.ListId_OverrideForStore, storeId, false); _settingService.ClearCache(); //create or update synchronization task var task = _scheduleTaskService.GetTaskByType(MailChimpDefaults.SynchronizationTask); if (task == null) { task = new ScheduleTask { Type = MailChimpDefaults.SynchronizationTask, Name = MailChimpDefaults.SynchronizationTaskName, Seconds = MailChimpDefaults.DefaultSynchronizationPeriod * 60 * 60 }; _scheduleTaskService.InsertTask(task); } var synchronizationPeriodInSeconds = model.SynchronizationPeriod * 60 * 60; var synchronizationEnabled = model.AutoSynchronization; if (task.Enabled != synchronizationEnabled || task.Seconds != synchronizationPeriodInSeconds) { //task parameters was changed task.Enabled = synchronizationEnabled; task.Seconds = synchronizationPeriodInSeconds; _scheduleTaskService.UpdateTask(task); _notificationService.WarningNotification(_localizationService.GetResource("Plugins.Misc.MailChimp.Fields.AutoSynchronization.Restart")); } _notificationService.SuccessNotification(_localizationService.GetResource("Admin.Plugins.Saved")); return(await Configure()); }