Exemplo n.º 1
0
 public Segment(MailingList mailingList, String name, SegmentMatchType matchType = SegmentMatchType.All)
 {
     Criteria = new List<SegmentCriteria>();
     this.MailingListID = mailingList.ID;
     this.Name = name;
     this.MatchType = matchType;
 }
 public Guid Update(MailingList list)
 {
     return _Manager.MakeRequest<Guid>(HttpMethod.POST, String.Format( "/lists/{0}/update", list.ID), list);
 }
        public void Save(MailingList list)
        {
            // do some validation
            foreach (CustomFieldDefinition customField in list.CustomFieldsDefinition)
            {
                if (customField.MailingListID != list.ID && customField.MailingListID != Guid.Empty)
                {
                    throw new InvalidOperationException("Cannot save custom field that belongs to another mailing list");
                }
            }

            if (list.ID == Guid.Empty)
            {
                list.ID = Create(list.Name, list.ConfirmationPage, list.RedirectAfterUnsubscribePage);

                foreach (CustomFieldDefinition customField in list.CustomFieldsDefinition)
                {
                    CreateCustomField(list.ID, customField.Name, customField.Type, customField.IsRequired, customField.Context);
                }
            }
            else
            {
                Update(list);

                MailingList existing = FindByID(list.ID);

                List<Guid> existingCustomFieldIDs = existing.CustomFieldsDefinition.Select(x => x.ID).ToList();
                List<Guid> currentCustomFieldIDs = list.CustomFieldsDefinition.Where(x => x.ID != Guid.Empty).Select(x => x.ID).ToList();

                // find with custom fields where deleted
                foreach (Guid idToDelete in existingCustomFieldIDs.Where(id => !currentCustomFieldIDs.Contains(id)))
                {
                    DeleteCustomField(list.ID, idToDelete);
                }

                // find which custom fields where modified
                foreach (Guid idToUpdate in currentCustomFieldIDs.Where(id => existingCustomFieldIDs.Contains(id)))
                {
                    CustomFieldDefinition customField = list.CustomFieldsDefinition.Single(c => c.ID == idToUpdate);
                    UpdateCustomField(list.ID, customField);
                }

                // find which custom fields where added
                foreach (CustomFieldDefinition customField in list.CustomFieldsDefinition.Where(x => x.ID == Guid.Empty))
                {
                    CreateCustomField(list.ID, customField.Name, customField.Type, customField.IsRequired, customField.Context);
                }

            }

            MailingList reloaded = FindByID(list.ID, true);
            Utilities.CopyProperties<MailingList>(reloaded, list);
        }