Try your search with a different keyword or use * as a wildcard.
using System.ComponentModel;
using System.Globalization;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using Nop.Core;
using Nop.Core.Configuration;
using Nop.Core.Domain;
using Nop.Core.Domain.ArtificialIntelligence;
using Nop.Core.Domain.Blogs;
using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Common;
using Nop.Core.Domain.Configuration;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Directory;
using Nop.Core.Domain.FilterLevels;
using Nop.Core.Domain.Forums;
using Nop.Core.Domain.Gdpr;
using Nop.Core.Domain.Localization;
using Nop.Core.Domain.Logging;
using Nop.Core.Domain.Media;
using Nop.Core.Domain.Menus;
using Nop.Core.Domain.Messages;
using Nop.Core.Domain.News;
using Nop.Core.Domain.Orders;
using Nop.Core.Domain.Payments;
using Nop.Core.Domain.ScheduleTasks;
using Nop.Core.Domain.Security;
using Nop.Core.Domain.Seo;
using Nop.Core.Domain.Shipping;
using Nop.Core.Domain.Stores;
using Nop.Core.Domain.Tax;
using Nop.Core.Domain.Topics;
using Nop.Core.Domain.Translation;
using Nop.Core.Domain.Vendors;
using Nop.Core.Http;
using Nop.Core.Security;
using Nop.Services.ArtificialIntelligence;
using Nop.Services.Catalog;
using Nop.Services.Common;
using Nop.Services.Customers;
using Nop.Services.Helpers;
using Nop.Services.Media;
using Nop.Services.Messages;
using Nop.Services.Seo;
namespace Nop.Services.Installation;
public partial class InstallationService
{
#region Utilities
///
/// Installs a default stores
///
///
/// A task that represents the asynchronous operation
///
protected virtual async Task InstallStoresAsync()
{
var storeUrl = _webHelper.GetStoreLocation();
var stores = new List
{
new() {
Name = "Your store name",
DefaultTitle = "Your store",
DefaultMetaKeywords = string.Empty,
DefaultMetaDescription = string.Empty,
HomepageTitle = "Home page title",
HomepageDescription = "Home page description",
Url = storeUrl,
SslEnabled = _webHelper.IsCurrentConnectionSecured(),
Hosts = "yourstore.com,www.yourstore.com",
DisplayOrder = 1,
//should we set some default company info?
CompanyName = "Your company name",
CompanyAddress = "your company country, state, zip, street, etc",
CompanyPhoneNumber = "(123) 456-78901",
CompanyVat = null
}
};
await _dataProvider.BulkInsertEntitiesAsync(stores);
}
///
/// Installs a default measures
///
///
/// A task that represents the asynchronous operation
///
protected virtual async Task InstallMeasuresAsync()
{
var isMetric = _installationSettings.RegionInfo?.IsMetric ?? false;
var measureDimensions = new List
{
new() {
Name = "inch(es)",
SystemKeyword = "inches",
Ratio = isMetric ? 39.3701M : 1M,
DisplayOrder = isMetric ? 1 : 0
},
new() {
Name = "feet",
SystemKeyword = "feet",
Ratio = isMetric ? 3.28084M : 0.08333333M,
DisplayOrder = isMetric ? 1 : 0
},
new() {
Name = "meter(s)",
SystemKeyword = "meters",
Ratio = isMetric ? 1M : 0.0254M,
DisplayOrder = isMetric ? 0 : 1
},
new() {
Name = "millimetre(s)",
SystemKeyword = "millimetres",
Ratio = isMetric ? 1000M : 25.4M,
DisplayOrder = isMetric ? 0 : 1
}
};
await _dataProvider.BulkInsertEntitiesAsync(measureDimensions);
var measureWeights = new List
{
new() {
Name = "ounce(s)",
SystemKeyword = "ounce",
Ratio = isMetric ? 35.274M : 16M,
DisplayOrder = isMetric ? 1 : 0
},
new() {
Name = "lb(s)",
SystemKeyword = "lb",
Ratio = isMetric ? 2.20462M : 1M,
DisplayOrder = isMetric ? 1 : 0
},
new() {
Name = "kg(s)",
SystemKeyword = "kg",
Ratio = isMetric ? 1M : 0.45359237M,
DisplayOrder = isMetric ? 0 : 1
},
new() {
Name = "gram(s)",
SystemKeyword = "grams",
Ratio = isMetric ? 1000M : 453.59237M,
DisplayOrder = isMetric ? 0 : 1
}
};
await _dataProvider.BulkInsertEntitiesAsync(measureWeights);
}
///
/// Installs a default tax categories
///
///
/// A task that represents the asynchronous operation
///
protected virtual async Task InstallTaxCategoriesAsync()
{
var taxCategories = new List
{
new() {Name = "Books", DisplayOrder = 1},
new() {Name = "Electronics & Software", DisplayOrder = 5},
new() {Name = "Downloadable Products", DisplayOrder = 10},
new() {Name = "Jewelry", DisplayOrder = 15},
new() {Name = "Apparel", DisplayOrder = 20}
};
await _dataProvider.BulkInsertEntitiesAsync(taxCategories);
}
///
/// Import language resources from XML file
///
/// Language
/// Stream reader of XML file
/// A value indicating whether to update existing resources
/// A task that represents the asynchronous operation
protected virtual async Task ImportResourcesFromXmlAsync(Language language, StreamReader xmlStreamReader, bool updateExistingResources = true)
{
HashSet<(string name, string value)> loadLocaleResourcesFromStream()
{
var result = new HashSet<(string name, string value)>();
using var xmlReader = XmlReader.Create(xmlStreamReader);
while (xmlReader.ReadToFollowing("Language"))
{
if (xmlReader.NodeType != XmlNodeType.Element)
continue;
using var languageReader = xmlReader.ReadSubtree();
while (languageReader.ReadToFollowing("LocaleResource"))
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.GetAttribute("Name") is { } name)
{
using var lrReader = languageReader.ReadSubtree();
if (lrReader.ReadToFollowing("Value") && lrReader.NodeType == XmlNodeType.Element)
result.Add((name.ToLowerInvariant(), lrReader.ReadString()));
}
break;
}
return result;
}
if (xmlStreamReader.EndOfStream)
return;
var lsNamesList = new Dictionary();
foreach (var localeStringResource in Table().Where(lsr => lsr.LanguageId == language.Id)
.OrderBy(lsr => lsr.Id))
lsNamesList[localeStringResource.ResourceName.ToLowerInvariant()] = localeStringResource;
var lrsToUpdateList = new List();
var lrsToInsertList = new Dictionary();
foreach (var (name, value) in loadLocaleResourcesFromStream())
if (lsNamesList.TryGetValue(name, out var localString))
{
if (!updateExistingResources)
continue;
localString.ResourceValue = value;
lrsToUpdateList.Add(localString);
}
else
lrsToInsertList[name] = new LocaleStringResource
{
LanguageId = language.Id,
ResourceName = name,
ResourceValue = value
};
await _dataProvider.UpdateEntitiesAsync(lrsToUpdateList);
await _dataProvider.BulkInsertEntitiesAsync(lrsToInsertList.Values);
}
///
/// Import states from TXT file
///
/// Stream
///
/// A task that represents the asynchronous operation
/// The task result contains the number of imported states
///
protected virtual async Task ImportStatesFromTxtAsync(Stream stream)
{
var count = 0;
using var reader = new StreamReader(stream);
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
if (string.IsNullOrWhiteSpace(line))
continue;
var tmp = line.Split(',');
if (tmp.Length != 5)
throw new NopException("Wrong file format");
//parse
var countryTwoLetterIsoCode = tmp[0].Trim();
var name = tmp[1].Trim();
var abbreviation = tmp[2].Trim();
var published = bool.Parse(tmp[3].Trim());
var displayOrder = int.Parse(tmp[4].Trim());
var country = await Table().Where(c => c.TwoLetterIsoCode == countryTwoLetterIsoCode).FirstOrDefaultAsync();
//country cannot be loaded. skip
if (country == null)
continue;
//import
var states = await Table()
.OrderBy(sp => sp.DisplayOrder)
.ThenBy(sp => sp.Name)
.Where(sp => sp.CountryId == country.Id)
.ToListAsync();
var state = states.FirstOrDefault(x => x.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase));
if (state != null)
{
state.Abbreviation = abbreviation;
state.Published = published;
state.DisplayOrder = displayOrder;
await _dataProvider.UpdateEntityAsync(state);
}
else
{
state = new StateProvince
{
CountryId = country.Id,
Name = name,
Abbreviation = abbreviation,
Published = published,
DisplayOrder = displayOrder
};
await _dataProvider.InsertEntityAsync(state);
}
count++;
}
return count;
}
///
/// Installs a default languages
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallLanguagesAsync()
{
var defaultCulture = new CultureInfo(NopCommonDefaults.DefaultLanguageCulture);
var re = new Regex(" \\(.*\\)", RegexOptions.Compiled);
var languageName = re.Replace(defaultCulture.NativeName, string.Empty);
languageName = languageName[0].ToString().ToUpper() + languageName[1..];
var defaultLanguage = new Language
{
Name = languageName,
LanguageCulture = defaultCulture.Name,
UniqueSeoCode = defaultCulture.TwoLetterISOLanguageName,
FlagImageFileName = $"{defaultCulture.Name.ToLowerInvariant()[^2..]}.png",
Rtl = defaultCulture.TextInfo.IsRightToLeft,
Published = true,
DisplayOrder = 1
};
await _dataProvider.InsertEntityAsync(defaultLanguage);
//Install locale resources for default culture
var directoryPath = _fileProvider.MapPath(NopInstallationDefaults.LocalizationResourcesPath);
var pattern = $"*.{NopInstallationDefaults.LocalizationResourcesFileExtension}";
foreach (var filePath in _fileProvider.EnumerateFiles(directoryPath, pattern))
{
using var streamReader = new StreamReader(filePath);
await ImportResourcesFromXmlAsync(defaultLanguage, streamReader);
}
var cultureInfo = _installationSettings.CultureInfo;
var regionInfo = _installationSettings.RegionInfo;
if (cultureInfo == null || regionInfo == null || cultureInfo.Name == NopCommonDefaults.DefaultLanguageCulture)
return;
languageName = re.Replace(cultureInfo.NativeName, string.Empty);
languageName = languageName[0].ToString().ToUpper() + languageName[1..];
var language = new Language
{
Name = languageName,
LanguageCulture = cultureInfo.Name,
UniqueSeoCode = cultureInfo.TwoLetterISOLanguageName,
FlagImageFileName = $"{regionInfo.TwoLetterISORegionName.ToLowerInvariant()}.png",
Rtl = cultureInfo.TextInfo.IsRightToLeft,
Published = true,
DisplayOrder = 2
};
await _dataProvider.InsertEntityAsync(language);
if (string.IsNullOrEmpty(_installationSettings.LanguagePackDownloadLink))
return;
//download and import language pack
try
{
var httpClient = _httpClientFactory.CreateClient(NopHttpDefaults.DefaultHttpClient);
await using var stream = await httpClient.GetStreamAsync(_installationSettings.LanguagePackDownloadLink);
using var streamReader = new StreamReader(stream);
await ImportResourcesFromXmlAsync(language, streamReader);
//set this language as default
language.DisplayOrder = 0;
await _dataProvider.UpdateEntityAsync(language);
//save progress for showing in admin panel (only for first start)
await _dataProvider.InsertEntityAsync(new GenericAttribute
{
EntityId = language.Id,
Key = NopCommonDefaults.LanguagePackProgressAttribute,
KeyGroup = nameof(Language),
Value = _installationSettings.LanguagePackProgress.ToString(),
StoreId = 0,
CreatedOrUpdatedDateUTC = DateTime.UtcNow
});
}
catch
{
// ignored
}
}
///
/// Installs a default currencies
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallCurrenciesAsync()
{
//set some currencies with a rate against the USD
var defaultCurrencies = new List { "USD", "AUD", "GBP", "CAD", "CNY", "EUR", "HKD", "JPY", "RUB", "SEK", "INR" };
var currencies = new List
{
new() {
Name = "US Dollar",
CurrencyCode = "USD",
Rate = 1,
DisplayLocale = "en-US",
CustomFormatting = string.Empty,
Published = true,
DisplayOrder = 1,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Australian Dollar",
CurrencyCode = "AUD",
Rate = 1.34M,
DisplayLocale = "en-AU",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 2,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "British Pound",
CurrencyCode = "GBP",
Rate = 0.75M,
DisplayLocale = "en-GB",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 3,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Canadian Dollar",
CurrencyCode = "CAD",
Rate = 1.32M,
DisplayLocale = "en-CA",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 4,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Chinese Yuan Renminbi",
CurrencyCode = "CNY",
Rate = 6.43M,
DisplayLocale = "zh-CN",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 5,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Euro",
CurrencyCode = "EUR",
Rate = 0.86M,
DisplayLocale = string.Empty,
CustomFormatting = $"{"\u20ac"}0.00", //euro symbol
Published = false,
DisplayOrder = 6,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Hong Kong Dollar",
CurrencyCode = "HKD",
Rate = 7.84M,
DisplayLocale = "zh-HK",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 7,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Japanese Yen",
CurrencyCode = "JPY",
Rate = 110.45M,
DisplayLocale = "ja-JP",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 8,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Russian Rouble",
CurrencyCode = "RUB",
Rate = 63.25M,
DisplayLocale = "ru-RU",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 9,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
},
new() {
Name = "Swedish Krona",
CurrencyCode = "SEK",
Rate = 8.80M,
DisplayLocale = "sv-SE",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 10,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding1
},
new() {
Name = "Indian Rupee",
CurrencyCode = "INR",
Rate = 68.03M,
DisplayLocale = "en-IN",
CustomFormatting = string.Empty,
Published = false,
DisplayOrder = 12,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
}
};
//set additional currency
var cultureInfo = _installationSettings.CultureInfo;
var regionInfo = _installationSettings.RegionInfo;
if (cultureInfo != null && regionInfo != null)
{
if (!defaultCurrencies.Contains(regionInfo.ISOCurrencySymbol))
{
currencies.Add(new Currency
{
Name = regionInfo.CurrencyEnglishName,
CurrencyCode = regionInfo.ISOCurrencySymbol,
Rate = 1,
DisplayLocale = cultureInfo.Name,
CustomFormatting = string.Empty,
Published = true,
DisplayOrder = 0,
CreatedOnUtc = DateTime.UtcNow,
UpdatedOnUtc = DateTime.UtcNow,
RoundingType = RoundingType.Rounding001
});
}
foreach (var currency in currencies.Where(currency => currency.CurrencyCode == regionInfo.ISOCurrencySymbol))
{
currency.Published = true;
currency.DisplayOrder = 0;
}
}
await _dataProvider.BulkInsertEntitiesAsync(currencies);
}
///
/// Installs a default countries and states
///
///
/// A task that represents the asynchronous operation
///
protected virtual async Task InstallCountriesAndStatesAsync()
{
var countries = ISO3166.GetCollection().Select(country => new Country
{
Name = country.Name,
AllowsBilling = true,
AllowsShipping = true,
TwoLetterIsoCode = country.Alpha2,
ThreeLetterIsoCode = country.Alpha3,
NumericIsoCode = country.NumericCode,
SubjectToVat = country.SubjectToVat,
DisplayOrder = country.NumericCode == 840 ? 1 : 100,
Published = true
}).ToList();
await _dataProvider.BulkInsertEntitiesAsync(countries.ToArray());
//import states for all countries
var directoryPath = _fileProvider.MapPath(NopInstallationDefaults.LocalizationResourcesPath);
var pattern = "*.txt";
foreach (var filePath in _fileProvider.EnumerateFiles(directoryPath, pattern))
{
await using var stream = new FileStream(filePath, FileMode.Open);
await ImportStatesFromTxtAsync(stream);
}
}
///
/// Installs a default shipping methods
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallShippingMethodsAsync()
{
var shippingMethods = new List
{
new() {
Name = "Ground",
Description =
"Shipping by land transport",
DisplayOrder = 1
},
new() {
Name = "Next Day Air",
Description = "The one day air shipping",
DisplayOrder = 2
},
new() {
Name = "2nd Day Air",
Description = "The two day air shipping",
DisplayOrder = 3
}
};
await _dataProvider.BulkInsertEntitiesAsync(shippingMethods);
}
///
/// Installs a default delivery dates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallDeliveryDatesAsync()
{
var deliveryDates = new List
{
new() {
Name = "1-2 days",
DisplayOrder = 1
},
new() {
Name = "3-5 days",
DisplayOrder = 5
},
new() {
Name = "1 week",
DisplayOrder = 10
}
};
await _dataProvider.BulkInsertEntitiesAsync(deliveryDates);
}
///
/// Installs a default product availability ranges
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallProductAvailabilityRangesAsync()
{
var productAvailabilityRanges = new List
{
new() {
Name = "2-4 days",
DisplayOrder = 1
},
new() {
Name = "7-10 days",
DisplayOrder = 2
},
new() {
Name = "2 weeks",
DisplayOrder = 3
}
};
await _dataProvider.BulkInsertEntitiesAsync(productAvailabilityRanges);
}
///
/// Installs a default email accounts
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallEmailAccountsAsync()
{
var emailAccounts = new List
{
new() {
Email = "test@mail.com",
DisplayName = "Store name",
Host = "smtp.mail.com",
Port = 25,
Username = "123",
Password = "123",
EnableSsl = false
}
};
await _dataProvider.BulkInsertEntitiesAsync(emailAccounts);
}
///
/// Installs a default message templates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallMessageTemplatesAsync()
{
var eaGeneral = await Table().FirstOrDefaultAsync() ?? throw new Exception("Default email account cannot be loaded");
var messageTemplates = new List
{
new() {
Name = MessageTemplateSystemNames.BLOG_COMMENT_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New blog comment.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new blog comment has been created for blog post \"%BlogComment.BlogPostTitle%\".{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.BACK_IN_STOCK_NOTIFICATION,
Subject = "%Store.Name%. Back in stock notification",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}Product %BackInStockSubscription.ProductName% is in stock.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_EMAIL_VALIDATION_MESSAGE,
Subject = "%Store.Name%. Email validation",
Body = $"%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}To activate your account click here.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Store.Name%{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_EMAIL_REVALIDATION_MESSAGE,
Subject = "%Store.Name%. Email validation",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%!{Environment.NewLine}
{Environment.NewLine}To validate your new email address click here.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.PRIVATE_MESSAGE_NOTIFICATION,
Subject = "%Store.Name%. You have received a new private message",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}You have received a new private message.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_PASSWORD_RECOVERY_MESSAGE,
Subject = "%Store.Name%. Password recovery",
Body = $"%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}To change your password click here.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Store.Name%{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_WELCOME_MESSAGE,
Subject = "Welcome to %Store.Name%",
Body = $"We welcome you to %Store.Name%.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}You can now take part in the various services we have to offer you. Some of these services include:{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Permanent Cart - Any products added to your online cart remain there until you remove them, or check them out.{Environment.NewLine}
{Environment.NewLine}Address Book - We can now deliver your products to another address other than yours! This is perfect to send birthday gifts direct to the birthday-person themselves.{Environment.NewLine}
{Environment.NewLine}Order History - View your history of purchases that you have made with us.{Environment.NewLine}
{Environment.NewLine}Products Reviews - Share your opinions on products with our other customers.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}For help with any of our online services, please email the store-owner: %Store.Email%.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Note: This email address was provided on our registration page. If you own the email and did not register on our site, please send an email to %Store.Email%.{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_FORUM_POST_MESSAGE,
Subject = "%Store.Name%. New Post Notification.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new post has been created in the topic \"%Forums.TopicName%\" at \"%Forums.ForumName%\" forum.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Click here for more info.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Post author: %Forums.PostAuthor%{Environment.NewLine}
{Environment.NewLine}Post body: %Forums.PostBody%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_FORUM_TOPIC_MESSAGE,
Subject = "%Store.Name%. New Topic Notification.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new topic \"%Forums.TopicName%\" has been created at \"%Forums.ForumName%\" forum.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Click here for more info.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.GIFT_CARD_NOTIFICATION,
Subject = "%GiftCard.SenderName% has sent you a gift card for %Store.Name%",
Body = $"{Environment.NewLine}You have received a gift card for %Store.Name%{Environment.NewLine}
{Environment.NewLine}{Environment.NewLine}Dear %GiftCard.RecipientName%,{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%GiftCard.SenderName% (%GiftCard.SenderEmail%) has sent you a %GiftCard.Amount% gift card for %Store.Name%{Environment.NewLine}
{Environment.NewLine}{Environment.NewLine}Your gift card code is %GiftCard.CouponCode%{Environment.NewLine}
{Environment.NewLine}{Environment.NewLine}%GiftCard.Message%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_REGISTERED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New customer registration",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new customer registered with your store. Below are the customer's details:{Environment.NewLine}
{Environment.NewLine}Full name: %Customer.FullName%{Environment.NewLine}
{Environment.NewLine}Email: %Customer.Email%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_RETURN_REQUEST_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New return request.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Customer.FullName% has just submitted a new return request. Details are below:{Environment.NewLine}
{Environment.NewLine}Request ID: %ReturnRequest.CustomNumber%{Environment.NewLine}
{Environment.NewLine}Product: %ReturnRequest.Product.Quantity% x Product: %ReturnRequest.Product.Name%{Environment.NewLine}
{Environment.NewLine}Reason for return: %ReturnRequest.Reason%{Environment.NewLine}
{Environment.NewLine}Requested action: %ReturnRequest.RequestedAction%{Environment.NewLine}
{Environment.NewLine}Customer comments:{Environment.NewLine}
{Environment.NewLine}%ReturnRequest.CustomerComment%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new()
{
Name = MessageTemplateSystemNames.DELETE_CUSTOMER_REQUEST_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New request to delete customer (GDPR)",
Body = $"%Customer.Email% has requested account deletion. You can consider this in the admin area.",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_RETURN_REQUEST_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. New return request.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%!{Environment.NewLine}
{Environment.NewLine}You have just submitted a new return request. Details are below:{Environment.NewLine}
{Environment.NewLine}Request ID: %ReturnRequest.CustomNumber%{Environment.NewLine}
{Environment.NewLine}Product: %ReturnRequest.Product.Quantity% x Product: %ReturnRequest.Product.Name%{Environment.NewLine}
{Environment.NewLine}Reason for return: %ReturnRequest.Reason%{Environment.NewLine}
{Environment.NewLine}Requested action: %ReturnRequest.RequestedAction%{Environment.NewLine}
{Environment.NewLine}Customer comments:{Environment.NewLine}
{Environment.NewLine}%ReturnRequest.CustomerComment%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEWS_COMMENT_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New news comment.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new news comment has been created for news \"%NewsComment.NewsTitle%\".{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEWSLETTER_SUBSCRIPTION_ACTIVATION_MESSAGE,
Subject = "%Store.Name%. Subscription activation message.",
Body = $"{Environment.NewLine}Click here to confirm your subscription to our list.{Environment.NewLine}
{Environment.NewLine}{Environment.NewLine}If you received this email by mistake, simply delete it.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEWSLETTER_SUBSCRIPTION_DEACTIVATION_MESSAGE,
Subject = "%Store.Name%. Subscription deactivation message.",
Body = $"{Environment.NewLine}Click here to unsubscribe from our newsletter.{Environment.NewLine}
{Environment.NewLine}{Environment.NewLine}If you received this email by mistake, simply delete it.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_VAT_SUBMITTED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New VAT number is submitted.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Customer.FullName% (%Customer.Email%) has just submitted a new VAT number. Details are below:{Environment.NewLine}
{Environment.NewLine}VAT number: %Customer.VatNumber%{Environment.NewLine}
{Environment.NewLine}VAT number status: %Customer.VatNumberStatus%{Environment.NewLine}
{Environment.NewLine}Received name: %VatValidationResult.Name%{Environment.NewLine}
{Environment.NewLine}Received address: %VatValidationResult.Address%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_CANCELLED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Your order cancelled",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Your order has been cancelled. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_CANCELLED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% cancelled",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been cancelled by customer.{Environment.NewLine}
{Environment.NewLine}Customer: %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_CANCELLED_VENDOR_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% cancelled",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been cancelled.{Environment.NewLine}
{Environment.NewLine}Customer: %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PROCESSING_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Your order is processing",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Your order is processing. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_COMPLETED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Your order completed",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Your order has been completed. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_COMPLETED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% completed",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.CustomerFullName% has just completed an order. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = false, //this template is disabled by default
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.SHIPMENT_DELIVERED_CUSTOMER_NOTIFICATION,
Subject = "Your order from %Store.Name% has been %if (!%Order.IsCompletelyDelivered%) partially endif%delivered.",
Body = $"{Environment.NewLine} %Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Good news! Your order has been %if (!%Order.IsCompletelyDelivered%) partially endif%delivered.{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% Delivered Products:{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Shipment.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PLACED_CUSTOMER_NOTIFICATION,
Subject = "Order receipt from %Store.Name%.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Thanks for buying from %Store.Name%. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PLACED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Purchase Receipt for Order #%Order.OrderNumber%",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.CustomerFullName% (%Order.CustomerEmail%) has just placed an order from your store. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.SHIPMENT_SENT_CUSTOMER_NOTIFICATION,
Subject = "Your order from %Store.Name% has been %if (!%Order.IsCompletelyShipped%) partially endif%shipped.",
Body = $"{Environment.NewLine} %Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%!,{Environment.NewLine}
{Environment.NewLine}Good news! Your order has been %if (!%Order.IsCompletelyShipped%) partially endif%shipped.{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% Shipped Products:{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Shipment.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.SHIPMENT_READY_FOR_PICKUP_CUSTOMER_NOTIFICATION,
Subject = "Your order from %Store.Name% has been %if (!%Order.IsCompletelyReadyForPickup%) partially endif%ready for pickup.",
Body = $"{Environment.NewLine} %Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%!,{Environment.NewLine}
{Environment.NewLine}Good news! Your order has been %if (!%Order.IsCompletelyReadyForPickup%) partially endif%ready for pickup.{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% Products ready for pickup:{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Shipment.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.PRODUCT_REVIEW_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New product review.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}A new product review has been written for product \"%ProductReview.ProductName%\".{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.PRODUCT_REVIEW_REPLY_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Product review reply.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}You received a reply from the store administration to your review for product \"%ProductReview.ProductName%\".{Environment.NewLine}
{Environment.NewLine}",
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.QUANTITY_BELOW_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Quantity below notification. %Product.Name%",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Product.Name% (ID: %Product.ID%) low quantity.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Quantity: %Product.StockQuantity%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.QUANTITY_BELOW_ATTRIBUTE_COMBINATION_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Quantity below notification. %Product.Name%",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Product.Name% (ID: %Product.ID%) low quantity.{Environment.NewLine}
{Environment.NewLine}%AttributeCombination.Formatted%{Environment.NewLine}
{Environment.NewLine}Quantity: %AttributeCombination.StockQuantity%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.QUANTITY_BELOW_VENDOR_NOTIFICATION,
Subject = "%Store.Name%. Quantity below notification. %Product.Name%",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Product.Name% (ID: %Product.ID%) low quantity.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Quantity: %Product.StockQuantity%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.QUANTITY_BELOW_ATTRIBUTE_COMBINATION_VENDOR_NOTIFICATION,
Subject = "%Store.Name%. Quantity below notification. %Product.Name%",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Product.Name% (ID: %Product.ID%) low quantity.{Environment.NewLine}
{Environment.NewLine}%AttributeCombination.Formatted%{Environment.NewLine}
{Environment.NewLine}Quantity: %AttributeCombination.StockQuantity%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.RETURN_REQUEST_STATUS_CHANGED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Return request status was changed.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}Your return request #%ReturnRequest.CustomNumber% status has been changed.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.EMAIL_A_FRIEND_MESSAGE,
Subject = "%Store.Name%. Referred Item",
Body = $"{Environment.NewLine} %Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%EmailAFriend.Email% was shopping on %Store.Name% and wanted to share the following item with you.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Product.Name%{Environment.NewLine}
{Environment.NewLine}%Product.ShortDescription%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}For more info click here{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%EmailAFriend.PersonalMessage%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.WISHLIST_TO_FRIEND_MESSAGE,
Subject = "%Store.Name%. Wishlist",
Body = $"{Environment.NewLine} %Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Wishlist.Email% was shopping on %Store.Name% and wanted to share a wishlist with you.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}For more info click here{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Wishlist.PersonalMessage%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_ORDER_NOTE_ADDED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. New order note has been added",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}New order note has been added to your account:{Environment.NewLine}
{Environment.NewLine}\"%Order.NewNoteText%\".{Environment.NewLine}
{Environment.NewLine}%Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.RECURRING_PAYMENT_CANCELLED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Recurring payment cancelled",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%RecurringPayment.CancelAfterFailedPayment%) The last payment for the recurring payment ID=%RecurringPayment.ID% failed, so it was cancelled. endif% %if (!%RecurringPayment.CancelAfterFailedPayment%) %Customer.FullName% (%Customer.Email%) has just cancelled a recurring payment ID=%RecurringPayment.ID%. endif%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.RECURRING_PAYMENT_CANCELLED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Recurring payment cancelled",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}%if (%RecurringPayment.CancelAfterFailedPayment%) It appears your credit card didn't go through for this recurring payment (%Order.OrderURLForCustomer%){Environment.NewLine}
{Environment.NewLine}So your subscription has been cancelled. endif% %if (!%RecurringPayment.CancelAfterFailedPayment%) The recurring payment ID=%RecurringPayment.ID% was cancelled. endif%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.RECURRING_PAYMENT_FAILED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Last recurring payment failed",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Customer.FullName%,{Environment.NewLine}
{Environment.NewLine}It appears your credit card didn't go through for this recurring payment (%Order.OrderURLForCustomer%){Environment.NewLine}
%if (%RecurringPayment.RecurringPaymentType% == \"Manual\") {Environment.NewLine}You can recharge balance and manually retry payment or cancel it on the order history page. endif% %if (%RecurringPayment.RecurringPaymentType% == \"Automatic\") {Environment.NewLine}You can recharge balance and wait, we will try to make the payment again, or you can cancel it on the order history page. endif%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PLACED_VENDOR_NOTIFICATION,
Subject = "%Store.Name%. Order placed",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Customer.FullName% (%Customer.Email%) has just placed an order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PLACED_AFFILIATE_NOTIFICATION,
Subject = "%Store.Name%. Order placed",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Customer.FullName% (%Customer.Email%) has just placed an order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_REFUNDED_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% refunded",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Thanks for buying from %Store.Name%. Order #%Order.OrderNumber% has been has been refunded. Please allow 7-14 days for the refund to be reflected in your account.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Amount refunded: %Order.AmountRefunded%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_REFUNDED_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% refunded",
Body = $"%Store.Name%. Order #%Order.OrderNumber% refunded', N'{Environment.NewLine}{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been just refunded{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Amount refunded: %Order.AmountRefunded%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PAID_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% paid",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been just paid{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PAID_CUSTOMER_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% paid",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Hello %Order.CustomerFullName%,{Environment.NewLine}
{Environment.NewLine}Thanks for buying from %Store.Name%. Order #%Order.OrderNumber% has been just paid. Below is the summary of the order.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Order Details: %Order.OrderURLForCustomer%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Billing Address{Environment.NewLine}
{Environment.NewLine}%Order.BillingFirstName% %Order.BillingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.BillingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.BillingCity% %Order.BillingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.BillingStateProvince% %Order.BillingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%if (%Order.Shippable%) Shipping Address{Environment.NewLine}
{Environment.NewLine}%Order.ShippingFirstName% %Order.ShippingLastName%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress1%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingAddress2%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingCity% %Order.ShippingZipPostalCode%{Environment.NewLine}
{Environment.NewLine}%Order.ShippingStateProvince% %Order.ShippingCountry%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Shipping Method: %Order.ShippingMethod%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine} endif% %Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PAID_VENDOR_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% paid",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been just paid.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.ORDER_PAID_AFFILIATE_NOTIFICATION,
Subject = "%Store.Name%. Order #%Order.OrderNumber% paid",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order #%Order.OrderNumber% has been just paid.{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Order Number: %Order.OrderNumber%{Environment.NewLine}
{Environment.NewLine}Date Ordered: %Order.CreatedOn%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Order.Product(s)%{Environment.NewLine}
{Environment.NewLine}",
//this template is disabled by default
IsActive = false,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.NEW_VENDOR_ACCOUNT_APPLY_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. New vendor account submitted.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}%Customer.FullName% (%Customer.Email%) has just submitted for a vendor account. Details are below:{Environment.NewLine}
{Environment.NewLine}Vendor name: %Vendor.Name%{Environment.NewLine}
{Environment.NewLine}Vendor email: %Vendor.Email%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}You can activate it in admin area.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.VENDOR_INFORMATION_CHANGE_STORE_OWNER_NOTIFICATION,
Subject = "%Store.Name%. Vendor information change.",
Body = $"{Environment.NewLine}%Store.Name%{Environment.NewLine}
{Environment.NewLine}
{Environment.NewLine}Vendor %Vendor.Name% (%Vendor.Email%) has just changed information about itself.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CONTACT_US_MESSAGE,
Subject = "%Store.Name%. Contact us",
Body = $"{Environment.NewLine}%ContactUs.Body%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CONTACT_VENDOR_MESSAGE,
Subject = "%Store.Name%. Contact us",
Body = $"{Environment.NewLine}%ContactUs.Body%{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
new() {
Name = MessageTemplateSystemNames.CUSTOMER_FAILED_LOGIN_ATTEMPT_NOTIFICATION,
Subject = "%Store.Name%. Failed Login Attempt",
Body = $"{Environment.NewLine}You have received this notification because we registered a login attempt with invalid authentication on %Store.Name%.{Environment.NewLine}
{Environment.NewLine}",
IsActive = true,
EmailAccountId = eaGeneral.Id
},
};
await _dataProvider.BulkInsertEntitiesAsync(messageTemplates);
}
///
/// Installs a default type of newsletter subscription
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallNewsLetterSubscriptionTypeAsync()
{
var newsLetterSubscriptionType = new List
{
new() {
Name = NopMessageDefaults.DefaultSubscriptionType,
TickedByDefault = true,
DisplayOrder = 0
}
};
await _dataProvider.BulkInsertEntitiesAsync(newsLetterSubscriptionType);
}
///
/// Installs a default topic templates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallTopicTemplatesAsync()
{
var topicTemplates = new List
{
new() {
Name = "Default template",
ViewPath = "TopicDetails",
DisplayOrder = 1
}
};
await _dataProvider.BulkInsertEntitiesAsync(topicTemplates);
}
///
/// Set setting value
///
/// All settings in the dictionary view
/// Type
/// Key
/// Value
/// Store identifier
/// A task that represents the asynchronous operation
protected virtual async Task SetSettingAsync(Dictionary> allSettings, Type type, string key, object value, int storeId = 0)
{
ArgumentNullException.ThrowIfNull(key);
key = key.Trim().ToLowerInvariant();
var valueStr = TypeDescriptor.GetConverter(type).ConvertToInvariantString(value);
var settingForCaching = allSettings.TryGetValue(key, out var settings) ?
settings.FirstOrDefault(x => x.StoreId == storeId) : null;
if (settingForCaching != null)
{
//update
var setting = await Table().Where(s => s.Id == settingForCaching.Id).FirstOrDefaultAsync();
setting.Value = valueStr;
await _dataProvider.UpdateEntityAsync(setting);
}
else
{
//insert
var setting = new Setting
{
Name = key,
Value = valueStr,
StoreId = storeId
};
await _dataProvider.InsertEntityAsync(setting);
}
}
///
/// Save settings object
///
/// Type
/// All settings in the dictionary view
/// Setting instance
/// Store identifier
/// A task that represents the asynchronous operation
protected virtual async Task SaveSettingAsync(Dictionary> allSettings, T settings, int storeId = 0) where T : ISettings, new()
{
foreach (var prop in typeof(T).GetProperties())
{
// get properties we can read and write to
if (!prop.CanRead || !prop.CanWrite)
continue;
if (!TypeDescriptor.GetConverter(prop.PropertyType).CanConvertFrom(typeof(string)))
continue;
var key = typeof(T).Name + "." + prop.Name;
var value = prop.GetValue(settings, null);
if (value != null)
await SetSettingAsync(allSettings, prop.PropertyType, key, value, storeId);
else
await SetSettingAsync(allSettings, typeof(string), key, string.Empty, storeId);
}
}
///
/// Installs a default settings
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallSettingsAsync()
{
var isMetric = _installationSettings.RegionInfo?.IsMetric ?? false;
var country = _installationSettings.RegionInfo?.TwoLetterISORegionName ?? string.Empty;
var isGermany = country == "DE";
var isEurope = ISO3166.FromCountryCode(country)?.SubjectToVat ?? false;
var settings = await Table()
.OrderBy(s => s.Name)
.ThenBy(s => s.StoreId)
.ToListAsync();
var dictionary = new Dictionary>();
foreach (var s in settings)
{
var resourceName = s.Name.ToLowerInvariant();
var settingForCaching = new Setting
{
Id = s.Id,
Name = s.Name,
Value = s.Value,
StoreId = s.StoreId
};
if (!dictionary.TryGetValue(resourceName, out var value))
//first setting
dictionary.Add(resourceName, new List
{
settingForCaching
});
else
//already added
//most probably it's the setting with the same name but for some certain store (storeId > 0)
value.Add(settingForCaching);
}
await SaveSettingAsync(dictionary, new PdfSettings
{
LogoPictureId = 0,
LetterPageSizeEnabled = false,
RenderOrderNotes = true,
LtrFontName = NopCommonDefaults.PdfLtrFontName,
RtlFontName = NopCommonDefaults.PdfRtlFontName,
InvoiceFooterTextColumn1 = null,
InvoiceFooterTextColumn2 = null,
BaseFontSize = 10,
ImageTargetSize = 200
});
await SaveSettingAsync(dictionary, new SitemapSettings
{
SitemapEnabled = true,
SitemapPageSize = 200,
SitemapIncludeCategories = true,
SitemapIncludeManufacturers = true,
SitemapIncludeProducts = false,
SitemapIncludeProductTags = false,
SitemapIncludeBlogPosts = true,
SitemapIncludeNews = false,
SitemapIncludeTopics = true
});
await SaveSettingAsync(dictionary, new SitemapXmlSettings
{
SitemapXmlEnabled = true,
SitemapXmlIncludeBlogPosts = true,
SitemapXmlIncludeCategories = true,
SitemapXmlIncludeManufacturers = true,
SitemapXmlIncludeNews = true,
SitemapXmlIncludeProducts = true,
SitemapXmlIncludeProductTags = true,
SitemapXmlIncludeCustomUrls = true,
SitemapXmlIncludeTopics = true,
RebuildSitemapXmlAfterHours = 2 * 24,
SitemapBuildOperationDelay = 60
});
await SaveSettingAsync(dictionary, new CommonSettings
{
UseSystemEmailForContactUsForm = true,
SubjectFieldOnContactUsForm = false,
DisplayJavaScriptDisabledWarning = false,
Log404Errors = true,
BreadcrumbDelimiter = "/",
BbcodeEditorOpenLinksInNewWindow = false,
PopupForTermsOfServiceLinks = true,
JqueryMigrateScriptLoggingActive = false,
UseResponseCompression = true,
FaviconAndAppIconsHeadCode =
"",
EnableHtmlMinification = false,
RestartTimeout = NopCommonDefaults.RestartTimeout,
HeaderCustomHtml = string.Empty,
FooterCustomHtml = string.Empty
});
await SaveSettingAsync(dictionary, new SeoSettings
{
PageTitleSeparator = ". ",
PageTitleSeoAdjustment = PageTitleSeoAdjustment.PagenameAfterStorename,
GenerateProductMetaDescription = true,
ConvertNonWesternChars = false,
AllowUnicodeCharsInUrls = true,
CanonicalUrlsEnabled = false,
QueryStringInCanonicalUrlsEnabled = false,
WwwRequirement = WwwRequirement.NoMatter,
TwitterMetaTags = true,
OpenGraphMetaTags = true,
MicrodataEnabled = true,
ReservedUrlRecordSlugs = NopSeoDefaults.ReservedUrlRecordSlugs,
CustomHeadTags = string.Empty
});
await SaveSettingAsync(dictionary, new AdminAreaSettings
{
DefaultGridPageSize = 15,
ProductsBulkEditGridPageSize = 100,
PopupGridPageSize = 7,
GridPageSizes = "7, 15, 20, 50, 100",
RichEditorAdditionalSettings = null,
UseRichEditorForCustomerEmails = false,
UseRichEditorInMessageTemplates = false,
HideAdvertisementsOnAdminArea = false,
CheckLicense = true,
LastNewsTitleAdminArea = string.Empty,
LicenseTerms = string.Empty,
UseIsoDateFormatInJsonResult = true,
ShowDocumentationReferenceLinks = true,
UseStickyHeaderLayout = false,
MinimumDropdownItemsForSearch = 50
});
await SaveSettingAsync(dictionary, new ProductEditorSettings
{
Weight = true,
Dimensions = true,
ProductAttributes = true,
SpecificationAttributes = true,
FilterLevelValuesProducts = true,
PAngV = isGermany
});
await SaveSettingAsync(dictionary, new GdprSettings
{
DeleteInactiveCustomersAfterMonths = 36,
GdprEnabled = false,
LogPrivacyPolicyConsent = true,
LogNewsletterConsent = true,
LogUserProfileChanges = true
});
await SaveSettingAsync(dictionary, new CatalogSettings
{
AllowViewUnpublishedProductPage = true,
DisplayDiscontinuedMessageForUnpublishedProducts = true,
PublishBackProductWhenCancellingOrders = false,
ShowSkuOnProductDetailsPage = true,
ShowSkuOnCatalogPages = false,
ShowManufacturerPartNumber = false,
ShowGtin = false,
ShowFreeShippingNotification = true,
ShowShortDescriptionOnCatalogPages = false,
AllowProductSorting = true,
AllowProductViewModeChanging = true,
DefaultViewMode = "grid",
ShowProductsFromSubcategories = false,
ShowCategoryProductNumber = false,
ShowCategoryProductNumberIncludingSubcategories = false,
CategoryBreadcrumbEnabled = true,
ShowShareButton = true,
PageShareCode =
"",
ProductReviewsMustBeApproved = false,
OneReviewPerProductFromCustomer = false,
DefaultProductRatingValue = 5,
AllowAnonymousUsersToReviewProduct = false,
ProductReviewPossibleOnlyAfterPurchasing = false,
NotifyStoreOwnerAboutNewProductReviews = false,
NotifyCustomerAboutProductReviewReply = false,
EmailAFriendEnabled = true,
AllowAnonymousUsersToEmailAFriend = false,
RecentlyViewedProductsNumber = 3,
RecentlyViewedProductsEnabled = true,
NewProductsEnabled = true,
NewProductsPageSize = 6,
NewProductsAllowCustomersToSelectPageSize = true,
NewProductsPageSizeOptions = "6, 3, 9",
CompareProductsEnabled = true,
CompareProductsNumber = 4,
ProductSearchAutoCompleteEnabled = true,
ProductSearchEnabled = true,
ProductSearchAutoCompleteNumberOfProducts = 10,
ShowLinkToAllResultInSearchAutoComplete = false,
ProductSearchTermMinimumLength = 3,
ShowProductImagesInSearchAutoComplete = false,
ShowBestsellersOnHomepage = false,
NumberOfBestsellersOnHomepage = 4,
ShowSearchBoxCategories = false,
SearchPageProductsPerPage = 6,
SearchPageAllowCustomersToSelectPageSize = true,
SearchPagePageSizeOptions = "6, 3, 9, 18",
SearchPagePriceRangeFiltering = true,
SearchPageManuallyPriceRange = true,
SearchPagePriceFrom = NopCatalogDefaults.DefaultPriceRangeFrom,
SearchPagePriceTo = NopCatalogDefaults.DefaultPriceRangeTo,
ProductsAlsoPurchasedEnabled = true,
ProductsAlsoPurchasedNumber = 4,
AjaxProcessAttributeChange = true,
NumberOfProductTags = 15,
ProductsByTagPageSize = 6,
IncludeShortDescriptionInCompareProducts = false,
IncludeFullDescriptionInCompareProducts = false,
IncludeFeaturedProductsInNormalLists = false,
UseLinksInRequiredProductWarnings = true,
DisplayTierPricesWithDiscounts = true,
IgnoreDiscounts = false,
IgnoreFeaturedProducts = false,
IgnoreAcl = true,
IgnoreStoreLimitations = true,
CacheProductPrices = false,
ProductsByTagAllowCustomersToSelectPageSize = true,
ProductsByTagPageSizeOptions = "6, 3, 9, 18",
ProductsByTagPriceRangeFiltering = true,
ProductsByTagManuallyPriceRange = true,
ProductsByTagPriceFrom = NopCatalogDefaults.DefaultPriceRangeFrom,
ProductsByTagPriceTo = NopCatalogDefaults.DefaultPriceRangeTo,
MaximumBackInStockSubscriptions = 200,
ManufacturersBlockItemsToDisplay = 2,
DisplayTaxShippingInfoFooter = isGermany,
DisplayTaxShippingInfoProductDetailsPage = isGermany,
DisplayTaxShippingInfoProductBoxes = isGermany,
DisplayTaxShippingInfoShoppingCart = isGermany,
DisplayTaxShippingInfoWishlist = isGermany,
DisplayTaxShippingInfoOrderDetailsPage = isGermany,
DefaultCategoryPageSizeOptions = "6, 3, 9",
DefaultCategoryPageSize = 6,
DefaultManufacturerPageSizeOptions = "6, 3, 9",
DefaultManufacturerPageSize = 6,
ShowProductReviewsTabOnAccountPage = true,
ProductReviewsPageSizeOnAccountPage = 10,
ProductReviewsSortByCreatedDateAscending = false,
ExportImportProductAttributes = true,
ExportImportProductSpecificationAttributes = true,
ExportImportTierPrices = true,
ExportImportUseDropdownlistsForAssociatedEntities = true,
ExportImportProductsCountInOneFile = 500,
ExportImportSplitProductsFile = false,
ExportImportRelatedEntitiesByName = true,
ExportImportCategoryUseLimitedToStores = false,
CountDisplayedYearsDatePicker = 1,
UseAjaxCatalogProductsLoading = true,
EnableManufacturerFiltering = true,
EnablePriceRangeFiltering = true,
EnableSpecificationAttributeFiltering = true,
DisplayFromPrices = false,
AttributeValueOutOfStockDisplayType = AttributeValueOutOfStockDisplayType.AlwaysDisplay,
AllowCustomersToSearchWithCategoryName = false,
AllowCustomersToSearchWithManufacturerName = false,
DisplayAllPicturesOnCatalogPages = false,
ProductUrlStructureTypeId = (int)ProductUrlStructureType.Product,
ActiveSearchProviderSystemName = string.Empty,
UseStandardSearchWhenSearchProviderThrowsException = true
});
await SaveSettingAsync(dictionary, new ArtificialIntelligenceSettings
{
Enabled = false,
ChatGptApiKey = string.Empty,
DeepSeekApiKey = string.Empty,
GeminiApiKey = string.Empty,
ProviderType = ArtificialIntelligenceProviderType.Gemini,
RequestTimeout = ArtificialIntelligenceDefaults.RequestTimeout,
AllowProductDescriptionGeneration = true,
ProductDescriptionQuery = ArtificialIntelligenceDefaults.ProductDescriptionQuery,
AllowMetaTitleGeneration = true,
MetaTitleQuery = ArtificialIntelligenceDefaults.MetaTitleQuery,
AllowMetaKeywordsGeneration = true,
MetaKeywordsQuery = ArtificialIntelligenceDefaults.MetaKeywordsQuery,
AllowMetaDescriptionGeneration = true,
MetaDescriptionQuery = ArtificialIntelligenceDefaults.MetaDescriptionQuery
});
await SaveSettingAsync(dictionary, new LocalizationSettings
{
DefaultAdminLanguageId = (await Table().SingleAsync(l => l.LanguageCulture == NopCommonDefaults.DefaultLanguageCulture)).Id,
UseImagesForLanguageSelection = false,
SeoFriendlyUrlsForLanguagesEnabled = false,
AutomaticallyDetectLanguage = false,
LoadAllLocaleRecordsOnStartup = true,
LoadAllLocalizedPropertiesOnStartup = true,
LoadAllUrlRecordsOnStartup = false,
IgnoreRtlPropertyForAdminArea = false
});
await SaveSettingAsync(dictionary, new TranslationSettings
{
TranslateFromLanguageId = (await Table().FirstAsync()).Id,
AllowPreTranslate = false,
GoogleApiKey = string.Empty,
NotTranslateLanguages = new List(),
DeepLAuthKey = string.Empty,
TranslationServiceId = (int)TranslationServiceType.GoogleTranslate
});
await SaveSettingAsync(dictionary, new CustomerSettings
{
UsernamesEnabled = false,
CheckUsernameAvailabilityEnabled = false,
AllowUsersToChangeUsernames = false,
DefaultPasswordFormat = PasswordFormat.Hashed,
HashedPasswordFormat = NopCustomerServicesDefaults.DefaultHashedPasswordFormat,
PasswordMinLength = 6,
PasswordMaxLength = 64,
PasswordRequireDigit = false,
PasswordRequireLowercase = false,
PasswordRequireNonAlphanumeric = false,
PasswordRequireUppercase = false,
UnduplicatedPasswordsNumber = 4,
PasswordRecoveryLinkDaysValid = 7,
PasswordLifetime = 90,
FailedPasswordAllowedAttempts = 0,
FailedPasswordLockoutMinutes = 30,
RequiredReLoginAfterPasswordChange = false,
UserRegistrationType = UserRegistrationType.Standard,
AllowCustomersToUploadAvatars = false,
AvatarMaximumSizeBytes = 20000,
DefaultAvatarEnabled = true,
ShowCustomersLocation = false,
ShowCustomersJoinDate = false,
AllowViewingProfiles = false,
NotifyFailedLoginAttempt = false,
NotifyNewCustomerRegistration = false,
HideDownloadableProductsTab = false,
HideBackInStockSubscriptionsTab = false,
DownloadableProductsValidateUser = false,
CustomerNameFormat = CustomerNameFormat.ShowFirstName,
FirstNameEnabled = true,
FirstNameRequired = true,
LastNameEnabled = true,
LastNameRequired = true,
GenderEnabled = true,
NeutralGenderEnabled = false,
DateOfBirthEnabled = false,
DateOfBirthRequired = false,
DateOfBirthMinimumAge = null,
CompanyEnabled = true,
StreetAddressEnabled = false,
StreetAddress2Enabled = false,
ZipPostalCodeEnabled = false,
CityEnabled = false,
CountyEnabled = false,
CountyRequired = false,
CountryEnabled = false,
CountryRequired = false,
StateProvinceEnabled = false,
StateProvinceRequired = false,
PhoneEnabled = false,
FaxEnabled = false,
AcceptPrivacyPolicyEnabled = false,
NewsletterEnabled = true,
HideNewsletterBlock = false,
NewsletterBlockAllowToUnsubscribe = false,
OnlineCustomerMinutes = 20,
StoreLastVisitedPage = false,
StoreIpAddresses = true,
LastActivityMinutes = 15,
SuffixDeletedCustomers = false,
EnteringEmailTwice = false,
RequireRegistrationForDownloadableProducts = false,
AllowCustomersToCheckGiftCardBalance = false,
DeleteGuestTaskOlderThanMinutes = 1440,
PhoneNumberValidationEnabled = false,
PhoneNumberValidationUseRegex = false,
PhoneNumberValidationRule = "^[0-9]{1,14}?$",
DefaultCountryId = await GetFirstEntityIdAsync(c => c.ThreeLetterIsoCode == _installationSettings.RegionInfo.ThreeLetterISORegionName)
});
await SaveSettingAsync(dictionary, new MultiFactorAuthenticationSettings
{
ForceMultifactorAuthentication = false
});
await SaveSettingAsync(dictionary, new AddressSettings
{
CompanyEnabled = true,
StreetAddressEnabled = true,
StreetAddressRequired = true,
StreetAddress2Enabled = true,
ZipPostalCodeEnabled = true,
ZipPostalCodeRequired = true,
CityEnabled = true,
CityRequired = true,
CountyEnabled = false,
CountyRequired = false,
CountryEnabled = true,
StateProvinceEnabled = true,
PhoneEnabled = true,
PhoneRequired = true,
FaxEnabled = true,
DefaultCountryId = await GetFirstEntityIdAsync(c => c.ThreeLetterIsoCode == _installationSettings.RegionInfo.ThreeLetterISORegionName),
PrePopulateCountryByCustomer = true
});
await SaveSettingAsync(dictionary, new MediaSettings
{
AvatarPictureSize = 120,
ProductThumbPictureSize = 415,
ProductDetailsPictureSize = 550,
ProductThumbPictureSizeOnProductDetailsPage = 100,
AssociatedProductPictureSize = 220,
CategoryThumbPictureSize = 450,
ManufacturerThumbPictureSize = 420,
VendorThumbPictureSize = 450,
CartThumbPictureSize = 80,
OrderThumbPictureSize = 80,
MiniCartThumbPictureSize = 70,
AutoCompleteSearchThumbPictureSize = 20,
ImageSquarePictureSize = 32,
MaximumImageSize = 1980,
DefaultPictureZoomEnabled = false,
AllowSvgUploads = false,
DefaultImageQuality = 80,
MultipleThumbDirectories = false,
ImportProductImagesUsingHash = true,
UseAbsoluteImagePath = true,
AutoOrientImage = false,
VideoIframeAllow = "fullscreen",
VideoIframeWidth = 300,
VideoIframeHeight = 150,
PicturePath = NopMediaDefaults.DefaultImagesPath
});
await SaveSettingAsync(dictionary, new StoreInformationSettings
{
StoreClosed = false,
DefaultStoreTheme = "DefaultClean",
AllowCustomerToSelectTheme = false,
DisplayEuCookieLawWarning = isEurope,
FacebookLink = "https://www.facebook.com/nopCommerce",
TwitterLink = "https://twitter.com/nopCommerce",
YoutubeLink = "https://www.youtube.com/user/nopCommerce",
InstagramLink = "https://www.instagram.com/nopcommerce_official",
HidePoweredByNopCommerce = false
});
await SaveSettingAsync(dictionary, new ExternalAuthenticationSettings
{
RequireEmailValidation = false,
LogErrors = false,
AllowCustomersToRemoveAssociations = true
});
await SaveSettingAsync(dictionary, new RewardPointsSettings
{
Enabled = true,
ExchangeRate = 1,
PointsForRegistration = 0,
RegistrationPointsValidity = 30,
PointsForPurchases_Amount = 10,
PointsForPurchases_Points = 1,
MinOrderTotalToAwardPoints = 0,
MaximumRewardPointsToUsePerOrder = 0,
MaximumRedeemedRate = 0,
PurchasesPointsValidity = 45,
ActivationDelay = 0,
ActivationDelayPeriodId = 0,
DisplayHowMuchWillBeEarned = true,
PointsAccumulatedForAllStores = true,
PageSize = 10
});
var primaryCurrency = "USD";
await SaveSettingAsync(dictionary, new CurrencySettings
{
DisplayCurrencyLabel = false,
PrimaryStoreCurrencyId = (await Table().SingleAsync(c => c.CurrencyCode == primaryCurrency)).Id,
PrimaryExchangeRateCurrencyId = (await Table().SingleAsync(c => c.CurrencyCode == primaryCurrency)).Id,
ActiveExchangeRateProviderSystemName = "CurrencyExchange.ECB",
AutoUpdateEnabled = false,
DisplayCurrencySymbolInCurrencySelector = false
});
var baseDimension = isMetric ? "meters" : "inches";
var baseWeight = isMetric ? "kg" : "lb";
await SaveSettingAsync(dictionary, new MeasureSettings
{
BaseDimensionId = (await Table().SingleAsync(m => m.SystemKeyword == baseDimension)).Id,
BaseWeightId = (await Table().SingleAsync(m => m.SystemKeyword == baseWeight)).Id
});
await SaveSettingAsync(dictionary, new MessageTemplatesSettings
{
CaseInvariantReplacement = false,
Color1 = "#b9babe",
Color2 = "#ebecee",
Color3 = "#dde2e6"
});
await SaveSettingAsync(dictionary, new ShoppingCartSettings
{
DisplayCartAfterAddingProduct = false,
DisplayWishlistAfterAddingProduct = false,
MaximumShoppingCartItems = 1000,
MaximumWishlistItems = 1000,
AllowMultipleWishlist = true,
MaximumNumberOfCustomWishlist = 10,
AllowOutOfStockItemsToBeAddedToWishlist = false,
MoveItemsFromWishlistToCart = true,
CartsSharedBetweenStores = false,
ShowProductImagesOnShoppingCart = true,
ShowProductImagesOnWishList = true,
ShowDiscountBox = true,
ShowGiftCardBox = true,
CrossSellsNumber = 4,
EmailWishlistEnabled = true,
AllowAnonymousUsersToEmailWishlist = false,
MiniShoppingCartEnabled = true,
ShowProductImagesInMiniShoppingCart = true,
MiniShoppingCartProductNumber = 5,
RoundPricesDuringCalculation = true,
GroupTierPricesForDistinctShoppingCartItems = false,
AllowCartItemEditing = true,
RenderAssociatedAttributeValueQuantity = true
});
await SaveSettingAsync(dictionary, new OrderSettings
{
ReturnRequestNumberMask = "{ID}",
IsReOrderAllowed = true,
MinOrderSubtotalAmount = 0,
MinOrderSubtotalAmountIncludingTax = false,
MinOrderTotalAmount = 0,
AutoUpdateOrderTotalsOnEditingOrder = false,
AnonymousCheckoutAllowed = true,
TermsOfServiceOnShoppingCartPage = true,
TermsOfServiceOnOrderConfirmPage = false,
OnePageCheckoutEnabled = true,
OnePageCheckoutDisplayOrderTotalsOnPaymentInfoTab = false,
DisableBillingAddressCheckoutStep = false,
DisableOrderCompletedPage = false,
DisplayPickupInStoreOnShippingMethodPage = false,
AttachPdfInvoiceToOrderPlacedEmail = false,
AttachPdfInvoiceToOrderProcessingEmail = false,
AttachPdfInvoiceToOrderCompletedEmail = false,
GeneratePdfInvoiceInCustomerLanguage = true,
AttachPdfInvoiceToOrderPaidEmail = false,
ReturnRequestsEnabled = true,
ReturnRequestsAllowFiles = false,
ReturnRequestsFileMaximumSize = 2048,
NumberOfDaysReturnRequestAvailable = 365,
MinimumOrderPlacementInterval = 1,
ActivateGiftCardsAfterCompletingOrder = false,
DeactivateGiftCardsAfterCancellingOrder = false,
DeactivateGiftCardsAfterDeletingOrder = false,
CompleteOrderWhenDelivered = true,
CustomOrderNumberMask = "{ID}",
ExportWithProducts = true,
AllowAdminsToBuyCallForPriceProducts = true,
AllowCustomersCancelOrders = true,
ShowProductThumbnailInOrderDetailsPage = true,
DisplayCustomerCurrencyOnOrders = false,
DisplayOrderSummary = true,
PlaceOrderWithLock = false,
CustomerOrdersPageSize = 10
});
await SaveSettingAsync(dictionary, new SecuritySettings
{
EncryptionKey = CommonHelper.GenerateRandomDigitCode(16),
AdminAreaAllowedIpAddresses = null,
HoneypotEnabled = false,
HoneypotInputName = "hpinput",
AllowNonAsciiCharactersInHeaders = true,
UseAesEncryptionAlgorithm = true,
AllowStoreOwnerExportImportCustomersWithHashedPassword = true
});
await SaveSettingAsync(dictionary, new ShippingSettings
{
ActiveShippingRateComputationMethodSystemNames = ["Shipping.FixedByWeightByTotal"],
ActivePickupPointProviderSystemNames = ["Pickup.PickupInStore"],
ShipToSameAddress = true,
AllowPickupInStore = true,
DisplayPickupPointsOnMap = false,
IgnoreAdditionalShippingChargeForPickupInStore = true,
UseWarehouseLocation = false,
NotifyCustomerAboutShippingFromMultipleLocations = false,
FreeShippingOverXEnabled = false,
FreeShippingOverXValue = decimal.Zero,
FreeShippingOverXIncludingTax = false,
EstimateShippingProductPageEnabled = true,
EstimateShippingCartPageEnabled = true,
EstimateShippingCityNameEnabled = false,
DisplayShipmentEventsToCustomers = false,
DisplayShipmentEventsToStoreOwner = false,
HideShippingTotal = false,
ReturnValidOptionsIfThereAreAny = true,
BypassShippingMethodSelectionIfOnlyOne = false,
UseCubeRootMethod = true,
ConsiderAssociatedProductsDimensions = true,
ShipSeparatelyOneItemEach = false,
RequestDelay = 300,
ShippingSorting = ShippingSortingEnum.Position,
});
await SaveSettingAsync(dictionary, new PaymentSettings
{
ActivePaymentMethodSystemNames = ["Payments.CheckMoneyOrder", "Payments.Manual"],
AllowRePostingPayments = true,
BypassPaymentMethodSelectionIfOnlyOne = true,
ShowPaymentMethodDescriptions = true,
SkipPaymentInfoStepForRedirectionPaymentMethods = false,
CancelRecurringPaymentsAfterFailedPayment = false,
RegenerateOrderGuidInterval = 180
});
await SaveSettingAsync(dictionary, new TaxSettings
{
TaxBasedOn = TaxBasedOn.BillingAddress,
TaxBasedOnPickupPointAddress = false,
TaxDisplayType = TaxDisplayType.ExcludingTax,
ActiveTaxProviderSystemName = "Tax.FixedOrByCountryStateZip",
DefaultTaxAddressId = 0,
DisplayTaxSuffix = false,
DisplayTaxRates = false,
PricesIncludeTax = false,
AutomaticallyDetectCountry = true,
AllowCustomersToSelectTaxDisplayType = false,
ForceTaxExclusionFromOrderSubtotal = false,
DefaultTaxCategoryId = 0,
HideZeroTax = false,
HideTaxInOrderSummary = false,
ShippingIsTaxable = false,
ShippingPriceIncludesTax = false,
ShippingTaxClassId = 0,
PaymentMethodAdditionalFeeIsTaxable = false,
PaymentMethodAdditionalFeeIncludesTax = false,
PaymentMethodAdditionalFeeTaxClassId = 0,
EuVatEnabled = isEurope,
EuVatEnabledForGuests = false,
EuVatRequired = false,
EuVatShopCountryId = isEurope ? (await GetFirstEntityIdAsync(x => x.TwoLetterIsoCode == country) ?? 0) : 0,
EuVatAllowVatExemption = true,
EuVatUseWebService = false,
EuVatAssumeValid = false,
EuVatEmailAdminWhenNewVatSubmitted = false,
HmrcApiUrl = "https://api.service.hmrc.gov.uk",
HmrcClientId = string.Empty,
HmrcClientSecret = string.Empty,
LogErrors = false
});
await SaveSettingAsync(dictionary, new DateTimeSettings
{
DefaultStoreTimeZoneId = string.Empty,
AllowCustomersToSetTimeZone = false
});
await SaveSettingAsync(dictionary, new BlogSettings
{
Enabled = true,
PostsPageSize = 10,
AllowNotRegisteredUsersToLeaveComments = true,
NotifyAboutNewBlogComments = false,
NumberOfTags = 15,
ShowHeaderRssUrl = false,
BlogCommentsMustBeApproved = false,
ShowBlogCommentsPerStore = false
});
await SaveSettingAsync(dictionary, new NewsSettings
{
Enabled = true,
AllowNotRegisteredUsersToLeaveComments = true,
NotifyAboutNewNewsComments = false,
ShowNewsOnMainPage = true,
MainPageNewsCount = 3,
NewsArchivePageSize = 10,
ShowHeaderRssUrl = false,
NewsCommentsMustBeApproved = false,
ShowNewsCommentsPerStore = false
});
await SaveSettingAsync(dictionary, new ForumSettings
{
ForumsEnabled = false,
RelativeDateTimeFormattingEnabled = true,
AllowCustomersToDeletePosts = false,
AllowCustomersToEditPosts = false,
AllowCustomersToManageSubscriptions = false,
AllowGuestsToCreatePosts = false,
AllowGuestsToCreateTopics = false,
AllowPostVoting = true,
MaxVotesPerDay = 30,
TopicSubjectMaxLength = 450,
PostMaxLength = 4000,
StrippedTopicMaxLength = 45,
TopicsPageSize = 10,
PostsPageSize = 10,
SearchResultsPageSize = 10,
ActiveDiscussionsPageSize = 50,
LatestCustomerPostsPageSize = 10,
ShowCustomersPostCount = true,
ForumEditor = EditorType.MarkdownEditor,
SignaturesEnabled = true,
AllowPrivateMessages = false,
ShowAlertForPM = false,
PrivateMessagesPageSize = 10,
ForumSubscriptionsPageSize = 10,
NotifyAboutPrivateMessages = false,
PMSubjectMaxLength = 450,
PMTextMaxLength = 4000,
HomepageActiveDiscussionsTopicCount = 5,
ActiveDiscussionsFeedEnabled = false,
ActiveDiscussionsFeedCount = 25,
ForumFeedsEnabled = false,
ForumFeedCount = 10,
ForumSearchTermMinimumLength = 3,
TopicMetaDescriptionLength = 160
});
await SaveSettingAsync(dictionary, new VendorSettings
{
DefaultVendorPageSizeOptions = "6, 3, 9",
VendorsBlockItemsToDisplay = 0,
ShowVendorOnProductDetailsPage = true,
AllowCustomersToContactVendors = true,
AllowCustomersToApplyForVendorAccount = true,
TermsOfServiceEnabled = false,
AllowVendorsToEditInfo = false,
NotifyStoreOwnerAboutVendorInformationChange = true,
MaximumProductNumber = 3000,
AllowVendorsToImportProducts = true,
MaximumProductPicturesNumber = 5
});
var eaGeneral = await Table().FirstOrDefaultAsync() ?? throw new Exception("Default email account cannot be loaded");
await SaveSettingAsync(dictionary, new EmailAccountSettings { DefaultEmailAccountId = eaGeneral.Id });
await SaveSettingAsync(dictionary, new CaptchaSettings
{
ReCaptchaApiUrl = "https://www.google.com/recaptcha/",
ReCaptchaDefaultLanguage = string.Empty,
ReCaptchaPrivateKey = string.Empty,
ReCaptchaPublicKey = string.Empty,
ReCaptchaRequestTimeout = 20,
ReCaptchaTheme = string.Empty,
AutomaticallyChooseLanguage = true,
Enabled = false,
CaptchaType = CaptchaType.CheckBoxReCaptchaV2,
ReCaptchaV3ScoreThreshold = 0.5M,
ShowOnApplyVendorPage = false,
ShowOnBlogCommentPage = false,
ShowOnContactUsPage = false,
ShowOnEmailProductToFriendPage = false,
ShowOnEmailWishlistToFriendPage = false,
ShowOnForgotPasswordPage = false,
ShowOnForum = false,
ShowOnLoginPage = false,
ShowOnNewsCommentPage = false,
ShowOnNewsletterPage = false,
ShowOnProductReviewPage = false,
ShowOnRegistrationPage = false,
ShowOnCheckoutPageForGuests = false,
ShowOnCheckGiftCardBalance = true
});
await SaveSettingAsync(dictionary, new MessagesSettings { UsePopupNotifications = false });
await SaveSettingAsync(dictionary, new ProxySettings
{
Enabled = false,
Address = string.Empty,
Port = string.Empty,
Username = string.Empty,
Password = string.Empty,
BypassOnLocal = true,
PreAuthenticate = true
});
await SaveSettingAsync(dictionary, new CookieSettings
{
CompareProductsCookieExpires = 24 * 10,
RecentlyViewedProductsCookieExpires = 24 * 10,
CustomerCookieExpires = 24 * 365
});
await SaveSettingAsync(dictionary, new RobotsTxtSettings
{
DisallowPaths =
[
"/admin",
"/bin/",
"/files/",
"/files/exportimport/",
"/install",
"/*?*returnUrl=",
"/*?*returnurl=",
"/*?*ReturnUrl=",
//AJAX urls
"/cart/estimateshipping",
"/cart/selectshippingoption",
"/customer/addressdelete",
"/customer/removeexternalassociation",
"/customer/checkusernameavailability",
"/catalog/searchtermautocomplete",
"/addproducttocart/catalog/*",
"/addproducttocart/details/*",
"/compareproducts/add/*",
"/backinstocksubscribe/*",
"/subscribenewsletter",
"/t-popup/*",
"/setproductreviewhelpfulness",
"/poll/vote",
"/country/getstatesbycountryid/",
"/eucookielawaccept",
"/topic/authenticate",
"/category/products/",
"/product/combinations",
"/uploadfileproductattribute/*",
"/shoppingcart/productdetails_attributechange/*",
"/uploadfilereturnrequest",
"/boards/topicwatch/*",
"/boards/forumwatch/*",
"/install/restartapplication",
"/boards/postvote",
"/product/estimateshipping/*",
"/shoppingcart/checkoutattributechange/*"
],
LocalizableDisallowPaths =
[
"/addproducttocart/catalog/",
"/addproducttocart/details/",
"/backinstocksubscriptions/manage",
"/boards/forumsubscriptions",
"/boards/forumwatch",
"/boards/postedit",
"/boards/postdelete",
"/boards/postcreate",
"/boards/topicedit",
"/boards/topicdelete",
"/boards/topiccreate",
"/boards/topicmove",
"/boards/topicwatch",
"/cart$",
"/changecurrency",
"/changelanguage",
"/changetaxtype",
"/checkout",
"/checkout/billingaddress",
"/checkout/completed",
"/checkout/confirm",
"/checkout/shippingaddress",
"/checkout/shippingmethod",
"/checkout/paymentinfo",
"/checkout/paymentmethod",
"/clearcomparelist",
"/compareproducts",
"/compareproducts/add/*",
"/customer/avatar",
"/customer/activation",
"/customer/addresses",
"/customer/changepassword",
"/customer/checkusernameavailability",
"/customer/downloadableproducts",
"/customer/info",
"/customer/productreviews",
"/deletepm",
"/emailwishlist",
"/eucookielawaccept",
"/inboxupdate",
"/newsletter/subscriptionactivation",
"/onepagecheckout",
"/order/history",
"/orderdetails",
"/passwordrecovery/confirm",
"/poll/vote",
"/privatemessages",
"/recentlyviewedproducts",
"/returnrequest",
"/returnrequest/history",
"/rewardpoints/history",
"/search?",
"/sendpm",
"/sentupdate",
"/shoppingcart/*",
"/storeclosed",
"/subscribenewsletter",
"/topic/authenticate",
"/viewpm",
"/uploadfilecheckoutattribute",
"/uploadfileproductattribute",
"/uploadfilereturnrequest",
"/wishlist"
]
});
await SaveSettingAsync(dictionary, new FilterLevelSettings
{
DisplayOnHomePage = true,
DisplayOnProductDetailsPage = true
});
await SaveSettingAsync(dictionary, new MenuSettings
{
NumberOfSubItemsPerGridElement = 3,
NumberOfItemsPerGridRow = 4,
MaximumNumberEntities = 8,
GridThumbPictureSize = 220,
MaximumMainMenuLevels = 2
});
}
///
/// Installs a default customers
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallCustomersAndUsersAsync()
{
var crAdministrators = new CustomerRole
{
Name = "Administrators",
Active = true,
IsSystemRole = true,
SystemName = NopCustomerDefaults.AdministratorsRoleName
};
var crForumModerators = new CustomerRole
{
Name = "Forum Moderators",
Active = true,
IsSystemRole = true,
SystemName = NopCustomerDefaults.ForumModeratorsRoleName
};
var crRegistered = new CustomerRole
{
Name = "Registered",
Active = true,
IsSystemRole = true,
SystemName = NopCustomerDefaults.RegisteredRoleName
};
var crGuests = new CustomerRole
{
Name = "Guests",
Active = true,
IsSystemRole = true,
SystemName = NopCustomerDefaults.GuestsRoleName
};
var crVendors = new CustomerRole
{
Name = "Vendors",
Active = true,
IsSystemRole = true,
SystemName = NopCustomerDefaults.VendorsRoleName
};
var customerRoles = new List
{
crAdministrators,
crForumModerators,
crRegistered,
crGuests,
crVendors
};
await _dataProvider.BulkInsertEntitiesAsync(customerRoles);
//default store
var defaultStore = await Table().FirstOrDefaultAsync() ?? throw new Exception("No default store could be loaded");
var storeId = defaultStore.Id;
//admin user
var adminUser = new Customer
{
CustomerGuid = Guid.NewGuid(),
Email = _installationSettings.AdminEmail,
Username = _installationSettings.AdminEmail,
Active = true,
CreatedOnUtc = DateTime.UtcNow,
LastActivityDateUtc = DateTime.UtcNow,
RegisteredInStoreId = storeId
};
var defaultAdminUserAddress = await _dataProvider.InsertEntityAsync(
new Address
{
FirstName = "John",
LastName = "Smith",
PhoneNumber = "12345678",
Email = _installationSettings.AdminEmail,
FaxNumber = string.Empty,
Company = "Nop Solutions Ltd",
Address1 = "21 West 52nd Street",
Address2 = string.Empty,
City = "New York",
StateProvinceId = await GetFirstEntityIdAsync(sp => sp.Name == "New York"),
CountryId = await GetFirstEntityIdAsync(c => c.ThreeLetterIsoCode == "USA"),
ZipPostalCode = "10021",
CreatedOnUtc = DateTime.UtcNow
});
adminUser.BillingAddressId = defaultAdminUserAddress.Id;
adminUser.ShippingAddressId = defaultAdminUserAddress.Id;
adminUser.FirstName = defaultAdminUserAddress.FirstName;
adminUser.LastName = defaultAdminUserAddress.LastName;
await _dataProvider.InsertEntityAsync(adminUser);
await _dataProvider.InsertEntityAsync(new CustomerAddressMapping { CustomerId = adminUser.Id, AddressId = defaultAdminUserAddress.Id });
await _dataProvider.BulkInsertEntitiesAsync(new[]{
new CustomerCustomerRoleMapping { CustomerId = adminUser.Id, CustomerRoleId = crAdministrators.Id },
new CustomerCustomerRoleMapping { CustomerId = adminUser.Id, CustomerRoleId = crForumModerators.Id },
new CustomerCustomerRoleMapping { CustomerId = adminUser.Id, CustomerRoleId = crRegistered.Id }});
//set hashed admin password
var customerPassword = new CustomerPassword
{
CustomerId = await GetDefaultCustomerIdAsync(),
PasswordFormat = PasswordFormat.Hashed,
CreatedOnUtc = DateTime.UtcNow
};
//generate a cryptographic random number
using var provider = RandomNumberGenerator.Create();
var buff = new byte[NopCustomerServicesDefaults.PasswordSaltKeySize];
provider.GetBytes(buff);
var saltKey = Convert.ToBase64String(buff);
customerPassword.PasswordSalt = saltKey;
customerPassword.Password = HashHelper.CreateHash(Encoding.UTF8.GetBytes(string.Concat(_installationSettings.AdminPassword, saltKey)), NopCustomerServicesDefaults.DefaultHashedPasswordFormat);
await _dataProvider.InsertEntityAsync(customerPassword);
//search engine (crawler) built-in user
var searchEngineUser = new Customer
{
Email = "builtin@search_engine_record.com",
CustomerGuid = Guid.NewGuid(),
AdminComment = "Built-in system guest record used for requests from search engines.",
Active = true,
IsSystemAccount = true,
SystemName = NopCustomerDefaults.SearchEngineCustomerName,
CreatedOnUtc = DateTime.UtcNow,
LastActivityDateUtc = DateTime.UtcNow,
RegisteredInStoreId = storeId
};
await _dataProvider.InsertEntityAsync(searchEngineUser);
await _dataProvider.InsertEntityAsync(new CustomerCustomerRoleMapping { CustomerRoleId = crGuests.Id, CustomerId = searchEngineUser.Id });
//built-in user for background tasks
var backgroundTaskUser = new Customer
{
Email = "builtin@background-task-record.com",
CustomerGuid = Guid.NewGuid(),
AdminComment = "Built-in system record used for background tasks.",
Active = true,
IsSystemAccount = true,
SystemName = NopCustomerDefaults.BackgroundTaskCustomerName,
CreatedOnUtc = DateTime.UtcNow,
LastActivityDateUtc = DateTime.UtcNow,
RegisteredInStoreId = storeId
};
await _dataProvider.InsertEntityAsync(backgroundTaskUser);
await _dataProvider.InsertEntityAsync(new CustomerCustomerRoleMapping { CustomerId = backgroundTaskUser.Id, CustomerRoleId = crGuests.Id });
}
///
/// Installs a default topics
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallTopicsAsync()
{
var defaultTopicTemplate = await Table().FirstOrDefaultAsync(tt => tt.Name == "Default template") ?? throw new Exception("Topic template cannot be loaded");
var topics = new List
{
new() {
SystemName = "AboutUs",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 20,
Published = true,
Title = "About us",
Body =
"Put your "About Us" information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "CheckoutAsGuestOrRegister",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = string.Empty,
Body =
"Register and save time!
Register with us for future convenience:
- Fast and easy check out
- Easy access to your order history and status
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "ConditionsOfUse",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 15,
Published = true,
Title = "Conditions of Use",
Body = "Put your conditions of use information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "ContactUs",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = string.Empty,
Body = "Put your contact information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "ForumWelcomeMessage",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = "Forums",
Body = "Put your welcome message here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "HomepageText",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = "Welcome to our store",
Body =
"Online shopping is the process consumers go through to purchase products or services over the Internet. You can edit this in the admin site.
If you have questions, see the Documentation, or post in the Forums at nopCommerce.com
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "LoginRegistrationInfo",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = "About login / registration",
Body =
"Put your login / registration information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "PrivacyInfo",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 10,
Published = true,
Title = "Privacy notice",
Body = "Put your privacy policy information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "PageNotFound",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = string.Empty,
Body =
"The page you requested was not found, and we have a fine guess why.
- If you typed the URL directly, please make sure the spelling is correct.
- The page no longer exists. In this case, we profusely apologize for the inconvenience and for any damage this may cause.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "ShippingInfo",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 5,
Published = true,
Title = "Shipping & returns",
Body =
"Put your shipping & returns information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "ApplyVendor",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = string.Empty,
Body = "Put your apply vendor instructions here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
},
new() {
SystemName = "VendorTermsOfService",
IncludeInSitemap = false,
IsPasswordProtected = false,
DisplayOrder = 1,
Published = true,
Title = "Terms of services for vendors",
Body = "Put your terms of service information here. You can edit this in the admin site.
",
TopicTemplateId = defaultTopicTemplate.Id
}
};
await _dataProvider.BulkInsertEntitiesAsync(topics);
//search engine names
foreach (var topic in topics)
{
await _dataProvider.InsertEntityAsync(new UrlRecord
{
EntityId = topic.Id,
EntityName = nameof(Topic),
LanguageId = 0,
IsActive = true,
Slug = await ValidateSeNameAsync(topic, !string.IsNullOrEmpty(topic.Title) ? topic.Title : topic.SystemName)
});
}
}
///
/// Installs a default types of activity log
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallActivityLogTypesAsync()
{
var activityLogTypes = new List
{
//admin area activities
new() {
SystemKeyword = "AddNewAddressAttribute",
Enabled = true,
Name = "Add a new address attribute"
},
new() {
SystemKeyword = "AddNewAddressAttributeValue",
Enabled = true,
Name = "Add a new address attribute value"
},
new() {
SystemKeyword = "AddNewAffiliate",
Enabled = true,
Name = "Add a new affiliate"
},
new() {
SystemKeyword = "AddNewBlogPost",
Enabled = true,
Name = "Add a new blog post"
},
new() {
SystemKeyword = "AddNewCampaign",
Enabled = true,
Name = "Add a new campaign"
},
new() {
SystemKeyword = "AddNewCategory",
Enabled = true,
Name = "Add a new category"
},
new() {
SystemKeyword = "AddNewCheckoutAttribute",
Enabled = true,
Name = "Add a new checkout attribute"
},
new() {
SystemKeyword = "AddNewCountry",
Enabled = true,
Name = "Add a new country"
},
new() {
SystemKeyword = "AddNewCurrency",
Enabled = true,
Name = "Add a new currency"
},
new() {
SystemKeyword = "AddNewCustomer",
Enabled = true,
Name = "Add a new customer"
},
new() {
SystemKeyword = "AddNewCustomerAttribute",
Enabled = true,
Name = "Add a new customer attribute"
},
new() {
SystemKeyword = "AddNewCustomerAttributeValue",
Enabled = true,
Name = "Add a new customer attribute value"
},
new() {
SystemKeyword = "AddNewCustomerRole",
Enabled = true,
Name = "Add a new customer role"
},
new() {
SystemKeyword = "AddNewDiscount",
Enabled = true,
Name = "Add a new discount"
},
new() {
SystemKeyword = "AddNewEmailAccount",
Enabled = true,
Name = "Add a new email account"
},
new() {
SystemKeyword = "AddNewGiftCard",
Enabled = true,
Name = "Add a new gift card"
},
new() {
SystemKeyword = "AddNewFilterLevelValue",
Enabled = true,
Name = "Add a new filter level value"
},
new() {
SystemKeyword = "AddNewLanguage",
Enabled = true,
Name = "Add a new language"
},
new() {
SystemKeyword = "AddNewManufacturer",
Enabled = true,
Name = "Add a new manufacturer"
},
new() {
SystemKeyword = "AddNewMeasureDimension",
Enabled = true,
Name = "Add a new measure dimension"
},
new() {
SystemKeyword = "AddNewMeasureWeight",
Enabled = true,
Name = "Add a new measure weight"
},
new() {
SystemKeyword = "AddNewNews",
Enabled = true,
Name = "Add a new news"
},
new() {
SystemKeyword = "AddNewProduct",
Enabled = true,
Name = "Add a new product"
},
new() {
SystemKeyword = "AddNewProductAttribute",
Enabled = true,
Name = "Add a new product attribute"
},
new() {
SystemKeyword = "AddNewSetting",
Enabled = true,
Name = "Add a new setting"
},
new() {
SystemKeyword = "AddNewSpecAttribute",
Enabled = true,
Name = "Add a new specification attribute"
},
new() {
SystemKeyword = "AddNewSpecAttributeGroup",
Enabled = true,
Name = "Add a new specification attribute group"
},
new() {
SystemKeyword = "AddNewStateProvince",
Enabled = true,
Name = "Add a new state or province"
},
new() {
SystemKeyword = "AddNewStore",
Enabled = true,
Name = "Add a new store"
},
new() {
SystemKeyword = "AddNewMenu",
Enabled = true,
Name = "Add a new menu"
},
new() {
SystemKeyword = "AddNewMenuItem",
Enabled = true,
Name = "Add a new menu item"
},
new() {
SystemKeyword = "AddNewTopic",
Enabled = true,
Name = "Add a new topic"
},
new() {
SystemKeyword = "AddNewReviewType",
Enabled = true,
Name = "Add a new review type"
},
new() {
SystemKeyword = "AddNewVendor",
Enabled = true,
Name = "Add a new vendor"
},
new() {
SystemKeyword = "AddNewVendorAttribute",
Enabled = true,
Name = "Add a new vendor attribute"
},
new() {
SystemKeyword = "AddNewVendorAttributeValue",
Enabled = true,
Name = "Add a new vendor attribute value"
},
new() {
SystemKeyword = "AddNewWarehouse",
Enabled = true,
Name = "Add a new warehouse"
},
new() {
SystemKeyword = "AddNewWidget",
Enabled = true,
Name = "Add a new widget"
},
new() {
SystemKeyword = "AddSubscriptionType",
Enabled = true,
Name = "Add a new subscription type"
},
new() {
SystemKeyword = "DeleteActivityLog",
Enabled = true,
Name = "Delete activity log"
},
new() {
SystemKeyword = "DeleteAddressAttribute",
Enabled = true,
Name = "Delete an address attribute"
},
new() {
SystemKeyword = "DeleteAddressAttributeValue",
Enabled = true,
Name = "Delete an address attribute value"
},
new() {
SystemKeyword = "DeleteAffiliate",
Enabled = true,
Name = "Delete an affiliate"
},
new() {
SystemKeyword = "DeleteBlogPost",
Enabled = true,
Name = "Delete a blog post"
},
new() {
SystemKeyword = "DeleteBlogPostComment",
Enabled = true,
Name = "Delete a blog post comment"
},
new() {
SystemKeyword = "DeleteCampaign",
Enabled = true,
Name = "Delete a campaign"
},
new() {
SystemKeyword = "DeleteCategory",
Enabled = true,
Name = "Delete category"
},
new() {
SystemKeyword = "DeleteCheckoutAttribute",
Enabled = true,
Name = "Delete a checkout attribute"
},
new() {
SystemKeyword = "DeleteCountry",
Enabled = true,
Name = "Delete a country"
},
new() {
SystemKeyword = "DeleteCurrency",
Enabled = true,
Name = "Delete a currency"
},
new() {
SystemKeyword = "DeleteCustomer",
Enabled = true,
Name = "Delete a customer"
},
new() {
SystemKeyword = "DeleteCustomerAttribute",
Enabled = true,
Name = "Delete a customer attribute"
},
new() {
SystemKeyword = "DeleteCustomerAttributeValue",
Enabled = true,
Name = "Delete a customer attribute value"
},
new() {
SystemKeyword = "DeleteCustomerRole",
Enabled = true,
Name = "Delete a customer role"
},
new() {
SystemKeyword = "DeleteDiscount",
Enabled = true,
Name = "Delete a discount"
},
new() {
SystemKeyword = "DeleteEmailAccount",
Enabled = true,
Name = "Delete an email account"
},
new () {
SystemKeyword = "DeleteFilterLevelValue",
Enabled = true,
Name = "Delete a filter level value"
},
new() {
SystemKeyword = "DeleteGiftCard",
Enabled = true,
Name = "Delete a gift card"
},
new() {
SystemKeyword = "DeleteLanguage",
Enabled = true,
Name = "Delete a language"
},
new() {
SystemKeyword = "DeleteManufacturer",
Enabled = true,
Name = "Delete a manufacturer"
},
new() {
SystemKeyword = "DeleteMeasureDimension",
Enabled = true,
Name = "Delete a measure dimension"
},
new() {
SystemKeyword = "DeleteMeasureWeight",
Enabled = true,
Name = "Delete a measure weight"
},
new() {
SystemKeyword = "DeleteMessageTemplate",
Enabled = true,
Name = "Delete a message template"
},
new() {
SystemKeyword = "DeleteNews",
Enabled = true,
Name = "Delete a news"
},
new() {
SystemKeyword = "DeleteNewsComment",
Enabled = true,
Name = "Delete a news comment"
},
new() {
SystemKeyword = "DeleteOrder",
Enabled = true,
Name = "Delete an order"
},
new() {
SystemKeyword = "DeletePlugin",
Enabled = true,
Name = "Delete a plugin"
},
new() {
SystemKeyword = "DeleteProduct",
Enabled = true,
Name = "Delete a product"
},
new() {
SystemKeyword = "DeleteProductAttribute",
Enabled = true,
Name = "Delete a product attribute"
},
new() {
SystemKeyword = "DeleteProductReview",
Enabled = true,
Name = "Delete a product review"
},
new() {
SystemKeyword = "DeleteReturnRequest",
Enabled = true,
Name = "Delete a return request"
},
new() {
SystemKeyword = "DeleteReviewType",
Enabled = true,
Name = "Delete a review type"
},
new() {
SystemKeyword = "DeleteSetting",
Enabled = true,
Name = "Delete a setting"
},
new() {
SystemKeyword = "DeleteSpecAttribute",
Enabled = true,
Name = "Delete a specification attribute"
},
new() {
SystemKeyword = "DeleteSpecAttributeGroup",
Enabled = true,
Name = "Delete a specification attribute group"
},
new() {
SystemKeyword = "DeleteStateProvince",
Enabled = true,
Name = "Delete a state or province"
},
new() {
SystemKeyword = "DeleteStore",
Enabled = true,
Name = "Delete a store"
},
new() {
SystemKeyword = "DeleteSubscriptionType",
Enabled = true,
Name = "Delete a subscription type"
},
new() {
SystemKeyword = "DeleteSystemLog",
Enabled = true,
Name = "Delete system log"
},
new() {
SystemKeyword = "DeleteTopic",
Enabled = true,
Name = "Delete a topic"
},
new() {
SystemKeyword = "DeleteMenu",
Enabled = true,
Name = "Delete a menu"
},
new() {
SystemKeyword = "DeleteMenuItem",
Enabled = true,
Name = "Delete a menu item"
},
new() {
SystemKeyword = "DeleteVendor",
Enabled = true,
Name = "Delete a vendor"
},
new() {
SystemKeyword = "DeleteVendorAttribute",
Enabled = true,
Name = "Delete a vendor attribute"
},
new() {
SystemKeyword = "DeleteVendorAttributeValue",
Enabled = true,
Name = "Delete a vendor attribute value"
},
new() {
SystemKeyword = "DeleteWarehouse",
Enabled = true,
Name = "Delete a warehouse"
},
new() {
SystemKeyword = "DeleteWidget",
Enabled = true,
Name = "Delete a widget"
},
new() {
SystemKeyword = "EditActivityLogTypes",
Enabled = true,
Name = "Edit activity log types"
},
new() {
SystemKeyword = "EditAddressAttribute",
Enabled = true,
Name = "Edit an address attribute"
},
new() {
SystemKeyword = "EditAddressAttributeValue",
Enabled = true,
Name = "Edit an address attribute value"
},
new() {
SystemKeyword = "EditAffiliate",
Enabled = true,
Name = "Edit an affiliate"
},
new() {
SystemKeyword = "EditBlogPost",
Enabled = true,
Name = "Edit a blog post"
},
new() {
SystemKeyword = "EditCampaign",
Enabled = true,
Name = "Edit a campaign"
},
new() {
SystemKeyword = "EditCategory",
Enabled = true,
Name = "Edit category"
},
new() {
SystemKeyword = "EditCheckoutAttribute",
Enabled = true,
Name = "Edit a checkout attribute"
},
new() {
SystemKeyword = "EditCountry",
Enabled = true,
Name = "Edit a country"
},
new() {
SystemKeyword = "EditCurrency",
Enabled = true,
Name = "Edit a currency"
},
new() {
SystemKeyword = "EditCustomer",
Enabled = true,
Name = "Edit a customer"
},
new() {
SystemKeyword = "EditCustomerAttribute",
Enabled = true,
Name = "Edit a customer attribute"
},
new() {
SystemKeyword = "EditCustomerAttributeValue",
Enabled = true,
Name = "Edit a customer attribute value"
},
new() {
SystemKeyword = "EditCustomerRole",
Enabled = true,
Name = "Edit a customer role"
},
new() {
SystemKeyword = "EditDiscount",
Enabled = true,
Name = "Edit a discount"
},
new() {
SystemKeyword = "EditEmailAccount",
Enabled = true,
Name = "Edit an email account"
},
new() {
SystemKeyword = "EditFilterLevelValue",
Enabled = true,
Name = "Edit a filter level value"
},
new() {
SystemKeyword = "EditGiftCard",
Enabled = true,
Name = "Edit a gift card"
},
new() {
SystemKeyword = "EditLanguage",
Enabled = true,
Name = "Edit a language"
},
new() {
SystemKeyword = "EditManufacturer",
Enabled = true,
Name = "Edit a manufacturer"
},
new() {
SystemKeyword = "EditMeasureDimension",
Enabled = true,
Name = "Edit a measure dimension"
},
new() {
SystemKeyword = "EditMeasureWeight",
Enabled = true,
Name = "Edit a measure weight"
},
new() {
SystemKeyword = "EditMessageTemplate",
Enabled = true,
Name = "Edit a message template"
},
new() {
SystemKeyword = "EditNews",
Enabled = true,
Name = "Edit a news"
},
new() {
SystemKeyword = "EditOrder",
Enabled = true,
Name = "Edit an order"
},
new() {
SystemKeyword = "EditPlugin",
Enabled = true,
Name = "Edit a plugin"
},
new() {
SystemKeyword = "EditProduct",
Enabled = true,
Name = "Edit a product"
},
new() {
SystemKeyword = "EditProductAttribute",
Enabled = true,
Name = "Edit a product attribute"
},
new() {
SystemKeyword = "EditProductReview",
Enabled = true,
Name = "Edit a product review"
},
new() {
SystemKeyword = "EditPromotionProviders",
Enabled = true,
Name = "Edit promotion providers"
},
new() {
SystemKeyword = "EditReturnRequest",
Enabled = true,
Name = "Edit a return request"
},
new() {
SystemKeyword = "EditReviewType",
Enabled = true,
Name = "Edit a review type"
},
new() {
SystemKeyword = "EditSettings",
Enabled = true,
Name = "Edit setting(s)"
},
new() {
SystemKeyword = "EditStateProvince",
Enabled = true,
Name = "Edit a state or province"
},
new() {
SystemKeyword = "EditStore",
Enabled = true,
Name = "Edit a store"
},
new() {
SystemKeyword = "EditSubscriptionType",
Enabled = true,
Name = "Edit a subscription type"
},
new() {
SystemKeyword = "EditTask",
Enabled = true,
Name = "Edit a task"
},
new() {
SystemKeyword = "EditSpecAttribute",
Enabled = true,
Name = "Edit a specification attribute"
},
new() {
SystemKeyword = "EditSpecAttributeGroup",
Enabled = true,
Name = "Edit a specification attribute group"
},
new() {
SystemKeyword = "EditVendor",
Enabled = true,
Name = "Edit a vendor"
},
new() {
SystemKeyword = "EditVendorAttribute",
Enabled = true,
Name = "Edit a vendor attribute"
},
new() {
SystemKeyword = "EditVendorAttributeValue",
Enabled = true,
Name = "Edit a vendor attribute value"
},
new() {
SystemKeyword = "EditWarehouse",
Enabled = true,
Name = "Edit a warehouse"
},
new() {
SystemKeyword = "EditMenu",
Enabled = true,
Name = "Edit a menu"
},
new() {
SystemKeyword = "EditMenuItem",
Enabled = true,
Name = "Edit a menu item"
},
new() {
SystemKeyword = "EditTopic",
Enabled = true,
Name = "Edit a topic"
},
new() {
SystemKeyword = "EditWidget",
Enabled = true,
Name = "Edit a widget"
},
new() {
SystemKeyword = "Impersonation.Started",
Enabled = true,
Name = "Customer impersonation session. Started"
},
new() {
SystemKeyword = "Impersonation.Finished",
Enabled = true,
Name = "Customer impersonation session. Finished"
},
new() {
SystemKeyword = "ImportCategories",
Enabled = true,
Name = "Categories were imported"
},
new() {
SystemKeyword = "ImportFilterLevelValues",
Enabled = true,
Name = "Import filter level values"
},
new() {
SystemKeyword = "ImportManufacturers",
Enabled = true,
Name = "Manufacturers were imported"
},
new() {
SystemKeyword = "ImportProducts",
Enabled = true,
Name = "Products were imported"
},
new() {
SystemKeyword = "ImportCustomers",
Enabled = true,
Name = "Customers were imported"
},
new() {
SystemKeyword = "ImportNewsLetterSubscriptions",
Enabled = true,
Name = "Newsletter subscriptions were imported"
},
new() {
SystemKeyword = "ImportStates",
Enabled = true,
Name = "States were imported"
},
new() {
SystemKeyword = "ExportCustomers",
Enabled = true,
Name = "Customers were exported"
},
new() {
SystemKeyword = "ExportCategories",
Enabled = true,
Name = "Categories were exported"
},
new () {
SystemKeyword = "ExportFilterLevelValues",
Enabled = true,
Name = "Export filter level values"
},
new() {
SystemKeyword = "ExportManufacturers",
Enabled = true,
Name = "Manufacturers were exported"
},
new() {
SystemKeyword = "ExportProducts",
Enabled = true,
Name = "Products were exported"
},
new() {
SystemKeyword = "ExportOrders",
Enabled = true,
Name = "Orders were exported"
},
new() {
SystemKeyword = "ExportStates",
Enabled = true,
Name = "States were exported"
},
new() {
SystemKeyword = "ExportNewsLetterSubscriptions",
Enabled = true,
Name = "Newsletter subscriptions were exported"
},
new() {
SystemKeyword = "InstallNewPlugin",
Enabled = true,
Name = "Install a new plugin"
},
new() {
SystemKeyword = "UninstallPlugin",
Enabled = true,
Name = "Uninstall a plugin"
},
new() {
SystemKeyword = "UpdatePlugin",
Enabled = true,
Name = "Update a plugin"
},
//public store activities
new() {
SystemKeyword = "PublicStore.ViewCategory",
Enabled = false,
Name = "Public store. View a category"
},
new() {
SystemKeyword = "PublicStore.ViewManufacturer",
Enabled = false,
Name = "Public store. View a manufacturer"
},
new() {
SystemKeyword = "PublicStore.ViewProduct",
Enabled = false,
Name = "Public store. View a product"
},
new() {
SystemKeyword = "PublicStore.PlaceOrder",
Enabled = false,
Name = "Public store. Place an order"
},
new() {
SystemKeyword = "PublicStore.SendPM",
Enabled = false,
Name = "Public store. Send PM"
},
new() {
SystemKeyword = "PublicStore.ContactUs",
Enabled = false,
Name = "Public store. Use contact us form"
},
new() {
SystemKeyword = "PublicStore.AddToCompareList",
Enabled = false,
Name = "Public store. Add to compare list"
},
new() {
SystemKeyword = "PublicStore.AddToShoppingCart",
Enabled = false,
Name = "Public store. Add to shopping cart"
},
new() {
SystemKeyword = "PublicStore.AddToWishlist",
Enabled = false,
Name = "Public store. Add to wishlist"
},
new() {
SystemKeyword = "PublicStore.SuccessfulLogin",
Enabled = false,
Name = "Public store. Successful login"
},
new() {
SystemKeyword = "PublicStore.FailedLogin",
Enabled = false,
Name = "Public store. Failed login"
},
new() {
SystemKeyword = "PublicStore.Logout",
Enabled = false,
Name = "Public store. Logout"
},
new() {
SystemKeyword = "PublicStore.AddProductReview",
Enabled = false,
Name = "Public store. Add product review"
},
new() {
SystemKeyword = "PublicStore.AddNewsComment",
Enabled = false,
Name = "Public store. Add news comment"
},
new() {
SystemKeyword = "PublicStore.AddBlogComment",
Enabled = false,
Name = "Public store. Add blog comment"
},
new() {
SystemKeyword = "PublicStore.AddForumTopic",
Enabled = false,
Name = "Public store. Add forum topic"
},
new() {
SystemKeyword = "PublicStore.EditForumTopic",
Enabled = false,
Name = "Public store. Edit forum topic"
},
new() {
SystemKeyword = "PublicStore.DeleteForumTopic",
Enabled = false,
Name = "Public store. Delete forum topic"
},
new() {
SystemKeyword = "PublicStore.AddForumPost",
Enabled = false,
Name = "Public store. Add forum post"
},
new() {
SystemKeyword = "PublicStore.EditForumPost",
Enabled = false,
Name = "Public store. Edit forum post"
},
new() {
SystemKeyword = "PublicStore.DeleteForumPost",
Enabled = false,
Name = "Public store. Delete forum post"
},
new() {
SystemKeyword = "UploadNewPlugin",
Enabled = true,
Name = "Upload a plugin"
},
new() {
SystemKeyword = "UploadNewTheme",
Enabled = true,
Name = "Upload a theme"
},
new() {
SystemKeyword = "UploadIcons",
Enabled = true,
Name = "Upload a favicon and app icons"
}
};
await _dataProvider.BulkInsertEntitiesAsync(activityLogTypes);
}
///
/// Installs a default product templates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallProductTemplatesAsync()
{
var productTemplates = new List
{
new() {
Name = "Simple product",
ViewPath = "ProductTemplate.Simple",
DisplayOrder = 10,
IgnoredProductTypes = ((int)ProductType.GroupedProduct).ToString()
},
new() {
Name = "Grouped product (with variants)",
ViewPath = "ProductTemplate.Grouped",
DisplayOrder = 100,
IgnoredProductTypes = ((int)ProductType.SimpleProduct).ToString()
}
};
await _dataProvider.BulkInsertEntitiesAsync(productTemplates);
}
///
/// Installs a default category templates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallCategoryTemplatesAsync()
{
var categoryTemplates = new List
{
new() {
Name = "Products in Grid or Lines",
ViewPath = "CategoryTemplate.ProductsInGridOrLines",
DisplayOrder = 1
}
};
await _dataProvider.BulkInsertEntitiesAsync(categoryTemplates);
}
///
/// Installs a default manufacturer templates
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallManufacturerTemplatesAsync()
{
var manufacturerTemplates = new List
{
new() {
Name = "Products in Grid or Lines",
ViewPath = "ManufacturerTemplate.ProductsInGridOrLines",
DisplayOrder = 1
}
};
await _dataProvider.BulkInsertEntitiesAsync(manufacturerTemplates);
}
///
/// Installs a default schedule tasks
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallScheduleTasksAsync()
{
var lastEnabledUtc = DateTime.UtcNow;
var tasks = new List
{
new() {
Name = "Send emails",
Seconds = 60,
Type = "Nop.Services.Messages.QueuedMessagesSendTask, Nop.Services",
Enabled = true,
LastEnabledUtc = lastEnabledUtc,
StopOnError = false
},
new() {
Name = "Keep alive",
Seconds = 300,
Type = "Nop.Services.Common.KeepAliveTask, Nop.Services",
Enabled = true,
LastEnabledUtc = lastEnabledUtc,
StopOnError = false
},
new() {
Name = nameof(ResetLicenseCheckTask),
Seconds = 2073600,
Type = "Nop.Services.Common.ResetLicenseCheckTask, Nop.Services",
Enabled = true,
LastEnabledUtc = lastEnabledUtc,
StopOnError = false
},
new() {
Name = "Delete guests",
Seconds = 600,
Type = "Nop.Services.Customers.DeleteGuestsTask, Nop.Services",
Enabled = true,
LastEnabledUtc = lastEnabledUtc,
StopOnError = false
},
new() {
Name = "Clear cache",
Seconds = 600,
Type = "Nop.Services.Caching.ClearCacheTask, Nop.Services",
Enabled = false,
StopOnError = false
},
new() {
Name = "Clear log",
//60 minutes
Seconds = 3600,
Type = "Nop.Services.Logging.ClearLogTask, Nop.Services",
Enabled = false,
StopOnError = false
},
new() {
Name = "Update currency exchange rates",
//60 minutes
Seconds = 3600,
Type = "Nop.Services.Directory.UpdateExchangeRateTask, Nop.Services",
Enabled = true,
LastEnabledUtc = lastEnabledUtc,
StopOnError = false
},
new() {
Name = "Delete inactive customers (GDPR)",
//24 hours
Seconds = 86400,
Type = "Nop.Services.Gdpr.DeleteInactiveCustomersTask, Nop.Services",
Enabled = false,
StopOnError = false
}
};
await _dataProvider.BulkInsertEntitiesAsync(tasks);
}
///
/// Installs a default reasons of return request
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallReturnRequestReasonsAsync()
{
var returnRequestReasons = new List
{
new() {
Name = "Received Wrong Product",
DisplayOrder = 1
},
new() {
Name = "Wrong Product Ordered",
DisplayOrder = 2
},
new() {
Name = "There Was A Problem With The Product",
DisplayOrder = 3
}
};
await _dataProvider.BulkInsertEntitiesAsync(returnRequestReasons);
}
///
/// Installs a default actions for return request
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallReturnRequestActionsAsync()
{
var returnRequestActions = new List
{
new() {
Name = "Repair",
DisplayOrder = 1
},
new() {
Name = "Replacement",
DisplayOrder = 2
},
new() {
Name = "Store Credit",
DisplayOrder = 3
}
};
await _dataProvider.BulkInsertEntitiesAsync(returnRequestActions);
}
///
/// Installs menus
///
/// A task that represents the asynchronous operation
protected virtual async Task InstallMenusAsync()
{
await _dataProvider.InsertEntityAsync(new Menu
{
Name = "Categories",
MenuType = MenuType.Main,
DisplayAllCategories = true,
Published = _installationSettings.InstallSampleData
});
var standardMainMenu = await _dataProvider.InsertEntityAsync(new Menu
{
Name = "Menu",
MenuType = MenuType.Main,
DisplayOrder = 0,
DisplayAllCategories = false,
Published = !_installationSettings.InstallSampleData
});
await _dataProvider.BulkInsertEntitiesAsync(
[
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.HOMEPAGE,
Title = "Home page",
Published = true
},
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.NEW_PRODUCTS,
Title = "New products",
Published = true
},
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.SEARCH,
Title = "Search",
Published = true
},
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CUSTOMER_INFO,
Title = "My account",
Published = true
},
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.BLOG,
Title = "Blog",
Published = true
},
new MenuItem
{
MenuId = standardMainMenu.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CONTACT_US,
Title = "Contact us",
Published = true
}
]);
var footerInformation = await _dataProvider.InsertEntityAsync(new Menu
{
Name = "Information",
MenuType = MenuType.Footer,
DisplayOrder = 0,
Published = true
});
await _dataProvider.BulkInsertEntitiesAsync(
[
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.SITEMAP,
Title = "Sitemap",
Published = true
},
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.TopicPage,
EntityId = Table().FirstOrDefault(t => t.SystemName == "ShippingInfo")?.Id,
Published = true
},
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.TopicPage,
EntityId = Table().FirstOrDefault(t => t.SystemName == "PrivacyInfo")?.Id,
Published = true
},
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.TopicPage,
EntityId = Table().FirstOrDefault(t => t.SystemName == "ConditionsOfUse")?.Id,
Published = true
},
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.TopicPage,
EntityId = Table().FirstOrDefault(t => t.SystemName == "AboutUs")?.Id,
Published = true
},
new MenuItem
{
MenuId = footerInformation.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CONTACT_US,
Title = "Contact us",
Published = true
},
]);
var footerCustomerService = await _dataProvider.InsertEntityAsync(new Menu
{
Name = "Customer service",
MenuType = MenuType.Footer,
DisplayOrder = 1,
Published = true
});
await _dataProvider.BulkInsertEntitiesAsync(
[
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.SEARCH,
Title = "Search",
Published = true
},
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.NEWS,
Title = "News",
Published = true
},
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.BLOG,
Title = "Blog",
Published = true
},
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.RECENTLY_VIEWED_PRODUCTS,
Title = "Recently viewed products",
Published = true
},
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.COMPARE_PRODUCTS,
Title = "Compare products list",
Published = true
},
new MenuItem
{
MenuId = footerCustomerService.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.NEW_PRODUCTS,
Title = "New products",
Published = true
},
]);
var footerMyAccount = await _dataProvider.InsertEntityAsync(new Menu
{
Name = "My account",
MenuType = MenuType.Footer,
DisplayOrder = 2,
Published = true
});
await _dataProvider.BulkInsertEntitiesAsync(
[
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CUSTOMER_INFO,
Title = "My account",
Published = true
},
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CUSTOMER_ORDERS,
Title = "Orders",
Published = true
},
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CUSTOMER_ADDRESSES,
Title = "Addresses",
Published = true
},
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.CART,
Title = "Shopping cart",
Published = true
},
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.WISHLIST,
Title = "Wishlist",
Published = true
},
new MenuItem
{
MenuId = footerMyAccount.Id,
MenuItemType = MenuItemType.StandardPage,
RouteName = NopRouteNames.General.APPLY_VENDOR_ACCOUNT,
Title = "Apply for vendor account",
Published = true
},
]);
}
#endregion
}