private ActionResult EditionSave(ref NewsletterEditionPart newsletterEdition) { _contentManager.Create(newsletterEdition, VersionOptions.Draft); dynamic model = _contentManager.UpdateEditor(newsletterEdition, this); if (!ModelState.IsValid) { _transactionManager.Cancel(); // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation. return(View((object)model)); } Services.ContentManager.Publish(newsletterEdition.ContentItem); return(null); }
public ActionResult Create(int newsletterId) { //if (!Services.Authorizer.Authorize(Permissions.ManageNewsletterEditions, T("Not allowed to create newsletters"))) // return new HttpUnauthorizedResult(); NewsletterEditionPart newsletterEdition = Services.ContentManager.New <NewsletterEditionPart>("NewsletterEdition"); if (newsletterEdition == null) { return(HttpNotFound()); } dynamic model = Services.ContentManager.BuildEditor(newsletterEdition); // Casting to avoid invalid (under medium trust) reflection over the protected View method and force a static invocation. return(View((object)model)); }
public void SendNewsletterEdition(ref NewsletterEditionPart newsletterEdition, string testEmail) { var urlHelper = new UrlHelper(_orchardServices.WorkContext.HttpContext.Request.RequestContext); var subscribers = GetSubscribers(newsletterEdition.NewsletterDefinitionPartRecord_Id).Where(w => w.Confirmed); int[] selectedAnnIds; IList <AnnouncementPart> items = null; IEnumerable <ExpandoObject> fullyItems; if (!String.IsNullOrWhiteSpace(newsletterEdition.AnnouncementIds)) { selectedAnnIds = !String.IsNullOrWhiteSpace(newsletterEdition.AnnouncementIds) ? newsletterEdition.AnnouncementIds.Split(',').Select(s => Convert.ToInt32(s)).ToArray() : null; items = GetAnnouncements(selectedAnnIds); fullyItems = items.Select( s => new { AnnouncementPart = s, DisplayUrl = urlHelper.ItemDisplayUrl(s) }.ToExpando()); } else { fullyItems = null; } var model = new { NewsletterEdition = newsletterEdition, ContentItems = fullyItems }.ToExpando(); //if (!isTest) { // if (_templateService.SendTemplatedEmail((dynamic)model, // GetNewsletterDefinition(newsletterEdition.NewsletterDefinitionPartRecord_Id,VersionOptions.Published).As<NewsletterDefinitionPart>().TemplateRecord_Id, // new List<string> { testEmail }, null, null, false, null)) { // // Aggiorno la newsletter edition, e rimuovo la relazione tra Newletter e Announcement // newsletterEdition.Dispatched = true; // newsletterEdition.DispatchDate = DateTime.Now; // newsletterEdition.Number = GetNextNumber(newsletterEdition.NewsletterDefinitionPartRecord_Id); ; // foreach (var item in items) { // var ids = ("," + item.AttachToNextNewsletterIds + ",").Replace("," + newsletterEdition.NewsletterDefinitionPartRecord_Id + ",", ""); // item.AttachToNextNewsletterIds = ids; // } // } //} if (!String.IsNullOrWhiteSpace(testEmail)) { string host = string.Format("{0}://{1}{2}", _orchardServices.WorkContext.HttpContext.Request.Url.Scheme, _orchardServices.WorkContext.HttpContext.Request.Url.Host, _orchardServices.WorkContext.HttpContext.Request.Url.Port == 80 ? string.Empty : ":" + _orchardServices.WorkContext.HttpContext.Request.Url.Port); // Place Holder List <TemplatePlaceHolderViewModel> listaPH = new List <TemplatePlaceHolderViewModel>(); string unsubscribe = T("Click here to unsubscribe").Text; string linkUnsubscribe = "<a href='" + string.Format("{0}{1}?newsletterId={2}", host, urlHelper.SubscriptionUnsubscribe(), newsletterEdition.NewsletterDefinitionPartRecord_Id) + "'>" + unsubscribe + "</a>"; TemplatePlaceHolderViewModel ph = new TemplatePlaceHolderViewModel(); ph.Name = "[UNSUBSCRIBE]"; ph.Value = linkUnsubscribe; ph.ShowForce = true; listaPH.Add(ph); if (_templateService.SendTemplatedEmail((dynamic)model, GetNewsletterDefinition(newsletterEdition.NewsletterDefinitionPartRecord_Id, VersionOptions.Published).As <NewsletterDefinitionPart>().TemplateRecord_Id, new List <string> { testEmail }, null, null, false, listaPH)) { _orchardServices.Notifier.Information(T("Newsletter edition sent to a test email!")); } } else if (String.IsNullOrWhiteSpace(testEmail)) { _orchardServices.Notifier.Error(T("Enter a test email!")); } }
public void Process(ScheduledTaskContext context) { if (context.Task.TaskType != TaskType) { return; } try { dynamic content = context.Task.ContentItem; NewsletterEditionPart part = context.Task.ContentItem.As <NewsletterEditionPart>(); _mailerConfig = _orchardServices.WorkContext.CurrentSite.As <MailerSiteSettingsPart>(); var urlHelper = _commonServices.GetUrlHelper(); int[] selectedAnnIds; IList <AnnouncementPart> items = null; IEnumerable <ExpandoObject> fullyItems; if (!String.IsNullOrWhiteSpace(part.AnnouncementIds)) { selectedAnnIds = !String.IsNullOrWhiteSpace(part.AnnouncementIds) ? part.AnnouncementIds.Split(',').Select(s => Convert.ToInt32(s)).ToArray() : null; items = GetAnnouncements(selectedAnnIds); fullyItems = items.Select( s => new { AnnouncementPart = s, DisplayUrl = urlHelper.ItemDisplayUrl(s) }.ToExpando()); } else { fullyItems = null; } var subscribers = _newslServices.GetSubscribers(part.NewsletterDefinitionPartRecord_Id).Where(w => w.Confirmed); var subscribersEmails = subscribers.Select(s => new { s.Id, s.Name, EmailAddress = s.Email }); List <object> listaSubscribers = new List <object>(subscribersEmails); // ricava i settings e li invia tramite FTP var templateId = _newslServices.GetNewsletterDefinition(part.NewsletterDefinitionPartRecord_Id, VersionOptions.Published).As <NewsletterDefinitionPart>().TemplateRecord_Id; var model = new { NewsletterEdition = content, ContentItems = fullyItems }.ToExpando(); Dictionary <string, object> settings = GetSettings(model, templateId, part); if ((settings.Count > 0) && (listaSubscribers.Count > 0)) { SendSettings(settings, part.Id); // impagina e invia i recipiens tramite FTP int pageNum = 0; List <object> pagina = new List <object>(); int pageSize = _mailerConfig.RecipientsPerJsonFile; for (int i = 0; i < listaSubscribers.Count; i++) { if (((i + 1) % pageSize) == 0) { SendRecipients(pagina, part.Id, pageNum); pageNum++; pagina = new List <object>(); } pagina.Add(listaSubscribers[i]); } // invia l'ultima pagina se non è vuota if (pagina.Count > 0) { SendRecipients(pagina, part.Id, pageNum); } // Aggiorno la newsletter edition, e rimuovo la relazione tra Newletter e Announcement part.Dispatched = true; part.DispatchDate = DateTime.Now; part.Number = GetNextNumber(part.NewsletterDefinitionPartRecord_Id);; if (items != null) { foreach (var item in items) { var ids = ("," + item.AttachToNextNewsletterIds + ",").Replace("," + part.NewsletterDefinitionPartRecord_Id + ",", ""); item.AttachToNextNewsletterIds = ids; } } _contentManager.Publish(context.Task.ContentItem); } else { Logger.Error(T("Error parsing mail template.").Text); } } catch (Exception ex) { string idcontenuto = "nessun id "; try { idcontenuto = context.Task.ContentItem.Id.ToString(); } catch (Exception ex2) { Logger.Error(ex2, ex2.Message); } Logger.Error(ex, "Error on " + TaskType + " for ContentItem id = " + idcontenuto + " : " + ex.Message); } }
private Dictionary <string, object> GetSettings(dynamic contentModel, int templateId, NewsletterEditionPart part) { var data = new Dictionary <string, object>(); var baseUri = new Uri(_orchardServices.WorkContext.CurrentSite.BaseUrl); var template = _templateService.GetTemplate(templateId); string body = _templateService.RitornaParsingTemplate(contentModel, templateId); if (!body.StartsWith("Error On Template")) { string host = string.Format("{0}://{1}{2}", baseUri.Scheme, baseUri.Host, baseUri.Port == 80 ? string.Empty : ":" + baseUri.Port); var urlHelper = _commonServices.GetUrlHelper(); // Add Link [UNSUBSCRIBE] string ph_Unsubscribe = "[UNSUBSCRIBE]"; string unsubscribe = T("Click here to unsubscribe").Text; string linkUnsubscribe = "<a href='" + string.Format("{0}{1}?newsletterId={2}", host, urlHelper.SubscriptionUnsubscribe(), part.NewsletterDefinitionPartRecord_Id) + "'>" + unsubscribe + "</a>"; if (body.Contains(ph_Unsubscribe)) { body = body.Replace(ph_Unsubscribe, linkUnsubscribe); } else { body += "<br /><br />" + linkUnsubscribe; } var subject = template.Subject; var smtp = _orchardServices.WorkContext.CurrentSite.As <SmtpSettingsPart>(); string priority = "L"; switch (_mailerConfig.MailPriority) { case MailPriorityValues.High: priority = "H"; break; case MailPriorityValues.Normal: priority = "N"; break; default: priority = "L"; break; } data.Add("Subject", subject); data.Add("Body", body); data.Add("Sender", smtp.Address); data.Add("Priority", priority); } return(data); }
public static string NewsLetterEditionRemove(this UrlHelper urlHelper, NewsletterEditionPart newsletterEditionPart) { return(urlHelper.Action("Remove", "NewsLetterEditionAdmin", new { newsletterEditionId = newsletterEditionPart.Id, area = "Laser.Orchard.NewsLetters" })); }
public static string NewsLetterEditionEdit(this UrlHelper urlHelper, int newsletterDefinitionPartId, NewsletterEditionPart newsletterEditionPart) { return(urlHelper.Action("Edit", "NewsLetterEditionAdmin", new { Id = newsletterEditionPart.Id, newsletterId = newsletterDefinitionPartId, area = "Laser.Orchard.NewsLetters" })); }