public void Can_save_and_load_messageTemplate() { var mt = new MessageTemplate() { Name = "Template1", BccEmailAddresses = "Bcc", Subject = "Subj", Body = "Some text", IsActive = true, EmailAccountId = 1, LimitedToStores = true }; var fromDb = SaveAndLoadEntity(mt); fromDb.ShouldNotBeNull(); fromDb.Name.ShouldEqual("Template1"); fromDb.BccEmailAddresses.ShouldEqual("Bcc"); fromDb.Subject.ShouldEqual("Subj"); fromDb.Body.ShouldEqual("Some text"); fromDb.IsActive.ShouldBeTrue(); fromDb.LimitedToStores.ShouldBeTrue(); fromDb.EmailAccountId.ShouldEqual(1); }
/// <summary> /// Delete a message template /// </summary> /// <param name="messageTemplate">Message template</param> public virtual void DeleteMessageTemplate(MessageTemplate messageTemplate) { if (messageTemplate == null) throw new ArgumentNullException("messageTemplate"); _messageTemplateRepository.Delete(messageTemplate); _cacheManager.RemoveByPattern(MESSAGETEMPLATES_PATTERN_KEY); //event notification _eventPublisher.EntityDeleted(messageTemplate); }
/// <summary> /// Create a copy of message template with all depended data /// </summary> /// <param name="messageTemplate">Message template</param> /// <returns>Message template copy</returns> public virtual MessageTemplate CopyMessageTemplate(MessageTemplate messageTemplate) { if (messageTemplate == null) throw new ArgumentNullException("messageTemplate"); var mtCopy = new MessageTemplate { Name = messageTemplate.Name, BccEmailAddresses = messageTemplate.BccEmailAddresses, Subject = messageTemplate.Subject, Body = messageTemplate.Body, IsActive = messageTemplate.IsActive, EmailAccountId = messageTemplate.EmailAccountId, LimitedToStores = messageTemplate.LimitedToStores // INFO: we do not copy attachments }; InsertMessageTemplate(mtCopy); var languages = _languageService.GetAllLanguages(true); // localization foreach (var lang in languages) { var bccEmailAddresses = messageTemplate.GetLocalized(x => x.BccEmailAddresses, lang.Id, false, false); if (bccEmailAddresses.HasValue()) _localizedEntityService.SaveLocalizedValue(mtCopy, x => x.BccEmailAddresses, bccEmailAddresses, lang.Id); var subject = messageTemplate.GetLocalized(x => x.Subject, lang.Id, false, false); if (subject.HasValue()) _localizedEntityService.SaveLocalizedValue(mtCopy, x => x.Subject, subject, lang.Id); var body = messageTemplate.GetLocalized(x => x.Body, lang.Id, false, false); if (body.HasValue()) _localizedEntityService.SaveLocalizedValue(mtCopy, x => x.Body, subject, lang.Id); var emailAccountId = messageTemplate.GetLocalized(x => x.EmailAccountId, lang.Id, false, false); if (emailAccountId > 0) _localizedEntityService.SaveLocalizedValue(mtCopy, x => x.EmailAccountId, emailAccountId, lang.Id); } // store mapping var selectedStoreIds = _storeMappingService.GetStoresIdsWithAccess(messageTemplate); foreach (var id in selectedStoreIds) { _storeMappingService.InsertStoreMapping(mtCopy, id); } return mtCopy; }
protected int SendNotification( MessageTemplate messageTemplate, EmailAccount emailAccount, int languageId, IEnumerable<Token> tokens, string toEmailAddress, string toName, string replyTo = null, string replyToName = null) { // retrieve localized message template data var bcc = messageTemplate.GetLocalized((mt) => mt.BccEmailAddresses, languageId); var subject = messageTemplate.GetLocalized((mt) => mt.Subject, languageId); var body = messageTemplate.GetLocalized((mt) => mt.Body, languageId); // Replace subject and body tokens var subjectReplaced = _tokenizer.Replace(subject, tokens, false); var bodyReplaced = _tokenizer.Replace(body, tokens, true); bodyReplaced = WebHelper.MakeAllUrlsAbsolute(bodyReplaced, _httpRequest); var email = new QueuedEmail { Priority = 5, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = toEmailAddress, ToName = toName, CC = string.Empty, Bcc = bcc, ReplyTo = replyTo, ReplyToName = replyToName, Subject = subjectReplaced, Body = bodyReplaced, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id, SendManually = messageTemplate.SendManually }; _queuedEmailService.InsertQueuedEmail(email); return email.Id; }
protected EmailAccount GetEmailAccountOfMessageTemplate(MessageTemplate messageTemplate, int languageId) { var emailAccounId = messageTemplate.GetLocalized(mt => mt.EmailAccountId, languageId); var emailAccount = _emailAccountService.GetEmailAccountById(emailAccounId); if (emailAccount == null) emailAccount = _emailAccountService.GetEmailAccountById(_emailAccountSettings.DefaultEmailAccountId); if (emailAccount == null) emailAccount = _emailAccountService.GetAllEmailAccounts().FirstOrDefault(); return emailAccount; }
protected int SendNotification( MessageTemplate messageTemplate, EmailAccount emailAccount, int languageId, IList<Token> tokens, string toEmailAddress, string toName, string replyTo = null, string replyToName = null) { // retrieve localized message template data var bcc = messageTemplate.GetLocalized((mt) => mt.BccEmailAddresses, languageId); var subject = messageTemplate.GetLocalized((mt) => mt.Subject, languageId); var body = messageTemplate.GetLocalized((mt) => mt.Body, languageId); // Replace subject and body tokens var subjectReplaced = _tokenizer.Replace(subject, tokens, false); var bodyReplaced = _tokenizer.Replace(body, tokens, true); bodyReplaced = WebHelper.MakeAllUrlsAbsolute(bodyReplaced, _httpRequest); var email = new QueuedEmail { Priority = 5, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = toEmailAddress, ToName = toName, CC = string.Empty, Bcc = bcc, ReplyTo = replyTo, ReplyToName = replyToName, Subject = subjectReplaced, Body = bodyReplaced, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id, SendManually = messageTemplate.SendManually }; // create attachments if any var fileIds = (new int?[] { messageTemplate.GetLocalized(x => x.Attachment1FileId, languageId), messageTemplate.GetLocalized(x => x.Attachment2FileId, languageId), messageTemplate.GetLocalized(x => x.Attachment3FileId, languageId) }) .Where(x => x.HasValue) .Select(x => x.Value) .ToArray(); if (fileIds.Any()) { var files = _downloadServioce.GetDownloadsByIds(fileIds); foreach (var file in files) { email.Attachments.Add(new QueuedEmailAttachment { StorageLocation = EmailAttachmentStorageLocation.FileReference, FileId = file.Id, Name = (file.Filename.NullEmpty() ?? file.Id.ToString()) + file.Extension.EmptyNull(), MimeType = file.ContentType.NullEmpty() ?? "application/octet-stream" }); } } // publish event so that integrators can add attachments, alter the email etc. _eventPublisher.Publish(new QueuingEmailEvent { EmailAccount = emailAccount, LanguageId = languageId, MessageTemplate = messageTemplate, QueuedEmail = email, Tokens = tokens }); _queuedEmailService.InsertQueuedEmail(email); return email.Id; }
public static MessageTemplate ToEntity(this MessageTemplateModel model, MessageTemplate destination) { return Mapper.Map(model, destination); }
public void UpdateLocales(MessageTemplate mt, MessageTemplateModel model) { foreach (var localized in model.Locales) { _localizedEntityService.SaveLocalizedValue(mt, x => x.BccEmailAddresses, localized.BccEmailAddresses, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(mt, x => x.Subject, localized.Subject, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(mt, x => x.Body, localized.Body, localized.LanguageId); _localizedEntityService.SaveLocalizedValue(mt, x => x.EmailAccountId, localized.EmailAccountId, localized.LanguageId); } }
private void PrepareStoresMappingModel(MessageTemplateModel model, MessageTemplate messageTemplate, bool excludeProperties) { if (model == null) throw new ArgumentNullException("model"); model.AvailableStores = _storeService .GetAllStores() .Select(s => s.ToModel()) .ToList(); if (!excludeProperties) { if (messageTemplate != null) { model.SelectedStoreIds = _storeMappingService.GetStoresIdsWithAccess(messageTemplate); } else { model.SelectedStoreIds = new int[0]; } } }
protected void SaveStoreMappings(MessageTemplate messageTemplate, MessageTemplateModel model) { var existingStoreMappings = _storeMappingService.GetStoreMappings(messageTemplate); var allStores = _storeService.GetAllStores(); foreach (var store in allStores) { if (model.SelectedStoreIds != null && model.SelectedStoreIds.Contains(store.Id)) { //new role if (existingStoreMappings.Where(sm => sm.StoreId == store.Id).Count() == 0) _storeMappingService.InsertStoreMapping(messageTemplate, store.Id); } else { //removed role var storeMappingToDelete = existingStoreMappings.Where(sm => sm.StoreId == store.Id).FirstOrDefault(); if (storeMappingToDelete != null) _storeMappingService.DeleteStoreMapping(storeMappingToDelete); } } }
public void UpdateLocales(MessageTemplate mt, MessageTemplateModel model) { foreach (var localized in model.Locales) { int lid = localized.LanguageId; MediaHelper.UpdateDownloadTransientState(mt.GetLocalized(x => x.Attachment1FileId, lid, false, false), localized.Attachment1FileId, true); MediaHelper.UpdateDownloadTransientState(mt.GetLocalized(x => x.Attachment2FileId, lid, false, false), localized.Attachment2FileId, true); MediaHelper.UpdateDownloadTransientState(mt.GetLocalized(x => x.Attachment3FileId, lid, false, false), localized.Attachment3FileId, true); _localizedEntityService.SaveLocalizedValue(mt, x => x.BccEmailAddresses, localized.BccEmailAddresses, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.Subject, localized.Subject, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.Body, localized.Body, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.EmailAccountId, localized.EmailAccountId, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.Attachment1FileId, localized.Attachment1FileId, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.Attachment2FileId, localized.Attachment2FileId, lid); _localizedEntityService.SaveLocalizedValue(mt, x => x.Attachment3FileId, localized.Attachment3FileId, lid); } }
public MessageTokensAddedEvent(MessageTemplate message, IList <U> tokens) { _message = message; _tokens = tokens; }