-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added schedule task CompileRazorMessagesTask with install/uninstall
- Loading branch information
BeniGemperle
authored and
BeniGemperle
committed
Apr 7, 2017
1 parent
3a3445c
commit 1a9723d
Showing
8 changed files
with
272 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
using Nop.Core.Domain.Blogs; | ||
using Nop.Core.Domain.Catalog; | ||
using Nop.Core.Domain.Customers; | ||
using Nop.Core.Domain.Forums; | ||
using Nop.Core.Domain.Messages; | ||
using Nop.Core.Domain.News; | ||
using Nop.Core.Domain.Orders; | ||
using Nop.Core.Domain.Shipping; | ||
using Nop.Core.Domain.Stores; | ||
using Nop.Core.Domain.Vendors; | ||
|
||
namespace ToSic.Nop.Plugins.RazorMessageService | ||
{ | ||
/// <summary> | ||
/// Model used to generate DummyMessage | ||
/// </summary> | ||
/// <remarks>Must be public so it can be accessed by RazorEngine!</remarks> | ||
public class DummyMessageModel | ||
{ | ||
public Store Store { get; set; } = new Store(); | ||
public BlogComment BlogComment { get; set; } = new BlogComment(); | ||
public Customer Customer { get; set; } = new Customer(); | ||
public BackInStockSubscription BackInStockSubscription { get; set; } = new BackInStockSubscription(); | ||
public OrderNote OrderNote { get; set; } = new OrderNote(); | ||
public Order Order { get; set; } = new Order(); | ||
public PrivateMessage PrivateMessage { get; set; } = new PrivateMessage(); | ||
public ForumPost ForumPost { get; set; } = new ForumPost(); | ||
public ForumTopic ForumTopic { get; set; } = new ForumTopic(); | ||
public Forum Forum { get; set; } = new Forum(); | ||
public GiftCard GiftCard { get; set; } = new GiftCard(); | ||
public ReturnRequest ReturnRequest { get; set; } = new ReturnRequest(); | ||
public OrderItem OrderItem { get; set; } = new OrderItem(); | ||
public NewsComment NewsComment { get; set; } = new NewsComment(); | ||
public NewsLetterSubscription Subscription { get; set; } = new NewsLetterSubscription(); | ||
public string VatName { get; set; } = string.Empty; | ||
public string VatAddress { get; set; } = string.Empty; | ||
public Vendor Vendor { get; set; } = new Vendor(); | ||
public decimal RefundedAmount { get; set; } = 0m; | ||
public ProductReview ProductReview { get; set; } = new ProductReview(); | ||
public Product Product { get; set; } = new Product(); | ||
public RecurringPayment RecurringPayment { get; set; } = new RecurringPayment(); | ||
public string PersonalMessage { get; set; } = string.Empty; | ||
public string CustomerEmail { get; set; } = string.Empty; | ||
public Shipment Shipment { get; set; } = new Shipment(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,30 @@ | ||
using Nop.Core.Plugins; | ||
using Nop.Services.Tasks; | ||
using ToSic.Nop.Plugins.RazorMessageService.ScheduledTasks; | ||
|
||
namespace ToSic.Nop.Plugins.RazorMessageService | ||
{ | ||
public class RazorMessageServicePlugin : BasePlugin | ||
{ | ||
private readonly IScheduleTaskService _scheduleTaskService; | ||
|
||
public RazorMessageServicePlugin(IScheduleTaskService scheduleTaskService) | ||
{ | ||
_scheduleTaskService = scheduleTaskService; | ||
} | ||
|
||
public override void Install() | ||
{ | ||
CompileRazorMessagesTask.EnsureScheduleTask(_scheduleTaskService); | ||
|
||
base.Install(); | ||
} | ||
|
||
public override void Uninstall() | ||
{ | ||
CompileRazorMessagesTask.RemoveScheduleTask(_scheduleTaskService); | ||
|
||
base.Uninstall(); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
using System; | ||
using System.Linq; | ||
using System.Text; | ||
using Nop.Core.Domain.Logging; | ||
using Nop.Core.Domain.Messages; | ||
using Nop.Core.Domain.Tasks; | ||
using Nop.Services.Configuration; | ||
using Nop.Services.Localization; | ||
using Nop.Services.Logging; | ||
using Nop.Services.Messages; | ||
using Nop.Services.Stores; | ||
using Nop.Services.Tasks; | ||
using ToSic.Nop.Plugins.RazorMessageService.Services; | ||
|
||
namespace ToSic.Nop.Plugins.RazorMessageService.ScheduledTasks | ||
{ | ||
public class CompileRazorMessagesTask : ITask | ||
{ | ||
private readonly ILogger _logger; | ||
private readonly ILanguageService _languageService; | ||
private readonly IMessageTemplateService _messageTemplateService; | ||
private readonly IStoreService _storeService; | ||
private readonly ISettingService _settingService; | ||
private const string EventLogMessageStart = "Compile RazorMessages started"; | ||
private const string EventLogMessageCompleted = "Compile RazorMessages completed"; | ||
private const string EventLogMessageError = "Compile RazorMessages completed with errors"; | ||
|
||
public CompileRazorMessagesTask(ILogger logger, ILanguageService languageService, IMessageTemplateService messageTemplateService, IStoreService storeService, ISettingService settingService) | ||
{ | ||
_logger = logger; | ||
_languageService = languageService; | ||
_messageTemplateService = messageTemplateService; | ||
_storeService = storeService; | ||
_settingService = settingService; | ||
} | ||
|
||
public void Execute() | ||
{ | ||
var logMessage = new StringBuilder(); | ||
var loggingEnabled = _settingService.GetSettingByKey("razormessageservice.compiletask.enablelogging", false); | ||
if (loggingEnabled) | ||
_logger.InsertLog(LogLevel.Debug, EventLogMessageStart, logMessage.ToString()); | ||
|
||
try | ||
{ | ||
var stores = _storeService.GetAllStores(); | ||
var model = new DummyMessageModel(); | ||
|
||
foreach (var store in stores) | ||
{ | ||
var storeLanguages = _languageService.GetAllLanguages(storeId: store.Id); | ||
var activeMessageTemplates = _messageTemplateService.GetAllMessageTemplates(store.Id).Where(t => t.IsActive); | ||
model.Store = store; | ||
|
||
foreach (var messageTemplate in activeMessageTemplates) | ||
{ | ||
foreach (var language in storeLanguages) | ||
{ | ||
var subjectSuccess = false; | ||
var bodySuccess = false; | ||
|
||
try | ||
{ | ||
logMessage.AppendFormat("{2:HH:mm:ss} Will parse template {0} (Id: {1}) Language {3} (Id: {4})\n", messageTemplate.Name, messageTemplate.Id, DateTime.Now, language.Name, language.Id); | ||
ParseTemplate(messageTemplate, language.Id, model, out subjectSuccess, out bodySuccess); | ||
} | ||
catch (Exception ex) | ||
{ | ||
logMessage.AppendFormat("Failed: {0}\n", ex.Message); | ||
} | ||
|
||
logMessage.AppendFormat("Subject success: {0}, Body success: {1}\n", subjectSuccess, bodySuccess); | ||
} | ||
} | ||
} | ||
|
||
if (loggingEnabled) | ||
_logger.InsertLog(LogLevel.Debug, EventLogMessageCompleted, logMessage.ToString()); | ||
} | ||
catch (Exception ex) | ||
{ | ||
if (loggingEnabled) | ||
_logger.InsertLog(LogLevel.Error, EventLogMessageError, logMessage + ex.Message + " " + ex.StackTrace); | ||
} | ||
} | ||
|
||
private static void ParseTemplate(MessageTemplate messageTemplate, int languageId, dynamic model, out bool subjectSuccess, out bool bodySuccess) | ||
{ | ||
var subject = messageTemplate.GetLocalized(mt => mt.Subject, languageId); | ||
var body = messageTemplate.GetLocalized(mt => mt.Body, languageId); | ||
|
||
RazorTemplateParser.ParseSafe(messageTemplate.Id, subject, model, out subjectSuccess); | ||
|
||
RazorTemplateParser.ParseSafe(messageTemplate.Id, body, model, out bodySuccess); | ||
} | ||
|
||
#region Add/Remove ScheduleTask to/from ScheduleTaskService | ||
internal static void EnsureScheduleTask(IScheduleTaskService scheduleTaskService) | ||
{ | ||
string typeString; | ||
var task = GetScheduleTask(scheduleTaskService, out typeString); | ||
if (task == null) | ||
{ | ||
scheduleTaskService.InsertTask(new ScheduleTask | ||
{ | ||
Name = "Precompile RazorMessages", | ||
Seconds = 60, | ||
Enabled = true, | ||
Type = typeString | ||
}); | ||
} | ||
} | ||
|
||
private static ScheduleTask GetScheduleTask(IScheduleTaskService scheduleTaskService, out string typeString) | ||
{ | ||
var taskType = typeof(CompileRazorMessagesTask); | ||
typeString = taskType.FullName + ", " + taskType.Assembly.GetName().Name; | ||
return scheduleTaskService.GetTaskByType(typeString); | ||
} | ||
|
||
internal static void RemoveScheduleTask(IScheduleTaskService scheduleTaskService) | ||
{ | ||
string typeString; | ||
var task = GetScheduleTask(scheduleTaskService, out typeString); | ||
if (task != null) | ||
scheduleTaskService.DeleteTask(task); | ||
} | ||
#endregion | ||
} | ||
} |
Oops, something went wrong.