207 lines
7.9 KiB
C#
207 lines
7.9 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Nop.Core.Domain.Messages;
|
|
using Nop.Services.Helpers;
|
|
using Nop.Services.Localization;
|
|
using Nop.Services.Messages;
|
|
using Nop.Services.Security;
|
|
using Nop.Web.Areas.Admin.Factories;
|
|
using Nop.Web.Areas.Admin.Infrastructure.Mapper.Extensions;
|
|
using Nop.Web.Areas.Admin.Models.Messages;
|
|
using Nop.Web.Framework.Controllers;
|
|
using Nop.Web.Framework.Mvc.Filters;
|
|
|
|
namespace Nop.Web.Areas.Admin.Controllers;
|
|
|
|
public partial class QueuedEmailController : BaseAdminController
|
|
{
|
|
#region Fields
|
|
|
|
protected readonly IDateTimeHelper _dateTimeHelper;
|
|
protected readonly ILocalizationService _localizationService;
|
|
protected readonly INotificationService _notificationService;
|
|
protected readonly IPermissionService _permissionService;
|
|
protected readonly IQueuedEmailModelFactory _queuedEmailModelFactory;
|
|
protected readonly IQueuedEmailService _queuedEmailService;
|
|
|
|
#endregion
|
|
|
|
#region Ctor
|
|
|
|
public QueuedEmailController(IDateTimeHelper dateTimeHelper,
|
|
ILocalizationService localizationService,
|
|
INotificationService notificationService,
|
|
IPermissionService permissionService,
|
|
IQueuedEmailModelFactory queuedEmailModelFactory,
|
|
IQueuedEmailService queuedEmailService)
|
|
{
|
|
_dateTimeHelper = dateTimeHelper;
|
|
_localizationService = localizationService;
|
|
_notificationService = notificationService;
|
|
_permissionService = permissionService;
|
|
_queuedEmailModelFactory = queuedEmailModelFactory;
|
|
_queuedEmailService = queuedEmailService;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
public virtual IActionResult Index()
|
|
{
|
|
return RedirectToAction("List");
|
|
}
|
|
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> List()
|
|
{
|
|
//prepare model
|
|
var model = await _queuedEmailModelFactory.PrepareQueuedEmailSearchModelAsync(new QueuedEmailSearchModel());
|
|
|
|
return View(model);
|
|
}
|
|
|
|
[HttpPost]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> QueuedEmailList(QueuedEmailSearchModel searchModel)
|
|
{
|
|
//prepare model
|
|
var model = await _queuedEmailModelFactory.PrepareQueuedEmailListModelAsync(searchModel);
|
|
|
|
return Json(model);
|
|
}
|
|
|
|
[HttpPost, ActionName("List")]
|
|
[FormValueRequired("go-to-email-by-number")]
|
|
public virtual async Task<IActionResult> GoToEmailByNumber(QueuedEmailSearchModel model)
|
|
{
|
|
//try to get a queued email with the specified id
|
|
var queuedEmail = await _queuedEmailService.GetQueuedEmailByIdAsync(model.GoDirectlyToNumber);
|
|
if (queuedEmail == null)
|
|
return await List();
|
|
|
|
return RedirectToAction("Edit", "QueuedEmail", new { id = queuedEmail.Id });
|
|
}
|
|
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> Edit(int id)
|
|
{
|
|
//try to get a queued email with the specified id
|
|
var email = await _queuedEmailService.GetQueuedEmailByIdAsync(id);
|
|
if (email == null)
|
|
return RedirectToAction("List");
|
|
|
|
//prepare model
|
|
var model = await _queuedEmailModelFactory.PrepareQueuedEmailModelAsync(null, email);
|
|
|
|
return View(model);
|
|
}
|
|
|
|
[HttpPost, ActionName("Edit")]
|
|
[ParameterBasedOnFormName("save-continue", "continueEditing")]
|
|
[FormValueRequired("save", "save-continue")]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> Edit(QueuedEmailModel model, bool continueEditing)
|
|
{
|
|
//try to get a queued email with the specified id
|
|
var email = await _queuedEmailService.GetQueuedEmailByIdAsync(model.Id);
|
|
if (email == null)
|
|
return RedirectToAction("List");
|
|
|
|
if (ModelState.IsValid)
|
|
{
|
|
email = model.ToEntity(email);
|
|
email.DontSendBeforeDateUtc = model.SendImmediately || !model.DontSendBeforeDate.HasValue ?
|
|
null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.DontSendBeforeDate.Value);
|
|
await _queuedEmailService.UpdateQueuedEmailAsync(email);
|
|
|
|
_notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.QueuedEmails.Updated"));
|
|
|
|
return continueEditing ? RedirectToAction("Edit", new { id = email.Id }) : RedirectToAction("List");
|
|
}
|
|
|
|
//prepare model
|
|
model = await _queuedEmailModelFactory.PrepareQueuedEmailModelAsync(model, email, true);
|
|
|
|
//if we got this far, something failed, redisplay form
|
|
return View(model);
|
|
}
|
|
|
|
[HttpPost, ActionName("Edit"), FormValueRequired("requeue")]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> Requeue(QueuedEmailModel queuedEmailModel)
|
|
{
|
|
//try to get a queued email with the specified id
|
|
var queuedEmail = await _queuedEmailService.GetQueuedEmailByIdAsync(queuedEmailModel.Id);
|
|
if (queuedEmail == null)
|
|
return RedirectToAction("List");
|
|
|
|
var requeuedEmail = new QueuedEmail
|
|
{
|
|
PriorityId = queuedEmail.PriorityId,
|
|
From = queuedEmail.From,
|
|
FromName = queuedEmail.FromName,
|
|
To = queuedEmail.To,
|
|
ToName = queuedEmail.ToName,
|
|
ReplyTo = queuedEmail.ReplyTo,
|
|
ReplyToName = queuedEmail.ReplyToName,
|
|
CC = queuedEmail.CC,
|
|
Bcc = queuedEmail.Bcc,
|
|
Subject = queuedEmail.Subject,
|
|
Body = queuedEmail.Body,
|
|
AttachmentFilePath = queuedEmail.AttachmentFilePath,
|
|
AttachmentFileName = queuedEmail.AttachmentFileName,
|
|
AttachedDownloadId = queuedEmail.AttachedDownloadId,
|
|
CreatedOnUtc = DateTime.UtcNow,
|
|
EmailAccountId = queuedEmail.EmailAccountId,
|
|
DontSendBeforeDateUtc = queuedEmailModel.SendImmediately || !queuedEmailModel.DontSendBeforeDate.HasValue ?
|
|
null : (DateTime?)_dateTimeHelper.ConvertToUtcTime(queuedEmailModel.DontSendBeforeDate.Value)
|
|
};
|
|
await _queuedEmailService.InsertQueuedEmailAsync(requeuedEmail);
|
|
|
|
_notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.QueuedEmails.Requeued"));
|
|
|
|
return RedirectToAction("Edit", new { id = requeuedEmail.Id });
|
|
}
|
|
|
|
[HttpPost]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> Delete(int id)
|
|
{
|
|
//try to get a queued email with the specified id
|
|
var email = await _queuedEmailService.GetQueuedEmailByIdAsync(id);
|
|
if (email == null)
|
|
return RedirectToAction("List");
|
|
|
|
await _queuedEmailService.DeleteQueuedEmailAsync(email);
|
|
|
|
_notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.QueuedEmails.Deleted"));
|
|
|
|
return RedirectToAction("List");
|
|
}
|
|
|
|
[HttpPost]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> DeleteSelected(ICollection<int> selectedIds)
|
|
{
|
|
if (selectedIds == null || !selectedIds.Any())
|
|
return NoContent();
|
|
|
|
await _queuedEmailService.DeleteQueuedEmailsAsync(await _queuedEmailService.GetQueuedEmailsByIdsAsync(selectedIds.ToArray()));
|
|
|
|
return Json(new { Result = true });
|
|
}
|
|
|
|
[HttpPost, ActionName("List")]
|
|
[FormValueRequired("delete-all")]
|
|
[CheckPermission(StandardPermission.System.MANAGE_MESSAGE_QUEUE)]
|
|
public virtual async Task<IActionResult> DeleteAll()
|
|
{
|
|
await _queuedEmailService.DeleteAllEmailsAsync();
|
|
|
|
_notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.System.QueuedEmails.DeletedAll"));
|
|
|
|
return RedirectToAction("List");
|
|
}
|
|
|
|
#endregion
|
|
} |