Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public void Evaluate(EvaluateContext context)
 {
     context.For <string>("Text")
     .Token("ToMailchimpSubscriberHash", text => _mailChimpService.ComputeSubscriberHash(text))
     .Chain("ToMailchimpSubscriberHash", "Text", text => _mailChimpService.ComputeSubscriberHash(text));
 }
Esempio n. 3
0
        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);
        }