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);
        }
示例#6
0
 public static string NewsLetterEditionRemove(this UrlHelper urlHelper, NewsletterEditionPart newsletterEditionPart)
 {
     return(urlHelper.Action("Remove", "NewsLetterEditionAdmin", new { newsletterEditionId = newsletterEditionPart.Id, area = "Laser.Orchard.NewsLetters" }));
 }
示例#7
0
 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" }));
 }