public static string Failed(string message) { var status = new PostResult(); status.IsSuccess = false; status.MessageType = "warning"; status.MessageText = message; return(JsonConvert.SerializeObject(status)); }
public static string Success(string message) { var status = new PostResult(); status.IsSuccess = true; status.MessageType = "success"; status.MessageText = message; return(JsonConvert.SerializeObject(status)); }
public MailingModule() { this.RequiresAuthentication(); Get["/mailing"] = parameters => { return(View["View/mailing.sshtml", new MailingViewModel(Translator, CurrentSession)]); }; Get["/mailing/list"] = parameters => { return(View["View/mailinglist.sshtml", new MailingListViewModel(Translator, Database, CurrentSession)]); }; Get["/mailing/add"] = parameters => { return(View["View/mailingedit.sshtml", new MailingEditViewModel(Translator, Database, CurrentSession)]); }; Post["/mailing/add/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <MailingEditViewModel>(ReadBody()); var status = CreateStatus(); if (Guid.TryParse(idString, out Guid id)) { var mailing = new Mailing(id); status.AssignStringRequired("Title", mailing.Title, model.Title); status.AssignObjectIdString("RecipientFeed", mailing.RecipientFeed, model.RecipientFeed); status.AssignObjectIdString("RecipientTag", mailing.RecipientTag, model.RecipientTag); status.AssignEnumIntString("RecipientLanguage", mailing.RecipientLanguage, model.RecipientLanguage); status.AssignObjectIdString("SenderGroup", mailing.Sender, model.SenderGroup); status.AssignObjectIdString("Header", mailing.Header, model.Header); status.AssignObjectIdString("Footer", mailing.Footer, model.Footer); status.AssignStringRequired("Subject", mailing.Subject, model.Subject); var worker = new HtmlWorker(model.HtmlText); mailing.HtmlText.Value = worker.CleanHtml; mailing.PlainText.Value = worker.PlainText; mailing.Creator.Value = CurrentSession.User; if (status.IsSuccess) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { Database.Save(mailing); Notice("{0} added mailing {1}", CurrentSession.User.UserName.Value, mailing); } } } else { status.SetErrorNotFound(); } return(status.CreateJsonData()); }; Get["/mailing/edit/{id}"] = parameters => { string idString = parameters.id; var mailing = Database.Query <Mailing>(idString); if (mailing != null) { if (mailing.Status.Value == MailingStatus.New) { return(View["View/mailingedit.sshtml", new MailingEditViewModel(Translator, Database, CurrentSession, mailing)]); } else { return(View["View/mailingscheduled.sshtml", new MailingScheduledViewModel(Translator, Database, CurrentSession, mailing)]); } } return(Response.AsRedirect("/mailing")); }; Post["/mailing/edit/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <MailingEditViewModel>(ReadBody()); var mailing = Database.Query <Mailing>(idString); var status = CreateStatus(); if (status.ObjectNotNull(mailing)) { if (mailing.Status.Value == MailingStatus.New) { status.AssignStringRequired("Title", mailing.Title, model.Title); status.AssignObjectIdString("RecipientFeed", mailing.RecipientFeed, model.RecipientFeed); status.AssignObjectIdString("RecipientTag", mailing.RecipientTag, model.RecipientTag); status.AssignEnumIntString("RecipientLanguage", mailing.RecipientLanguage, model.RecipientLanguage); status.AssignObjectIdString("SenderGroup", mailing.Sender, model.SenderGroup); status.AssignObjectIdString("Header", mailing.Header, model.Header); status.AssignObjectIdString("Footer", mailing.Footer, model.Footer); status.AssignStringRequired("Subject", mailing.Subject, model.Subject); var worker = new HtmlWorker(model.HtmlText); mailing.HtmlText.Value = worker.CleanHtml; mailing.PlainText.Value = worker.PlainText; mailing.Creator.Value = CurrentSession.User; if (status.IsSuccess) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { Database.Save(mailing); Notice("{0} changed mailing {1}", CurrentSession.User.UserName.Value, mailing); } } } else { status.SetErrorAccessDenied(); } } return(status.CreateJsonData()); }; Post["/mailing/test"] = parameters => { var model = JsonConvert.DeserializeObject <MailingEditViewModel>(ReadBody()); var worker = new HtmlWorker(model.HtmlText); var header = Database.Query <MailingElement>(model.Header); var footer = Database.Query <MailingElement>(model.Footer); var sender = Database.Query <Group>(model.SenderGroup); var htmlText = worker.CleanHtml; var plainText = worker.PlainText; if (header != null) { htmlText = HtmlWorker.ConcatHtml(header.HtmlText.Value, htmlText); plainText = header.PlainText.Value + plainText; } if (footer != null) { htmlText = HtmlWorker.ConcatHtml(htmlText, footer.HtmlText.Value); plainText = plainText + footer.PlainText.Value; } var contact = Database .Query <Contact>() .Where(p => HasAccess(p, PartAccess.Contact, AccessRight.Read)) .FirstOrDefault(); if (contact == null) { return(PostResult.Failed( Translate("Mailing.Edit.Test.Failed", "Failed message on sending test mail in mailing edit page", "E-Mail could not be sent."))); } var templator = new Templator(new ContactContentProvider(Translator, contact)); htmlText = templator.Apply(htmlText); plainText = templator.Apply(plainText); try { var language = CurrentSession.User.Language.Value; var from = new MailboxAddress( sender.MailName.Value[language], sender.MailAddress.Value[language]); var to = new MailboxAddress(model.TestAddress); var senderKey = sender.GpgKeyId.Value == null ? null : new GpgPrivateKeyInfo( sender.GpgKeyId.Value, sender.GpgKeyPassphrase.Value); var content = new Multipart("alternative"); var textPart = new TextPart("plain") { Text = plainText }; textPart.ContentTransferEncoding = ContentEncoding.QuotedPrintable; content.Add(textPart); var htmlPart = new TextPart("html") { Text = htmlText }; htmlPart.ContentTransferEncoding = ContentEncoding.QuotedPrintable; content.Add(htmlPart); Global.Mail.Send(from, to, senderKey, null, model.Subject, content); Notice("{0} tests mailing with subject {1}", CurrentSession.User.UserName.Value, model.Subject); return(PostResult.Success( Translate("Mailing.Edit.Test.Success", "Success message on sending test mail in mailing edit page", "Test E-Mail sent."))); } catch { return(PostResult.Failed( Translate("Mailing.Edit.Test.Failed", "Failed message on sending test mail in mailing edit page", "E-Mail could not be sent."))); } }; Get["/mailing/send/{id}"] = parameters => { string idString = parameters.id; var mailing = Database.Query <Mailing>(idString); if (mailing != null) { if (HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { return(View["View/mailingsend.sshtml", new MailingSendViewModel(Translator, Database, CurrentSession, mailing)]); } } return(AccessDenied()); }; Post["/mailing/send/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <MailingSendViewModel>(ReadBody()); var mailing = Database.Query <Mailing>(idString); var status = CreateStatus(); if (status.ObjectNotNull(mailing)) { status.AssignDateString("Date", mailing.SendingDate, model.Date, true); status.AddAssignTimeString("Time", mailing.SendingDate, model.Time); if (status.IsSuccess) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { mailing.SendingDate.Value = mailing.SendingDate.Value.Value.ToUniversalTime(); mailing.Status.Value = MailingStatus.Scheduled; Database.Save(mailing); Notice("{0} sent mailing {1}", CurrentSession.User.UserName.Value, mailing); } } } return(status.CreateJsonData()); }; Get["/mailing/delete/{id}"] = parameters => { string idString = parameters.id; var mailing = Database.Query <Mailing>(idString); var status = CreateStatus(); if (status.ObjectNotNull(mailing)) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { using (var transaction = Database.BeginTransaction()) { mailing.Delete(Database); transaction.Commit(); Notice("{0} deleted mailing {1}", CurrentSession.User.UserName.Value, mailing); } } } return(status.CreateJsonData()); }; Get["/mailing/cancel/{id}"] = parameters => { string idString = parameters.id; var mailing = Database.Query <Mailing>(idString); var status = CreateStatus(); if (status.ObjectNotNull(mailing)) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { if (mailing.Status.Value == MailingStatus.Scheduled || mailing.Status.Value == MailingStatus.Sending) { using (var transaction = Database.BeginTransaction()) { mailing.Status.Value = MailingStatus.Canceled; Database.Save(mailing); transaction.Commit(); Notice("{0} canceled mailing {1}", CurrentSession.User.UserName.Value, mailing); } } else { status.SetErrorAccessDenied(); } } } return(status.CreateJsonData()); }; Get["/mailing/copy/{id}"] = parameters => { string idString = parameters.id; var mailing = Database.Query <Mailing>(idString); var status = CreateStatus(); if (status.ObjectNotNull(mailing)) { if (status.HasAccess(mailing.RecipientFeed.Value, PartAccess.Mailings, AccessRight.Write) && (mailing.Sender.Value == null || status.HasAccess(mailing.Sender.Value, PartAccess.Mailings, AccessRight.Write))) { var newMailing = new Mailing(Guid.NewGuid()); newMailing.Title.Value = mailing.Title.Value + Translate("Mailing.Copy.Postfix", "Postfix of copied mailings", " (Copy)"); newMailing.RecipientFeed.Value = mailing.RecipientFeed.Value; newMailing.RecipientTag.Value = mailing.RecipientTag.Value; newMailing.RecipientLanguage.Value = mailing.RecipientLanguage.Value; newMailing.Sender.Value = mailing.Sender.Value; newMailing.Header.Value = mailing.Header.Value; newMailing.Footer.Value = mailing.Footer.Value; newMailing.Subject.Value = mailing.Subject.Value; newMailing.HtmlText.Value = mailing.HtmlText.Value; newMailing.PlainText.Value = mailing.PlainText.Value; newMailing.Creator.Value = CurrentSession.User; newMailing.CreatedDate.Value = DateTime.UtcNow; newMailing.Status.Value = MailingStatus.New; Database.Save(newMailing); Notice("{0} copied mailing {1}", CurrentSession.User.UserName.Value, mailing); } } return(status.CreateJsonData()); }; }