Try your search with a different keyword or use * as a wildcard.
using Nop.Core;
using Nop.Core.Domain.Cms;
using Nop.Core.Domain.ScheduleTasks;
using Nop.Plugin.Misc.Brevo.Components;
using Nop.Services.Cms;
using Nop.Services.Common;
using Nop.Services.Configuration;
using Nop.Services.Localization;
using Nop.Services.Messages;
using Nop.Services.Plugins;
using Nop.Services.ScheduleTasks;
using Nop.Services.Stores;
using Nop.Web.Framework.Infrastructure;
namespace Nop.Plugin.Misc.Brevo;
///
/// Represents the Brevo plugin
///
public class BrevoPlugin : BasePlugin, IMiscPlugin, IWidgetPlugin
{
#region Fields
protected readonly IEmailAccountService _emailAccountService;
protected readonly IGenericAttributeService _genericAttributeService;
protected readonly ILocalizationService _localizationService;
protected readonly IMessageTemplateService _messageTemplateService;
protected readonly IScheduleTaskService _scheduleTaskService;
protected readonly ISettingService _settingService;
protected readonly IStoreService _storeService;
protected readonly IWebHelper _webHelper;
protected readonly WidgetSettings _widgetSettings;
#endregion
#region Ctor
public BrevoPlugin(IEmailAccountService emailAccountService,
IGenericAttributeService genericAttributeService,
ILocalizationService localizationService,
IMessageTemplateService messageTemplateService,
IScheduleTaskService scheduleTaskService,
ISettingService settingService,
IStoreService storeService,
IWebHelper webHelper,
WidgetSettings widgetSettings)
{
_emailAccountService = emailAccountService;
_genericAttributeService = genericAttributeService;
_localizationService = localizationService;
_messageTemplateService = messageTemplateService;
_scheduleTaskService = scheduleTaskService;
_settingService = settingService;
_storeService = storeService;
_webHelper = webHelper;
_widgetSettings = widgetSettings;
}
#endregion
#region Methods
///
/// Gets widget zones where this widget should be rendered
///
///
/// A task that represents the asynchronous operation
/// The task result contains the widget zones
///
public Task> GetWidgetZonesAsync()
{
return Task.FromResult>(new List { PublicWidgetZones.HeadHtmlTag });
}
///
/// Gets a type of a view component for displaying widget
///
/// Name of the widget zone
/// View component type
public Type GetWidgetViewComponent(string widgetZone)
{
return typeof(WidgetsBrevoViewComponent);
}
///
/// Gets a configuration page URL
///
public override string GetConfigurationPageUrl()
{
return $"{_webHelper.GetStoreLocation()}Admin/Brevo/Configure";
}
///
/// Install the plugin
///
/// A task that represents the asynchronous operation
public override async Task InstallAsync()
{
//settings
await _settingService.SaveSettingAsync(new BrevoSettings
{
//prepopulate a tracking script
TrackingScript = $@"
"
});
if (!_widgetSettings.ActiveWidgetSystemNames.Contains(BrevoDefaults.SystemName))
{
_widgetSettings.ActiveWidgetSystemNames.Add(BrevoDefaults.SystemName);
await _settingService.SaveSettingAsync(_widgetSettings);
}
//install synchronization task
if (await _scheduleTaskService.GetTaskByTypeAsync(BrevoDefaults.SynchronizationTask) == null)
{
await _scheduleTaskService.InsertTaskAsync(new ScheduleTask
{
Enabled = true,
LastEnabledUtc = DateTime.UtcNow,
Seconds = BrevoDefaults.DefaultSynchronizationPeriod * 60 * 60,
Name = BrevoDefaults.SynchronizationTaskName,
Type = BrevoDefaults.SynchronizationTask,
});
}
//locales
await _localizationService.AddOrUpdateLocaleResourceAsync(new Dictionary
{
["Plugins.Misc.Brevo.AccountInfo"] = "Account info",
["Plugins.Misc.Brevo.AccountInfo.Hint"] = "Display account information.",
["Plugins.Misc.Brevo.ActivateSMTP"] = "On your Brevo account, the SMTP has not been enabled yet. To request its activation, simply send an email to our support team at contact@brevo.com and mention that you will be using the SMTP with the nopCommerce plugin.",
["Plugins.Misc.Brevo.AddNewSMSNotification"] = "Add new SMS notification",
["Plugins.Misc.Brevo.BillingAddressPhone"] = "Billing address phone number",
["Plugins.Misc.Brevo.CustomerPhone"] = "Customer phone number",
["Plugins.Misc.Brevo.EditTemplate"] = "Edit template",
["Plugins.Misc.Brevo.Fields.AllowedTokens"] = "Allowed message variables",
["Plugins.Misc.Brevo.Fields.AllowedTokens.Hint"] = "This is a list of the message variables you can use in your SMS.",
["Plugins.Misc.Brevo.Fields.ApiKey"] = "API v3 key",
["Plugins.Misc.Brevo.Fields.ApiKey.Hint"] = "Paste your Brevo account API v3 key.",
["Plugins.Misc.Brevo.Fields.CampaignList"] = "List",
["Plugins.Misc.Brevo.Fields.CampaignList.Hint"] = "Choose list of contacts to send SMS campaign.",
["Plugins.Misc.Brevo.Fields.CampaignSenderName"] = "Send SMS campaign from",
["Plugins.Misc.Brevo.Fields.CampaignSenderName.Hint"] = "Input the name of the sender. The number of characters is limited to 11 (alphanumeric format).",
["Plugins.Misc.Brevo.Fields.CampaignText"] = "Text",
["Plugins.Misc.Brevo.Fields.CampaignText.Hint"] = "Specify SMS campaign content. The number of characters is limited to 160 for one message.",
["Plugins.Misc.Brevo.Fields.List"] = "List",
["Plugins.Misc.Brevo.Fields.List.Hint"] = "Select the Brevo list where your nopCommerce newsletter subscribers will be added.",
["Plugins.Misc.Brevo.Fields.MaKey"] = "Tracker ID",
["Plugins.Misc.Brevo.Fields.MaKey.Hint"] = "Input your Tracker ID.",
["Plugins.Misc.Brevo.Fields.Sender"] = "Send emails from",
["Plugins.Misc.Brevo.Fields.Sender.Hint"] = "Choose sender of your transactional emails.",
["Plugins.Misc.Brevo.Fields.SmsSenderName"] = "Send SMS from",
["Plugins.Misc.Brevo.Fields.SmsSenderName.Hint"] = "Input the name of the sender. The number of characters is limited to 11 (alphanumeric format).",
["Plugins.Misc.Brevo.Fields.SmtpKey"] = "SMTP key",
["Plugins.Misc.Brevo.Fields.SmtpKey.Hint"] = "Specify SMTP key (password).",
["Plugins.Misc.Brevo.Fields.StoreOwnerPhoneNumber"] = "Store owner phone number",
["Plugins.Misc.Brevo.Fields.StoreOwnerPhoneNumber.Hint"] = "Input store owner phone number for SMS notifications.",
["Plugins.Misc.Brevo.Fields.TrackingScript"] = "Tracking script",
["Plugins.Misc.Brevo.Fields.TrackingScript.Hint"] = $"Paste the tracking script generated by Brevo here. {BrevoDefaults.TrackingScriptId} and {BrevoDefaults.TrackingScriptCustomerEmail} will be dynamically replaced.",
["Plugins.Misc.Brevo.Fields.UseMarketingAutomation"] = "Use Marketing Automation",
["Plugins.Misc.Brevo.Fields.UseMarketingAutomation.Hint"] = "Check for enable Brevo Automation.",
["Plugins.Misc.Brevo.Fields.UseSmsNotifications"] = "Use SMS notifications",
["Plugins.Misc.Brevo.Fields.UseSmsNotifications.Hint"] = "Check for sending transactional SMS.",
["Plugins.Misc.Brevo.Fields.UseSmtp"] = "Use Brevo SMTP",
["Plugins.Misc.Brevo.Fields.UseSmtp.Hint"] = "Check for using Brevo SMTP for sending transactional emails.",
["Plugins.Misc.Brevo.General"] = "General",
["Plugins.Misc.Brevo.ImportProcess"] = "Your import is in process",
["Plugins.Misc.Brevo.ManualSync"] = "Manual synchronization",
["Plugins.Misc.Brevo.SyncNow"] = "Sync now",
["Plugins.Misc.Brevo.MarketingAutomation"] = "Marketing Automation",
["Plugins.Misc.Brevo.MyPhone"] = "Store owner phone number",
["Plugins.Misc.Brevo.PhoneType"] = "Type of phone number",
["Plugins.Misc.Brevo.PhoneType.Hint"] = "Specify the type of phone number to send SMS.",
["Plugins.Misc.Brevo.SMS"] = "SMS",
["Plugins.Misc.Brevo.SMS.Campaigns"] = "SMS campaigns",
["Plugins.Misc.Brevo.SMS.Campaigns.Sent"] = "Campaign successfully sent",
["Plugins.Misc.Brevo.SMS.Campaigns.Submit"] = "Send campaign",
["Plugins.Misc.Brevo.SMSText"] = "Text",
["Plugins.Misc.Brevo.SMSText.Hint"] = "Enter SMS text to send.",
["Plugins.Misc.Brevo.Synchronization"] = "Contacts",
["Plugins.Misc.Brevo.Transactional"] = "Transactional emails",
["Plugins.Misc.Brevo.UseBrevoTemplate"] = "Brevo template"
});
await base.InstallAsync();
}
///
/// Uninstall the plugin
///
/// A task that represents the asynchronous operation
public override async Task UninstallAsync()
{
//smtp accounts
foreach (var store in await _storeService.GetAllStoresAsync())
{
var key = $"{nameof(BrevoSettings)}.{nameof(BrevoSettings.EmailAccountId)}";
var emailAccountId = await _settingService.GetSettingByKeyAsync(key, storeId: store.Id, loadSharedValueIfNotFound: true);
var emailAccount = await _emailAccountService.GetEmailAccountByIdAsync(emailAccountId);
if (emailAccount != null)
await _emailAccountService.DeleteEmailAccountAsync(emailAccount);
}
//settings
if (_widgetSettings.ActiveWidgetSystemNames.Contains(BrevoDefaults.SystemName))
{
_widgetSettings.ActiveWidgetSystemNames.Remove(BrevoDefaults.SystemName);
await _settingService.SaveSettingAsync(_widgetSettings);
}
await _settingService.DeleteSettingAsync();
//generic attributes
foreach (var store in await _storeService.GetAllStoresAsync())
{
var messageTemplates = await _messageTemplateService.GetAllMessageTemplatesAsync(store.Id);
foreach (var messageTemplate in messageTemplates)
{
await _genericAttributeService.SaveAttributeAsync(messageTemplate, BrevoDefaults.TemplateIdAttribute, null);
}
}
//schedule task
var task = await _scheduleTaskService.GetTaskByTypeAsync(BrevoDefaults.SynchronizationTask);
if (task != null)
await _scheduleTaskService.DeleteTaskAsync(task);
//locales
await _localizationService.DeleteLocaleResourcesAsync("Plugins.Misc.Brevo");
await base.UninstallAsync();
}
#endregion
///
/// Gets a value indicating whether to hide this plugin on the widget list page in the admin area
///
public bool HideInWidgetList => true;
}