public bool TryUpdateSubscription(MailchimpSubscriptionPart part) { var sub = part.Subscription; if (sub.Audience == null || string.IsNullOrWhiteSpace(sub.Audience.Identifier)) { return(false); } var settings = part.Settings.GetModel <MailchimpSubscriptionPartSettings>(); var putPayload = _tokenizer.Replace(settings.PutPayload, new { Content = part.ContentItem }); var memberEmail = _tokenizer.Replace(settings.MemberEmail, new { Content = part.ContentItem }); var syncronized = false; var urlTokens = new Dictionary <string, string> { { "{list-id}", sub.Audience.Identifier }, { "{member-id}", _mailchimpService.ComputeSubscriberHash(memberEmail) } }; string result = ""; if (sub.Subscribed) { JavaScriptSerializer serializer = new JavaScriptSerializer(); JObject body = JObject.Parse(putPayload ?? "{}"); syncronized = TryApiCall(HttpVerbs.Put, CalculateUrlByType(RequestTypes.Member, urlTokens), body, ref result); } else { syncronized = TryApiCall(HttpVerbs.Delete, CalculateUrlByType(RequestTypes.Member, urlTokens), null, ref result); } return(syncronized); }
public void Evaluate(EvaluateContext context) { context.For <string>("Text") .Token("ToMailchimpSubscriberHash", text => _mailChimpService.ComputeSubscriberHash(text)) .Chain("ToMailchimpSubscriberHash", "Text", text => _mailChimpService.ComputeSubscriberHash(text)); }
public bool TryUpdateSubscription(MailchimpSubscriptionPart part, bool isUserCreation = false) { var sub = part.Subscription; if (sub.Audience == null || string.IsNullOrWhiteSpace(sub.Audience.Identifier)) { return(false); } var settings = part.Settings.GetModel <MailchimpSubscriptionPartSettings>(); var putPayload = _tokenizer.Replace(settings.PutPayload, new { Content = part.ContentItem }); var memberEmail = _tokenizer.Replace(settings.MemberEmail, new { Content = part.ContentItem }); var syncronized = false; var urlTokens = new Dictionary <string, string> { { "{list-id}", sub.Audience.Identifier }, { "{member-id}", _mailchimpService.ComputeSubscriberHash(memberEmail) } }; string result = ""; var urlApiCall = CalculateUrlByType(RequestTypes.Member, urlTokens); if (sub.Subscribed) { // register member JavaScriptSerializer serializer = new JavaScriptSerializer(); JObject body = JObject.Parse(putPayload ?? "{}"); syncronized = TryApiCall(HttpVerbs.Put, urlApiCall, body, ErrorHandlerDefault, ref result); if (isUserCreation) { _workflowManager.TriggerEvent("UserCreatedOnMailchimp", part, () => new Dictionary <string, object> { { "Syncronized", syncronized }, { "APICallEdit", new APICallEdit { Url = urlApiCall, RequestType = RequestTypes.Member.ToString(), HttpVerb = HttpVerbs.Put.ToString(), Payload = putPayload } }, { "Email", part.As <UserPart>() == null ? body["email_address"].ToString() : part.As <UserPart>().Email } }); } else { _workflowManager.TriggerEvent("UserUpdatedOnMailchimp", part, () => new Dictionary <string, object> { { "Syncronized", syncronized }, { "APICallEdit", new APICallEdit { Url = urlApiCall, RequestType = RequestTypes.Member.ToString(), HttpVerb = HttpVerbs.Put.ToString(), Payload = putPayload } }, { "Email", part.As <UserPart>() == null ? body["email_address"].ToString() : part.As <UserPart>().Email } }); } IsNewSubscription = syncronized; _workContextAccessor.GetContext().HttpContext.Items["newsletterSubscription"] = syncronized; } else { // delete the member only if they are being edited if (!isUserCreation) { syncronized = TryApiCall(HttpVerbs.Delete, urlApiCall, null, ErrorHandlerDelete, ref result); _workflowManager.TriggerEvent("UserDeletedOnMailchimp", part, () => new Dictionary <string, object> { { "Syncronized", syncronized }, { "APICallEdit", new APICallEdit { Url = urlApiCall, RequestType = RequestTypes.Member.ToString(), HttpVerb = HttpVerbs.Delete.ToString(), Payload = putPayload } }, { "Email", part.As <UserPart>().Email } }); } else { // return operation successfully executed for the next step syncronized = true; } } return(syncronized); }