public override void Delete(IDatabase database) { foreach (var mailing in database.Query <Mailing>(DC.Equal("recipientfeedid", Id.Value))) { mailing.Delete(database); } foreach (var subscription in database.Query <Subscription>(DC.Equal("feedid", Id.Value))) { subscription.Delete(database); } foreach (var group in Groups) { group.Delete(database); } foreach (var child in Children.ToList()) { child.Parent.Value = Parent.Value; database.Save(child); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (var address in database.Query <PostalAddress>(DC.Equal("countryid", Id.Value))) { address.Delete(database); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (var roleAssignment in database.Query <RoleAssignment>(DC.Equal("masterroleid", Id.Value))) { database.Delete(roleAssignment); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (var document in database.Query <Sending>(DC.Equal("addressid", Id.Value))) { document.Delete(database); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (var sending in database.Query <Sending>(DC.Equal("mailingid", Id.Value))) { sending.Delete(database); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (var translation in database.Query <PhraseTranslation>(DC.Equal("phraseid", Id.Value))) { translation.Delete(database); } database.Delete(this); }
public override void Delete(IDatabase database) { foreach (PostalAddress address in database.Query <PostalAddress>(DC.Equal("stateid", Id.Value))) { address.State.Value = null; database.Save(address); } database.Delete(this); }
private IEnumerable <ServiceAddress> Targets(IDatabase database, Mailing mailing) { return(database .Query <Subscription>(DC.Equal("feedid", mailing.RecipientFeed.Value.Id.Value)) .Where(m => m.IsActive) .Select(m => m.Contact.Value) .Where(p => (mailing.RecipientTag.Value == null) || (database.Query <TagAssignment>(DC.Equal("contactid", p.Id.Value).And(DC.Equal("tagid", mailing.RecipientTag.Value.Id.Value)))).Any()) .Select(a => a.PrimaryAddress(ServiceType.EMail)) .Where(a => a != null) .ToList()); }
private Country GetCountry(string name) { var country = _db.Query <Country>(DC.Equal("name", name)).FirstOrDefault(); if (country == null) { country = new Country(Guid.NewGuid()); country.Name.Value[Language.German] = name; _db.Save(country); } return(country); }
private State GetState(string name) { var state = _db.Query <State>(DC.Equal("name", name)).FirstOrDefault(); if (state == null) { state = new State(Guid.NewGuid()); state.Name.Value[Language.German] = name; _db.Save(state); } return(state); }
public DashboardItemViewModel(Translator translator, IDatabase db, Feed feed, int indent) { Tag = "td"; Indent = indent.ToString() + "%"; Width = (40 - indent).ToString() + "%"; Name = feed.Name.Value[translator.Language]; var members = db .Query <Subscription>(DC.Equal("feedid", feed.Id.Value)) .Where(m => !m.Contact.Value.Deleted) .ToList(); ValueOne = members.Count().ToString(); }
public override void Delete(IDatabase db) { foreach (var roleAssignment in db.Query <RoleAssignment>(DC.Equal("roleid", Id.Value))) { db.Delete(roleAssignment); } foreach (var permission in db.Query <Permission>(DC.Equal("roleid", Id.Value))) { db.Delete(permission); } db.Delete(this); }
public override void Delete(IDatabase database) { foreach (var element in database.Query <Mailing>(DC.Equal("headerid", Id.Value))) { element.Delete(database); } foreach (var element in database.Query <Mailing>(DC.Equal("footerid", Id.Value))) { element.Delete(database); } database.Delete(this); }
private Tag GetTag(string name, TagUsage usage, TagMode mode) { var tag = _db.Query <Tag>(DC.Equal("name", name)).FirstOrDefault(); if (tag == null) { tag = new Tag(Guid.NewGuid()); tag.Name.Value[Language.German] = name; tag.Usage.Value = usage; tag.Mode.Value = mode; _db.Save(tag); } return(tag); }
public override void Delete(IDatabase database) { foreach (var mailing in database.Query <Mailing>(DC.Equal("recipienttagid", Id.Value))) { mailing.RecipientTag.Value = null; database.Save(mailing); } foreach (var tagAssignment in database.Query <TagAssignment>(DC.Equal("tagid", Id.Value))) { tagAssignment.Delete(database); } database.Delete(this); }
public ContactDetailDocumentViewModel(Translator translator, IDatabase database, Session session, Contact contact) { Id = contact.Id.Value.ToString(); List = new List <ContactDetailDocumentItemViewModel>(database .Query <Document>(DC.Equal("contactid", contact.Id.Value)) .OrderBy(d => d.CreatedDate.Value) .Select(d => new ContactDetailDocumentItemViewModel(translator, d))); Editable = session.HasAccess(contact, PartAccess.TagAssignments, AccessRight.Write) ? "editable" : "accessdenied"; PhraseHeaderFile = translator.Get("Contact.Detail.Document.Header.File", "Column 'File' on the document tab of the contact detail page", "File").EscapeHtml(); PhraseHeaderType = translator.Get("Contact.Detail.Document.Header.Type", "Column 'Type' on the document tab of the contact detail page", "Type").EscapeHtml(); PhraseHeaderCreatedDate = translator.Get("Contact.Detail.Document.Header.CreatedDate", "Column 'CreatedDate' on the document tab of the contact detail page", "Created").EscapeHtml(); PhraseDeleteConfirmationTitle = translator.Get("Contact.Detail.Master.Document.Delete.Confirm.Title", "Delete document confirmation title", "Delete?").EscapeHtml(); PhraseDeleteConfirmationInfo = string.Empty; }
public RoleAssignmentListViewModel(Translator translator, IDatabase database, Session session, Role role) { Id = role.Id.Value.ToString(); ParentId = role.Group.Value.Id.Value.ToString(); PhraseHeaderRoleGroupFeed = translator.Get("RoleAssignment.List.Header.RoleGroupFeed", "Header part 'Feed' in the permission list", "{0} in {1} of {2}", role.Name.Value[translator.Language], role.Group.Value.Name.Value[translator.Language], role.Group.Value.Feed.Value.Name.Value[translator.Language]).EscapeHtml(); List = new List <RoleAssignmentListItemViewModel>( database.Query <RoleAssignment>(DC.Equal("roleid", role.Id.Value)) .Select(ra => new RoleAssignmentListItemViewModel(translator, ra)) .OrderBy(ra => ra.MasterRole)); AddAccess = session.HasAccess(role.Group.Value, PartAccess.RoleAssignments, AccessRight.Write); Editable = AddAccess ? "editable" : "accessdenied"; }
public PermissionListViewModel(Translator translator, IDatabase database, Session session, Role role) { Id = role.Id.Value.ToString(); ParentId = role.Group.Value.Id.Value.ToString(); PhraseHeaderRoleGroupFeed = translator.Get("Permission.List.Header.RoleGroupFeed", "Header part 'Feed' in the permission list", "{0} in {1} of {2}", role.Name.Value[translator.Language], role.Group.Value.Name.Value[translator.Language], role.Group.Value.Feed.Value.Name.Value[translator.Language]).EscapeHtml(); PhraseHeaderPart = translator.Get("Permission.List.Header.Part", "Link 'Part' caption in the permission list", "Part").EscapeHtml(); PhraseHeaderSubject = translator.Get("Permission.List.Header.Subject", "Link 'Subject' caption in the permission list", "Subject").EscapeHtml(); PhraseHeaderRight = translator.Get("Permission.List.Header.Right", "Link 'Right' caption in the permission list", "Right").EscapeHtml(); PhraseDeleteConfirmationTitle = translator.Get("Permission.List.Delete.Confirm.Title", "Delete permission confirmation title", "Delete?").EscapeHtml(); PhraseDeleteConfirmationInfo = string.Empty; List = new List <PermissionListItemViewModel>( database.Query <Permission>(DC.Equal("roleid", role.Id.Value)) .Select(c => new PermissionListItemViewModel(translator, c)) .OrderBy(c => c.Subject + "/" + c.Part + "/" + c.Right)); AddAccess = session.HasAccess(role.Group.Value, PartAccess.Structure, AccessRight.Write); Editable = AddAccess ? "editable" : "accessdenied"; }
public override void Delete(IDatabase database) { foreach (var address in database.Query <PostalAddress>(DC.Equal("contactid", Id.Value))) { address.Delete(database); } foreach (var address in database.Query <ServiceAddress>(DC.Equal("contactid", Id.Value))) { address.Delete(database); } foreach (var subscription in database.Query <Subscription>(DC.Equal("contactid", Id.Value))) { subscription.Delete(database); } foreach (var roleAssignment in database.Query <RoleAssignment>(DC.Equal("contactid", Id.Value))) { roleAssignment.Delete(database); } foreach (var tagAssignment in database.Query <TagAssignment>(DC.Equal("contactid", Id.Value))) { tagAssignment.Delete(database); } foreach (var document in database.Query <Document>(DC.Equal("contactid", Id.Value))) { document.Delete(database); } foreach (var entry in database.Query <JournalEntry>(DC.Equal("contactid", Id.Value))) { entry.Delete(database); } database.Delete(this); }
public RoleListItemViewModel(Translator translator, IDatabase database, Session session, Role role) { Id = role.Id.Value.ToString(); Name = role.Name.Value[translator.Language]; Access = string.Join("<br/>", role.Permissions .Select(p => GetText(translator, p)) .OrderBy(p => p)); if (string.IsNullOrEmpty(Access)) { Access = translator.Get("Role.List.Access.None", "None access in role list", "None"); } Occupants = string.Join("<br/>", database .Query <RoleAssignment>(DC.Equal("roleid", role.Id.Value)) .Select(ra => ra.MasterRole.Value.Name.Value[translator.Language]) .OrderBy(p => p)); if (string.IsNullOrEmpty(Occupants)) { Occupants = translator.Get("Role.List.Occupants.None", "No occupants in role list", "None"); } Editable = session.HasAccess(role.Group.Value.Feed.Value, PartAccess.Structure, AccessRight.Write) ? "editable" : "accessdenied"; PhraseDeleteConfirmationQuestion = translator.Get("Role.List.Delete.Confirm.Question", "Delete role confirmation question", "Do you really wish to delete role {0}?", role.GetText(translator)).EscapeHtml(); }
public ContactDetailJournalViewModel(Translator translator, IDatabase database, Session session, Contact contact) { Id = contact.Id.Value.ToString(); List = new List <ContactDetailJournalItemViewModel>(database .Query <JournalEntry>(DC.Equal("contactid", contact.Id.Value)) .OrderByDescending(d => d.Moment.Value) .Select(d => new ContactDetailJournalItemViewModel(translator, d))); PhraseHeaderMoment = translator.Get("Contact.Detail.Journal.Header.Moment", "Column 'Moment' on the journal tab of the contact detail page", "When").EscapeHtml(); PhraseHeaderSubject = translator.Get("Contact.Detail.Journal.Header.Subject", "Column 'Subject' on the journal tab of the contact detail page", "Who").EscapeHtml(); PhraseHeaderText = translator.Get("Contact.Detail.Journal.Header.Text", "Column 'Text' on the journal tab of the contact detail page", "What").EscapeHtml(); }
public MailingScheduledViewModel(Translator translator, IDatabase db, Session session, Mailing mailing) : this(translator, session) { Id = mailing.Id.Value.ToString(); Title = mailing.Title.Value.EscapeHtml(); Recipients = mailing.RecipientFeed.Value.Name.Value[translator.Language]; if (mailing.RecipientTag.Value != null) { Recipients = " / " + mailing.RecipientTag.Value.Name.Value[translator.Language]; } if (mailing.RecipientLanguage.Value.HasValue) { Recipients = " / " + mailing.RecipientLanguage.Value.Value.Translate(translator); } var number = db .Query <Contact>() .Count(p => p.ActiveSubscriptions.Any(m => m.Feed == mailing.RecipientFeed.Value) && (mailing.RecipientTag.Value == null || p.TagAssignments.Any(t => t.Tag == mailing.RecipientTag.Value))); Recipients += " / " + translator.Get("Mailing.Scheduled.Fields.Recipients.Contacts", "Contacts in the recipients field on the scheduled mailing page", "circa {0} contacts", number); Subject = mailing.Subject.Value.EscapeHtml(); var sendingDate = mailing.SendingDate.Value.HasValue ? mailing.SendingDate.Value.Value.ToLocalTime().ToString("dd.MM.yyyy HH:mm") : string.Empty; var sentDate = mailing.SentDate.Value.HasValue ? mailing.SentDate.Value.Value.ToLocalTime().ToString("dd.MM.yyyy HH:mm") : string.Empty; switch (mailing.Status.Value) { case MailingStatus.Scheduled: Status = translator.Get("Mailing.Scheduled.Field.Status.Scheduled", "Scheduled status in the status field the scheduled mailing page", "Scheduled for {0}", sendingDate).EscapeHtml(); break; case MailingStatus.Sending: Status = translator.Get("Mailing.Scheduled.Field.Status.Sending", "Sending status in the status field the scheduled mailing page", "Sending since {0}", sendingDate).EscapeHtml(); break; case MailingStatus.Sent: Status = translator.Get("Mailing.Scheduled.Field.Status.Sent", "Sent status in the status field the scheduled mailing page", "Sent at {0}", sentDate).EscapeHtml(); break; case MailingStatus.Canceled: Status = translator.Get("Mailing.Scheduled.Field.Status.Canceled", "Canceled status in the status field the scheduled mailing page", "Canceled").EscapeHtml(); break; default: throw new NotSupportedException(); } Sendings = new List <MailingSendingViewModel>(db .Query <Sending>(DC.Equal("mailingid", mailing.Id.Value)) .Select(s => new MailingSendingViewModel(translator, s))); Cancelable = mailing.Status.Value == MailingStatus.Scheduled || mailing.Status.Value == MailingStatus.Sending; }
public ContactListModule() { this.RequiresAuthentication(); Get["/contact/list"] = parameters => { return(View["View/contactlist.sshtml", new ContactListViewModel(Database, Translator, CurrentSession)]); }; Get["/contact/list/settings/list"] = parameters => { var settingsList = Database .Query <SearchSettings>(DC.Equal("userid", CurrentSession.User.Id.Value)) .ToList(); var result = new JArray(); if (!settingsList.Any()) { var settings = new SearchSettings(Guid.NewGuid()); settings.User.Value = CurrentSession.User; settings.Name.Value = Translate("Contact.List.Settings.DefaultName", "Default name for new search settings", "Default"); Database.Save(settings); settingsList.Add(settings); } foreach (var settings in settingsList) { result.Add( new JObject( new JProperty("Id", settings.Id.Value), new JProperty("Name", settings.Name.Value))); } return(result.ToString()); }; Get["/contact/list/settings/get/{ssid}"] = parameters => { string searchSettingsId = parameters.ssid; var settings = Database.Query <SearchSettings>(searchSettingsId); if (settings == null || settings.User.Value != CurrentSession.User) { return(null); } var update = new SearchSettingsUpdate(settings); return(JsonConvert.SerializeObject(update).ToString()); }; Post["/contact/list/settings/set/{ssid}"] = parameters => { var update = JsonConvert.DeserializeObject <SearchSettingsUpdate>(ReadBody()); string searchSettingsId = parameters.ssid; var settings = Database.Query <SearchSettings>(searchSettingsId); var status = CreateStatus(); if (settings == null) { settings = new SearchSettings(Guid.NewGuid()); settings.User.Value = CurrentSession.User; } else if (settings.User.Value != CurrentSession.User) { status.SetErrorAccessDenied(); } update.Apply(Database, settings); Database.Save(settings); return(status.CreateJsonData()); }; Get["/contact/list/data/{ssid}"] = parameters => { string searchSettingsId = parameters.ssid; var settings = Database.Query <SearchSettings>(searchSettingsId); if (settings == null) { return(null); } var contacts = Database.Query <Contact>() .Where(c => Filter(c, settings)); var skip = settings.ItemsPerPage * settings.CurrentPage; if (skip > contacts.Count()) { skip = 0; } var page = contacts .OrderBy(c => c.SortName) .Skip(skip) .Take(settings.ItemsPerPage); return(View["View/contactlist_data.sshtml", new ContactListDataViewModel(Database, Translator, page, settings, CurrentSession)]); }; Get["/contact/list/pages/{ssid}"] = parameters => { string searchSettingsId = parameters.ssid; var settings = Database.Query <SearchSettings>(searchSettingsId); if (settings == null) { return(null); } var personCount = Database.Query <Contact>() .Count(c => Filter(c, settings)); var itemsPerPage = Math.Max(1, settings.ItemsPerPage.Value); var pageCount = Math.Max(1, (personCount / itemsPerPage) + Math.Min(personCount % itemsPerPage, 1)); if (settings.CurrentPage.Value >= pageCount) { settings.CurrentPage.Value = 0; Database.Save(settings); } return(View["View/contactlist_pages.sshtml", new ContactPagesViewModel(Translator, pageCount, settings)]); }; }
private void RunSending(IDatabase database, Mailing mailing) { int remainingCount = 0; foreach (var sending in database.Query <Sending>(DC.Equal("mailingid", mailing.Id.Value))) { if (sending.Status.Value == SendingStatus.Created) { if (_maxMailsCount > 0) { _maxMailsCount--; var header = mailing.Header.Value; var footer = mailing.Footer.Value; var htmlText = mailing.HtmlText.Value; var plainText = mailing.PlainText.Value; 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 translation = new Translation(database); var translator = new Translator(translation, sending.Address.Value.Contact.Value.Language.Value); var templator = new Templator(new ContactContentProvider(translator, sending.Address.Value.Contact.Value)); htmlText = templator.Apply(htmlText); plainText = templator.Apply(plainText); try { var language = sending.Address.Value.Contact.Value.Language.Value; var from = new MimeKit.MailboxAddress( mailing.Sender.Value.MailName.Value[language], mailing.Sender.Value.MailAddress.Value[language]); var to = new MimeKit.MailboxAddress( sending.Address.Value.Contact.Value.ShortHand, sending.Address.Value.Address.Value); var senderKey = mailing.Sender.Value.GpgKeyId.Value == null ? null : new GpgPrivateKeyInfo( mailing.Sender.Value.GpgKeyId.Value, mailing.Sender.Value.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, mailing.Subject.Value, content); sending.Status.Value = SendingStatus.Sent; sending.SentDate.Value = DateTime.UtcNow; database.Save(sending); Journal(database, mailing, sending.Address.Value.Contact.Value, "MailTask.Journal.Sent", "Journal entry sent mail", "Task sent mail {0}", t => mailing.Title.Value); } catch (Exception exception) { sending.Status.Value = SendingStatus.Failed; sending.FailureMessage.Value = exception.Message; sending.SentDate.Value = DateTime.UtcNow; database.Save(sending); Journal(database, mailing, sending.Address.Value.Contact.Value, "MailTask.Journal.Failed", "Journal entry sending mail failed", "Task failed sending mail {0}", t => mailing.Title.Value); } } else { remainingCount++; } } } if (remainingCount < 1) { mailing.Status.Value = MailingStatus.Sent; mailing.SentDate.Value = DateTime.UtcNow; database.Save(mailing); Global.Log.Notice("Mailing {0} has finished sending", mailing.Title); } else { Global.Log.Notice("Mailing {0} needs to send {1} more mails", mailing.Title, remainingCount); } }